ElasticSearch是一款基于Lucene的功能强大的开源分布式搜索与数据分析引擎,它具有高性能、易于扩展的优点,不仅可以从海量数据中快速找到相关信息,还被广泛运用于大数据近实时的分析,包括日志分析、指标监控、信息安全等多个领域。
常听的ELK,即ElasticSearch、Logstash、Kibana,可以搭建一个完整的数据采集、存储、可视化的平台,这里来先动手实践,对其流程有一个感官的理解,后面再慢慢去深入了解ElasticSearch的各种高级用法。
首先,需要下载ELK三件套,注意,这三者的版本必须一致,否则无法正常进行数据采集,我这里采用的是7.8.0版本的:
另外还需要注意的是,安装之前需要JDK环境的支持,JAVA_HOME的配置很简单,这里就不多说了。
安装ElasticSsearch
下载ES压缩包,解压后目录结构如下所示:
目录说明:
配置elasticsearch.yml
配置jvm.options
还有一点要注意,上面的值设置不要超过30GB大小。
启动elasticsearch
检查确认启动成功:
注意这里,cluster_name,是ES集群的名称,默认名字为elasticsearch
,这里只是单机的一个实例,单一个集群有多个节点时,需要确保集群名称一样,可以通过如下方式在本机启动一个集群的多个节点:
./elasticsearch -E node.name=linjk_1 -E cluster.name=linjk-framework-test -E path.data=xxx -E http.port=9202 -d
./elasticsearch -E node.name=linjk_2 -E cluster.name=linjk-framework-test -E path.data=xxx -E http.port=9204 -d
./elasticsearch -E node.name=linjk_3 -E cluster.name=linjk-framework-test -E path.data=xxx -E http.port=9206 -d
节点是一个Elasticsearch实例,本质是一个Java进程,每个节点启动后,会分配一个UID,保存在data目录下。
然后可通过URL查看当前集群有多少个节点:
为了后面方便,这里安装了IK中文分词器:
elasticsearch-plugin.bat install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v7.8.0/elasticsearch-analysis-ik-7.8.0.zip
安装完成后,重启ES,查看安装的插件:
ES配置用户名密码
提示需要配置X-Pack,配置如下:
重启ES,重新配置密码:(这里我都用了一个密码ljk121
)
这是再访问http://localhost:9200,就会弹出登录对话框了:
安装Kibana
上面是通过浏览器去调用ES提供的一些API,但是只能发GET请求,后面需要发POST请求去查询一些数据就不方便了,这里可以借助Kibana这个工具,启动Kibana很简单,修改其配置文件,然后执行bin目录下的bat或sh脚本即可,注意,ES首先需要启动,在这里ES是服务端,Kibana是客户端。
修改配置文件kibana.yml
:
启动:
验证:【http://localhost:5601】*注意:登录Kibana的账号信息和ElasticSearch的一样*
圈住的Dev Tools很有用,如下所示:
可以很方便运行ES提供的一些API函数。这里暂时就用到Kibana的Dev Tools,其他功能后面再慢慢探索。
Docker安装es
扩展
设置Docker网络
Docker Image中安装插件
Cerebro 源码
安装 docker-compose
ELK docker-compose 配置
然后在该文件目录下执行命令docker-compose up
即可同时启动elasticsearch和kibana了。
安装es集群监控工具:
其监控页面如下:
安装Logstash
有了存储数据的ES和可视化工具Kibana,现在就需要从数据库导入数据到ES了,这里从MySQL导入数据到ES,以借助ES强大的搜索和分析能力去进一步实现后面的业务功能。
新建一个测试库和测试表:
新建Logstash导入数据的配置文件:
如ES开启了密码,hosts配置需要修改为:http://elastic:xxx@localhost:9200
编写后最好测试一下配置文件是否有语法问题:
没问题,启动:
报错:
解决:
下载安装插件:
https://github.com/logstash-plugins/logstash-input-jdbc/releases/tag/v4.3.19
然后安装:(生成gem文件这一步需要先安装Ruby)
再次启动,可以看到,在执行数据同步了:
去ES查询验证一下:
可以看到,在ES可以看到了,接下来,在MySQL修改这条数据,看是否也能同步更新ES的数据,同步的时间最小粒度是1分钟,可以看到,数据也变化了。
这里使用一张表的数据,对应于一个索引的数据,数据库的每一条数据对应于索引的一个文档。Elasticsearch是面向文档的,文档是所有可搜索数据的最小单位,文档会被序列化成JSON格式存储,每个文档都有其UUID。
索引体现了逻辑空间的概念,每个索引一般都会有分片,而分片,体现的就是物理空间的概念,索引的mapping定义文档字段的类型,setting定义不同的数据分布。
好了,从采集数据到存储到ES的链路走通了,后面学习再慢慢研究使用ES了。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 linjk121@163.com.