ElasticSearch、Logstash、Kibana简称ELK系统,主要用于日志的收集与分析。linux
一个完整的大型分布式系统,会有不少与业务不相关的系统,其中日志系统是不可或缺的一个,集中式日志系统须要收集来自不一样服务的日志,对它进行集中管理存储以及分析。ELK就是这样一个系统。git
ElasticSearch是一个开源分布式搜索引擎,在ELK系统中提供对数据的搜索、分析、存储。程序员
Logstash主要用于日志的收集,在ELK系统中做为日志数据源的传输。github
Kibana则是一个可视化管理工具,在ELK系统中起可视化分析查看的做用。数据库
ElasticSearch的安装在"准备工做"中已经说明,这里再也不赘述。macos
Kibana6.3.2下载地址(Linux、mac OS、Windows对应不一样的版本):https://www.elastic.co/cn/downloads/past-releases/kibana-6-3-2。Logstatsh历史版本下载页面:https://www.elastic.co/cn/downloads/past-releases#kibana。vim
tar -zxvf kibana-6.3.2-darwin-x86_64.tar.gz
解压到当前用户目录(或者其它位置)。kibana-6.3.2-darwin-x86_64
目录,执行vim config/kibana.yml
命令,修改配置(注意yml
格式的配置文件冒号必须有英文空格。server.port: 5601 server.host: "localhost" elasticsearch.url: "http://localhost:9200" logging.dest: /Users/yulinfeng/log/kibana.log
./bin/kibana
命令启动Kibana。启动完成,打开浏览器输入localhost:5061
。浏览器
安装过程同mac OS。网络
Logstash6.3.2下载地址(Linux、mac OS、Windows通用,下载zip包便可):https://www.elastic.co/cn/downloads/past-releases/logstash-6-3-2。Logstash历史版本下载页面:https://www.elastic.co/cn/downloads/past-releases#logstash。架构
logstash-6.3.2.zip
解压到当前用户目录(或者其它位置)logstash-6.3.2
目录,执行vim logstash.conf
配置文件。input { tcp { mode => "server" host => "127.0.0.1" port => 4568 } } output { elasticsearch { hosts => ["localhost:9200"] index => "log" document_type => "log4j2" } }
这个配置的含义为,Logstash的日志采集来源是4568
端口(后面咱们会经过程序代码经过log4j向端口4568
打印日志)。Logstash的日志向ElasticSearch输出。
./bin/logstash -f logstash.conf
命令启动Logstash。安装过程同mac OS。
在部署Logstash时,咱们定义了日志的来源是端口4568
,接下来咱们模拟一个程序利用log4j2经过socket链接将日志发送到4568
端口,DEMO完整代码地址:https://github.com/yu-linfeng/elasticsearch6.x_tutorial/tree/master/code/logstash。
DEMO的逻辑只有打印日志,主要在log4j2.xml
须要配置socket方式打印。
...... <Socket name="logstash-tcp" host="localhost" port="4568" protocol="TCP"> <PatternLayout pattern="${LOG_PATTERN}" /> </Socket> ......
详细代码直接查看源码https://github.com/yu-linfeng/elasticsearch6.x_tutorial/tree/master/code/logstash。
启动Spring Boot程序后,控制台开始输出日志,此时返回浏览器查看localhost:5061
,点击Management
菜单,Index pattern
中输入"log"(即定义的索引Index),一直下一步便可。
配置完成后,点击Discover
菜单,就可看到程序DEMO打印的日志,并可进行搜索。如今,就请尽情探索吧。
一般状况下,使用ES的地方通常都会使用MySQL,将MySQL做为数据源,ES做为前台搜索。写入一条数据到MySQL时,也须要同时写入ES中。此时写入ES就有两种方式:一种同步的方式,另外一种异步的方式。写入MySQL后同步写入ES,好处是实时更新,插入成功便可搜索,缺点也很明显,事务的问题(MySQL成功,ES失败的状况应提供一种保障机制达到数据一致性),性能的问题(一条数据须要同时插入MySQL和ES成功后才能返回结果)。另外一种状况是在写入MySQL成功后,异步写入ES,优势是数据一致性问题比较容易保证,性能的问题也没必要等待太久,缺点也很明显,插入MySQL成功后,因为异步的缘由,并不能马上从ES搜索出结果。
写入MySQL成功,即数据库中数据新增了一条数据,利用MySQL的binlog
技术能监测到数据的变化,从而发送一条MQ写入到ES中。有关binlog
可自行搜索。Canal
便是基于数据库增量日志解析,提供增量数据订阅和消费的一款阿里巴巴开源软件。
在网络上已经有不少资料讲解如何经过Canal
进行多数据源同步,这里再也不给出详细的部署过程,下面是异步写入ES的架构图。
Canal下载地址:https://github.com/alibaba/canal/releases(下载deployer版本)。
关注公众号:CoderBuff,回复“es”获取《ElasticSearch6.x实战教程》完整版PDF。