【Elasticsearchシリーズ(1)】Elasticsearchとは?

一緒に書く習慣を身につけましょう!「ナゲッツデイリーニュープラン・4月アップデートチャレンジ」に参加して11日目です。クリックしてイベントの詳細をご覧ください

序章

ElasticSearchは、JSONベースの分散検索エンジンであり、ESと呼ばれます

ElasticSearchはLuceneに基づいており、Luceneの複雑さを隠し、代わりにシンプルで一貫性のあるRestfulAPIを提供します。

Elastic Stackは、ログ分析インジケーターモニタリング情報セキュリティなど、ビッグデータのほぼリアルタイムの分析の分野でも広く使用されています。大量の構造化データと非構造化データを探索し、オンデマンドで視覚的なレポートを作成し、データを監視するためのアラームしきい値を設定し、機械学習を使用して異常な状態を自動的に特定するのに役立ちます

ESでできること

ESが得意なのは検索です!特にあいまい検索!数字、テキスト、ジオロケーション、構造化データ、非構造化データ。すべてのデータ型に適用されます。全文検索は、世界中の企業がElasticsearchを使用して解決している課題の氷山の一角にすぎません。

データについては、次の3つのタイプに分けることができます。

1)構造化データ

簡単に言えば、構造化データは、構造化データと呼ばれる2次元のテーブル構造に編成できるデータです。

たとえば、学生情報は次のように表現できます

{
  "name": "吉尔裤裆甩",
  "age": 18,
  "length": 18
  "high": 180
}
复制代码

通常、この情報はMySQLやOracleデータベースなどのリレーショナルデータベースに保存されます。SQLを使用してこれらのデータを簡単に管理でき、インデックスを使用してクエリを高速化することもできます。

2)非構造化データ

2次元のテーブル構造で記述できないデータは、非構造化データと呼ばれます。

ログファイル、さまざまなドキュメント、写真、ビデオ、XML、HTMLなど、多くの非構造化データがあります。このデータは通常、MongoDB、Redisなどの非リレーショナルデータベース(SQLなし)に保存されます。

这种数据往往使用 Key Value 形式进行保存,通过 Key 来定位数据或许很快;但是有一点要知道的是,这种数据一般都是维度广,数据量大,无法做到和关系型数据库那样搜索,更无法去遍历,难以实现模糊搜索

为了对结构化和非结构化数据进行准确的查询,ElasticSearch 诞生了,对于数据的实时采集、分析、存储、搜索,由 ElasticSearch 为核心的 Elastic Stack 有着相当不错的表现,同时也是我们必须掌握的技能

ES 中的重要概念

  • Near Realtime(NRT) - 近实时。数据提交索引后,立马就可以搜索到
  • Cluster 集群 - 集群由一个唯一的名字标识,默认为“elasticsearch”;集群名称非常重要,具有相同集群名的节点才会组成一个集群
  • Node 节点 - 存储集群的数据,参与集群的索引和搜索功能
  • Index 索引 - 索引是一个文档的集合,每个索引有唯一的名字,可以通过这个名字来操作索引;一个集群中可以有任意多个索引
  • Document 文档 - 被索引的一条数据,索引的基本信息单元,以JSON格式来表示
  • Shard 分片 - 在创建一个索引时可以指定分成多少个分片来存储。每个分片本身也是一个功能完善且独立的“索引”,可以被放置在集群的任意节点上
  • Replication 备份 - 一个分片可以有多个备份(副本)

与关系型数据库的基本概念对比

关系型数据库 ElasticSearch
数据库(Database) 索引(Index)
表(Table) 类型(Type)(将被废弃)
行(Row) 文档(Document)
列(Column) 字段(Field)
表结构(Schema) 映射(Mapping)
索引 倒排索引(重点)
SQL 查询 DSL
SELECT * FROM TABLE GET http://……
UPDATE TABLE SET PUT http://……
DELETE FROM TABLE DELETE http://……

Elastic Stack 生态

以 Elasticsesarch 为核心,先是引入了 Kibina、Logstash,称为 ELK,后来又引入了 Beats,就由 ELK 更名为 Elastic Stack

image.png

其中:

  • ES:一款基于 JSON 的分布式搜索引擎,Elastic Stack 生态的核心

  • Kibana:实现数据可视化,以图表的形式呈现数据(柱状图、线状图、饼图、旭日图等等),并且具有可扩展的用户界面,可以全方位的配置和管理 ElasticSearch

  • Logstash:Logstash是动态数据收集管道 ,拥有可扩展的插件生态系统,能够动态地采集、转换和传输数据,并且不受格式或复杂度的影响;Logstash 能够与ElasticSearch产生强大的协同作用

  • Beats:负责采集数据的组件,Beats是一个面向轻量型采集器 的平台,这些采集器可以从边缘机器向Logstash、ElasticSearch发送数据,它是由Go语言进行开发的,运行效率方面比较快。从下图中可以看出,不同Beats的套件是针对不同的数据源

Elastic Stack 的发展历程

Elastic Stack 主要体现在日志收集系统的演变上

一个典型的日志系统主要包括以下几点

  • 收集 - 能够采集多种来源的日志数
  • 传输 - 能够稳定的把日志数据解析过滤并传输到存储系统
  • 存储 - 持久化日志数据
  • 分析 - UI 分析支持
  • 警告 - 能够提供错误报告,监控机制

1)第一阶段,Beats 采集,ES 存储,Kinaba 展示

image.png

2)第二阶段引入了 Logstash

image.png

第二阶段引入 Logstash 后,相比第一阶段新增了很多的优势

  1. Logstash具有基于磁盘的自适应缓冲系统,该系统将吸收传入的吞吐量,从而减轻背压
  2. 增加了更多的数据源,可以从其他数据源(例如数据库,S3或消息传递队列)中提取数据
  3. 可以将数据发往更多的目的地
  4. 使用条件数据流逻辑组成更复杂的处理管道

beats结合logstash带来的优势

  • 水平可扩展性,高可用性和可变负载处理;Beats 和 logstash 可以实现节点之间的负载均衡,多个Logstash 可以实现 Logstash 的高可用
  • 消息持久性与至少一次交付保证;使用 Beats 进行日志收集时,可以保证至少一次交付
  • 具有身份验证和有线加密的端到端安全传输;从 Beats 到 Logstash 以及从 Logstash 到Elasticsearch 的传输都可以使用加密方式传递
  • 增加更多数据源,如下图显示

image.png

3)第三阶段在 Beats 和 Logstash 中间添加了消息队列

image.png

中间件的加入有以下几点好处

  1. 降低对日志所在机器的影响,这些机器上一般都部署着反向代理或应用服务,本身负载就很重了,所以尽可能的在这些机器上少做
  2. 如果有很多台机器需要做日志收集,那么让每台机器都向Elasticsearch持续写入数据,必然会对Elasticsearch造成压力,因此需要对数据进行缓冲,同时,这样的缓冲也可以一定程度的保护数据不丢失
  3. 将日志数据的格式化与处理放到Indexer中统一做,可以在一处修改代码、部署,避免需要到多台机器上去修改配置

公式に共有されたElasticStackのベストプラクティス

ログ収集システム

image.png

image.png

メトリック収集とAPMパフォーマンスモニタリング

image.png

マルチデータセンターソリューション

冗長性による高可用性

image.png

2つのデータ収集センター(2つの工場からのデータ収集など)、収集されたデータの集約

image.png

データが分散し、クラスター全体を検索

image.png

おすすめ

転載: juejin.im/post/7085632317233823757