这两天看了好几篇帖子,写zipkin与dubbo整合的内容都不全面,忍不住亲自上手码一遍。
利用zipkin可以对dubbo进行调用链监控,可以查到调用链中的dubbo服务的性能,并且dubbo提供了SPI的接口,能很容易完成并自定义相应的filter去监控dubbo服务。
ZipKin介绍
Zipkin是一个致力于收集分布式服务的时间数据的分布式跟踪系统。
Zipkin 主要涉及四个组件:collector(数据采集),storage(数据存储),search(数据查询),UI(数据展示)。
github源码地址:/openzipkin/zipkin。
Zipkin提供了可插拔数据存储方式:In-Memory,MySql, Cassandra, Elasticsearch
ZipKin部署与运行 (注意需要在linux下运行,JDK1.8)
1、下载zipkin
/maven2/io/zipkin/java/zipkin-server/2.11.7/zipkin-server-2.11.7-exec.jar
2、运行zipkin
(1)In-Memory方式
注意:内存存储,zipkin重启后数据会丢失,建议测试环境使用
(2)MySql方式
目前只与MySQL的5.6-7。它的设计是易于理解,使用简单。但是,当数据量大时,查询很慢。性能不是很好。
创建数据库zipkin,建表 :
启动zipkin命令
(3)Elasticsearch方式
创建elasticsearch用户,安装启动Elasticsearch服务
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
zipkin启动命令
启动成功访问地址:http://192.168.20.15:9411/zipkin/(192.168.20.15替换为对应zipkin部署服务器地址)
效果图如下:
整合
简单的描述一下,同ServletFilter一样,在dubbo中利用Filter过滤请求,传递TraceId等参数,生成相应的span传递给zipkin服务器。引入brave-instrumentation-dubbo-rpc包,这是一个SPI的Filter包。
brave-instrumentation-dubbo-rpc包里面有一个TracingFilter的类,在其invoke方法中实现了对span的一些操作。
该Filter是以SPI的方式引入dubbo的,在默认文件/META-INF/dubbo/com.alibaba.dubbo.rpc.Filter中,有这样的声明:
然后在dubbo的配置中引入该Filter即可。
wholly-dubbo-provider.xml
wholly-dubbo-consumer.xml
brave.properties
然后还需要为该Filter注入一个Tracing实例,并且该实例名必须为tracing。
Tracing类的主要作用是针对span的操作做一些配置,并设置上传zipkin服务器。
效果
在这里不演示如何配置dubbo服务,之前的博文有相关介绍。效果图如下:
示例下载:zipkin+dubbo整合示例
参考:
zipkin与dubbo整合-https://shiliewrain.github.io//07/20/zipkin2-dubbo/
dubbo+zipkin调用链监控-/ASPNET/p/6709900.html