Elasticsearch概述

Elasticsearch是一款非常强大的开源“搜索”及“分析”引擎。除了搜索,结合Kibana、Logstash、Beats,以及Elastic Stack的技术生态,Elasticsearch还被广泛运用在大数据实时分析领域——包括日志分析(ELK)、指标监控、信息安全等领域。

Elasticsearch起源于开源搜索引擎类库Lucene,Elasticsearch的创始人Shay Banon于2004年基于Lucene开发了“Compass”,并在2010年重写“Compass”项目之后,将其正式命名为“Elasticsearch”。

目前在搜索引擎分类排名中Elasticsearch名列*,除此之外,同类的产品还有Solor(Apache开源项目)和Splunk(商业项目),它们三者提供的功能非常相似。但是在程序员开源社区中Elasticsearch的活跃度*高。

Elasticsearch的功能特性

Elasticsearchs是一种典型的分布式系统,支持水平扩展。当数据规模变大的时候,Elasticsearch的集群节点可以从单个扩展到数百个。

Elasticsearch集群还支持设置不同的节点类型。例如针对日志类的应用可以支持Hot&Warm架构——冷热架构部署。Elasticsearch的分布式架构如下图所示:

%title插图%num

除此之外,Elasticsearch还支持多种方式集成接入。例如,可以被多种语言方便的集成(Java、.Net、Python、PHP..);灵活的RESTful API;*新版本甚至还支持JDBC&ODBC方式的接入。

Elastic Stack家族成员

Elasticsearch之所以如此流行,处理活跃的社区外,很重要的一点就在于其背后还有一个强大的商业公司——Elastic在支撑。Elastic Stack的生态圈,如下图所示:

%title插图%num

接下来分别介绍下Elastic Stack各技术组件的用途,具体如下:

Logstash

开源的服务器端数据处理管道,支持从不同来源采集数据,转换数据,并将数据发送到不同的存储库中。2013年被Elasticsearch收购。

Logstash支持实时解析和转换数据,例如,从IP地址破译出地理坐标,以及将PII数据匿名化,完全排除敏感字段等。此外,Logstash还支持插件的扩展方式,目前大约有200多个插件,可以解决日志、数据库等多种场景的实际需求。

另外,Logstash的可靠性及安全性也很高。Logstash会通过持久化队列来保证至少将运行中的事件送达一次,以及支持数据传输加密。

Kibana

基于Logstash的数据可视化分析工具。

Beats

轻量的数据采集器,Go语言开发,运行速度非常快。场景的Beats插件有:Filebeat(日志文件插件)、Packetbeat、Heartbeat等。

X-Pack(商业化套件-已开源)

X-Pack开源之后,部分X-Pack功能支持免费使用,例如6.8和7.1版本开始,Security功能可以免费使用。

Elastic Stack应用场景

Elastic Stack技术栈常见的应用场景如下:

(1)下载Kibana安装包,命令如下:

  1. $ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.14.0-darwin-x86_64.tar.gz

下载*新的7.14.0版本的MacOS二进制安装包。之后解压下载的安装包,命令如下:

  1. $ tar zxvf kibana-7.14.0-darwin-x86_64.tar.gz

(2)编辑conf/kibana.yaml文件,指定elasticsearch集群实例的地址编辑配置文件,指定Elasticsearch的集群地址,修改的内容如下:

  1. # The URLs of the Elasticsearch instances to use for all your queries.
  2. elasticsearch.hosts: [“http://localhost:9204”,“http://localhost:9201”,“http://localhost:9203”]

(3)启动Kibana,命令如下:

  1. $ ./bin/kibana

此时,打开浏览器进入Kibana的首页,如下图所示:

%title插图%num

如上图所示,可以向Elasticsearch集群中添加Kibana提供的样例数据。

(4)使用Kibana的“Dev Tools”工具Kibana的“Dev Tools”工具,能够帮助我们很方便执行一些elasticsearch的API。如下图所示:

%title插图%num

具体的查询命令如下:

  1. #执行查询集群节点状态的API。
  2. get /_cat/nodes/?v