Elastic Search简称ES,是一款在搜索和日志检索领域极其成功的开源产品,当然ES背后的商业化公司也很成功。很多大的知名品牌,像是SAP、Booking、Ebay都在使用ES,
今天就来实际使用一下ES这款成功的商业化产品,并且介绍一下它的特点。
Elastic Search VS Luncence
说到搜索还是要提下Luncence,Luncence基本上可以称为搜索领域的鼻祖了,是很早期的索引构建库。但是Luncence的主要问题有两点,其一是只支持Java类库的调用方式,学习和使用门槛很高,其二是Luncence没有线性扩展能力。搜索又是一个几乎随业务量线性扩张的功能,所以是否支持线性拓展资源很重要。
ES其实是对Luncence的库的上层封装,通过Restful的形式可以让日志的构建和检索等功能更容易在多语言环境下调用,做到即使是开发小白也能快速上手。另外,ES支持线性拓展,使得使用ES的用户不需要担心资源协调的问题。
Elastic Search整体架构
接下来介绍下ES的各个模块,从下向上介绍。
(1) Beat
Beat是一个轻量的数据采集器,Beat可以采集各种格式的数据,比如日志文件、值班、网络数据等,并且把这些数据传输到Logstash。
(2)Logstash
Logstash是一个服务端的数据管道,能够从多个数据来源采集数据,完成数据转换,然后将数据传输到Elastic Search。在Logstash中可以实现一些数据的过滤、转码等功能,比如把非结构化数据转化成结构化数据,比如从IP地址破译出地理坐标。
(3)Elastic Search
Elastic Search主要做数据和索引的存储以及相关查询的计算。
(4)Kibana
Kibana主要是一个数据可视化界面,通过可视化的方式展示ES的计算和索引结果。
(5)X-Pack
X-Pack是ES内部插件,在老的ES版本是收费的,在新的版本中很多插件是被开源免费使用的。在X-Pack中可以直接使用机器学习、图关系、安全相关的插件。
所以整体的流程如下,先通过Beat采集数据,然后数据通过管道写到Logstash做一步处理,接着写到Elastic Search,然后通过Kibana做数据的可视化展现。
具体操作体验
接下来就具体体验下ES的功能,当然是选择通过Docker的模式run一下最快。可以参考:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
可以选择通过拉起单一Docker的模式体验,也可以通过Docker Compose的方式体验(Docker Compose比较适合构建一个分布式ES集群)。我两个方案都试了试,Docker Compose一堆坑,官方案例都没跑起来。
具体操作流程如下:
(1) 先Pull一个官方镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.2
(2) 接着拉起这个镜像
docker run -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.2
(3)这个时候ES的服务就已经跑起来了,Docker化的模式就是如此方便,服务的本地地址是localhost:9200。
(4)发送服务请求到localhost:9200,
curl -X GET "localhost:9200/_cat/nodes?v=true&pretty"
可以查到ES服务的节点的具体情况。
总结一下
ES基本上是目前业内在搜索和日志检索领域非常成熟的开源工具,ES有很多丰富的插件,比如Kibana、Logstash,而且ES对于容器化技术非常拥抱,可以快速的做部署。最后一点是ES的全部功能都可以通过一套标准的RestFul接口去调用,这个设计很方便用户使用。