在前文《Spring Cloud之分布式链路跟踪服务Sleuth》中我们介绍了如何对微服务做分布式链路数据的跟踪。但是目前仍存在一个问题:Zipkin-Server默认是把链路数据保存的内存中,当积累的数据过多后,会存在内存溢出的风险。因此本文着重解决这个问题,介绍了一种基于Spring Cloud Sleuth + RabbitMQ + ElasticSearch的数据持久化存储解决方案。
1. 改造Zipkin Server
我们假设你已经按照前文《Spring Cloud之分布式链路跟踪服务Sleuth》的步骤,实现了Zipkin链路数据通过RabbitMQ传输。首先对于你的Zipkin Server服务,加入以下依赖:
1 | <dependency> |
配置文件中加入以下ElasticSearch的配置:
1 | #zipkin数据持久化 |
然后重启Zipkin Server即可,查看你的ElasticSearch,会发现多了zipkin-YYYY-MM-DD的索引数据,调用链路的数据也会正常的显示。
2. 配置Zipkin Dependencies
别高兴的太早,如果你查看Zipkin的依赖分析,会发现没有依赖关系的数据:
这是因为es中只存储了链路的调用数据,还没有计算依赖关系,所以需要一个Zipkin提供的插件来计算依赖关系,根据openzipkin中的介绍,首先下载jar包:
1 | wget -O zipkin-dependencies.jar 'https://search.maven.org/remote_content?g=io.zipkin.dependencies&a=zipkin-dependencies&v=LATEST' |
计算依赖关系:
1 | STORAGE_TYPE=elasticsearch ES_HOSTS=http://es的IP:端口 java -jar zipkin-dependencies-2.0.4.jar |
稍等片刻,插件会把依赖关系的数据计算好:
此时,再打开Zipkin Server的管理页面,会发现依赖分析页面已经有数据了:
对于生产环境来说,可以写一个定时任务,执行依赖分析的计算插件。
以上内容就是关于Spring Cloud之Zipkin链路数据持久化策略的全部内容了,谢谢你阅读到了这里!
Author:zhaoyh