一、什么是链路跟踪?
在微服务架构中,多个服务模块之间的调用通常呈现链式调用,链路中的任何一个调用缓解出现高延时或者错误都会引起整个请求最后的失败,因此我们需要对这些调用链进行监控和跟踪,当调用出现问题时方便进行问题排查、服务隔离切换等。Spring Cloud Sleuth提供了一套完整的服务跟踪解决方案,它兼容支持Zipkin。
Zipkin是 Twitter 的一个开源项目,基于 Google Dapper实现。可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助我们查询跟踪数据以实现对分布式系统的监控,及时发现系统中出现的问题并找出系统性能瓶颈的根源。Zipkin的架构图如下
Transport是zipkin对外提供的接口,目前有HTTP、Kafka、Scribe三种。HTTP采用json格式,接口定义见https://github.com/openzipkin/zipkin-api,Scribe是Facebook的日志收集系统https://github.com/facebook/scribe。SpringCloud从F版起不需要自己构建Zipkin server了,只需调用jar包即可。zipkin完整的调用链路图如下
二、Zipkin安装和使用
1、安装方式比较简单,下载zipkin-server-2.12.9-exec.jar包,用java -jar zipkin-server-2.12.9-exec.jar 命令即可启动。如不能下载也可以访问https://github.com/openzipkin/zipkin下载源码安装,启动成功后控制台界面如下
接下来访问http://localhost:9411/zipkin会出现zipkin的web管理界面如下
2、配置服务模块支持zipkin
a.引入jar包
<! --包含了sleuth+zipkin--> <dependency> <groupId>org.springframework.cloud</ groupid> <artifactId>spring-cloud-starter-zipkin</artifactid> </dependency>
b.修改yml配置文件
spring: application: name: cloud-payment-service zipkin: base-ur1: http://localhost:9411 #注册到zipkin sleuth: sampler: probability: 1 #采样率值介于0到1之间,1则表示全部采集
经过以上步骤,链路跟踪搭建完成,当微服务之间产生调用后,就会在zipkin的web管理页面显示相应的信息,我们就可以根据相关信息来监控服务之间的调用和排查调用问题。