filebeat+ELK(Elasticsearch+Logstash+Kibana)日志收集系统是一套跟程序几乎没有耦合的基于日志文件的日志收集系统,它通过filebeat扫描日志系统,将更新的日志实时收集到Logstash中进行过滤筛选和格式标准化,然后输出到Elasticsearch上,最后通过Kibana提供的系统和前端页面进行查看筛选等操作;
zipkin是基于Spring RestTemplate及拦截器实现的请求链路追踪工具,本文将简单介绍如何在windows本地搭建一套filebeat+ELK日志系统并通过zipkin brave实现日志链路的追踪。
1.搭建filebeat+ELK系统
首先在官网下载filebeat及ELK相关工具(似乎官方并不推荐使用Logstash进行日志管理):
https://www.elastic.co/cn/products/elastic-stack(Logstash)
https://www.elastic.co/cn/products/log-monitoring(Elasticsearch+Kibana)
然后解压好准备修改配置文件:
启动filebeat:
首先修改filebeat根目录下的filebeat.yml配置日志文件以及输出到Logstash的地址:
从配置文件上可以看到,filebeat也支持直接输出日志信息到Elasticsearch而不需要Logstash,此外Logstash也可以做日志收集,但根据网上的资料来看,似乎filebeat做日志收集的效率要远远高于Logstash,因此推荐在集群中采用filebeat对分布式日志进行收集并输出到Logstash集群进行整理和中转。
进入filebeat的根目录使用命令启动filebeat:
filebeat -e -c filebeat.yml
到这里filebeat的启动就完成了。
启动Elasticsearch和Kibana:
接下来启动Elasticsearch和Kibana,首先在Kibana根目录下的config里找到配置文件配置Kibana:
然后分别在Elasticsearch和Kibana的根目录的bin中找到相应的.bat文件双击即可,访问http://localhost:9200/正确显示json串表示Elasticsearch启动成功,访问http://localhost:5601显示Kibana的前端页面表示Kibana启动成功。
启动Logstash:
最后启动Logstash,在Logstash根目录下将config中的.conf配置文件复制粘贴到bin目录下,然后在bin目录下使用命令启动Logstash:
logstash -f logstash-sample.conf --config.reload.automatic
其中 --config.reload.automatic表示动态加载配置文件。
测试系统:
在项目中将日志的输出文件配置到filebeat的收集路径下:
然后准备打印日志的测试接口并启动请求该接口:
在Kibana上增加筛选条件:
查询结果:
2.使用zipkin brave实现日志请求链路追踪
通常一个跨服务的请求可能会涉及到多个服务器上的多条日志,如果通过参数来实现将需要非常大量的代码,因此zipkin brave通过Spring RestTemplate传递了一个伴随整个请求的拦截器来传递一个id来作为该请求的id,并提供了一个id标记了该请求在该服务上的id来标记该日志链路中各个日志都属于哪个服务,拦截器代码、依赖及日志配置文件参考:
https://blog.csdn.net/qq924862077/article/details/83217032
该链接中依赖缺少一个:
<dependency>
<groupId>io.zipkin.reporter2</groupId>
<artifactId>zipkin-sender-okhttp3</artifactId>
<version>2.9.0</version>
</dependency>
添加该链接中的依赖、拦截器和日志配置文件并且创建第二个工程同样添加该链接中的依赖、拦截器和日志配置文件,然后提供测试接口,注意这里的跨服务请求需要自动装配拦截器中的RestTemplate:
第二个工程测试接口:
测试结果: