Zinkin进阶篇-Zipkin-dependencies的应用

前言
之前章节中已经实现了zipkin数据持久化至elasticsearch,但其带来了一个负面作用,无法正常显示dependencies。通过阅读zipkin在github说明,可以看到已经有了解决方案,本章将介绍如何实现并验证。

本章概要
1、寻找解决方案;
2、方案验证;

寻找解决方案
1、通过阅读Zipkin在Github(https://github.com/openzipkin/zipkin#elasticsearch)中的说明,可以看到如下描述:
Zinkin进阶篇-Zipkin-dependencies的应用
2、根据线路,继续寻找Zipkin-dependencies项目(https://github.com/openzipkin/zipkin-dependencies),在其项目可以看到对应于ES存储场景下,启动zipkin-dependencies,jar相应的参数说明:
Zinkin进阶篇-Zipkin-dependencies的应用

3、上述参数可以看到index的配置和date_separator说明,其主要作用于指定索引和自定义索引日期格式,具体官方(https://github.com/openzipkin/zipkin/tree/master/zipkin-storage/elasticsearch-http#customizing-daily-index-format)说明如下:
Zinkin进阶篇-Zipkin-dependencies的应用

4、官方提供了两种使用方式:

方案验证
1、依次启动consul、configserver、service1(4001)、consumer1(3331)、api-gatway(5001)五个服务;

2、确保rabbitMQ已经启动;

3、确保elasticsearch务已经启动(启动一个elasticsearch插件head对应端口9100);

4、确保kibana(5601)服务已经启动;

5、最后启动zipkin-server(9411)服务;

6、访问http://localhost:5001/api-consumer01/hystrix/feign/getServerInfo/shuaishuai?accessToken=accessToken,实现服务链路信息的记录(三次请求);

7、可以看到如下三条请求的链路信息:
Zinkin进阶篇-Zipkin-dependencies的应用

8、通过ES的head插件,可以看到相关的索引名称:
Zinkin进阶篇-Zipkin-dependencies的应用
Note:
  • 特别关注红色标记部分,也就是'今天'的索引;
  • 1-19已经做过验证,故已经生成了dependency相对应的索引,本次调试仅仅为了整理记录,故未删除;

9、执行docker命令如下即可:
docker run --name zipkin-dependencies --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.16.98:9200 --env ES_INDEX=zipkin --rm=true -e JAVA_OPTS="-Xmx3550m -Xms3550m" openzipkin/zipkin-dependencies:1.9.2
Zinkin进阶篇-Zipkin-dependencies的应用
Note:
  • 启动可能出现异常,提示内存不够,故添加JAVA_OPTS,其对应于Dockerfile中的配置;
  • 特别关注镜像的版本,并非使用最新的版本能够向下兼容所有,当前使用1.9.2版本;
  • 红色框部分可以看到其数据存储至ES中,新建了一个zipkin:dependency-2018-01-30索引

10、可以看到新增了如下索引
Zinkin进阶篇-Zipkin-dependencies的应用

11、此时我们再来看Dependencies,即可看下如下的服务依赖图:
Zinkin进阶篇-Zipkin-dependencies的应用

12、简单的穿透查看api-gatewayconsumer1之间的调用关系:
Zinkin进阶篇-Zipkin-dependencies的应用
其对应的索引文档如下:
Zinkin进阶篇-Zipkin-dependencies的应用

13、再次访问http://localhost:5001/api-consumer01/hystrix/feign/getServerInfo/shuaishuai?accessToken=accessToken,实现服务链路信息的记录(三次请求),此时索引中的数据并没有变化,需要再次执行步骤9中的docker命令后方会更新:
Zinkin进阶篇-Zipkin-dependencies的应用
原始文档版本也更新了:
Zinkin进阶篇-Zipkin-dependencies的应用


总结:
zipkin-dependencies可以理解为一个插件工具,其提供了对当日索引文档的分析处理,其不能作为一个实时服务应用,在实际生产环境中,需要根据实际业务需要设定其处理模式,如通过脚本轮询处理,达到伪实时,目前来看必要性不是很大。


扩展
结合之前1-19号生成的索引,做一个跨度查询
Zinkin进阶篇-Zipkin-dependencies的应用
可以看到数据已经被聚合,其中api-gateway请求consumer1次数大于consumer1请求service1次数此时,故可以看到两条线有明显的差异,具体请求次数如下:
  • api-gateway请求consumer1次数
Zinkin进阶篇-Zipkin-dependencies的应用
  • consumer1请求service1次数
Zinkin进阶篇-Zipkin-dependencies的应用
简单看下原始数据文档,1-19索引:
Zinkin进阶篇-Zipkin-dependencies的应用
1-30索引:
Zinkin进阶篇-Zipkin-dependencies的应用
与上述最终显示结果一致。