为什么使用
Spring Cloud Sleuth为Spring云实现了分布式跟踪解决方案。
Zipkin是Twitter开源的分布式实时数据跟踪系统(Distributed Tracking System)。
Spring Cloud Sleuth对于分布式链路的跟踪仅仅是生成一些数据,这些数据不便于人类阅读,所以我们一般把这种跟踪数据上传给Zipkin Server,由Zipkin通过UI页面统一进行数据的展示。
Sleuth 官方文档地址:Spring Cloud Sleuth
Zipkin官网地址:OpenZipkin · A distributed tracing system
基本术语
Span(跨度):
每一个调用就会产生一个
span(跨度)是一个基本工作单元,span用一个64位的id唯一标识。除id外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签), spanId、parentId等。span被启动和停止时,记录了时间信息。初始化 span被称为"rootspan",该span的id和trace的id相等。
Trace(跟踪):
每一个调用链产生一个
trace(跟踪)是一组共享"rootspan"的span组成的树状结构,trace也用一个64位的id唯一标识,trace中的所有span都共享该trace的id。
Annotation(标注):
标注一个服务的一系列时间信息
Annotation(标注)用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。
CS(Client Sent客户端发送)
客户端发起一个请求,该annotation描述了span的开始。
SR(Server Received服务器端接收)
服务器端获得请求并准备处理它。如果用SR减去CS时间戳,就能得到网络延迟。
SS(Server Sent服务器端发送)
该annotation表明完成请求处理(当响应发回客户端时)。如果用SS减去SR时间戳,就能得到服务器端处理请求所需的时间。
CR(Client Received客户端接收)
客户端发起一个请求,该annotation描述了span的结束。客户端成功接收到服务器端的响应。如果CR减去CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间。
docker 安装 zipkin
docker run -d -p 9411:9411 openzipkin/zipkin
引入依赖
<!--zipkin 依赖也同时包含了 sleuth,可以省略 sleuth 的引用-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
配置
application.yml
spring:
zipkin:
base-url: http://192.168.19.128:9411/ # zipkin 服务器的地址
discovery-client-enabled: false # 关闭服务发现,否则 Spring Cloud 会把 zipkin 的 url 当做服务名称
sender:
type: web # 设置使用 http 的方式传输数据
sleuth:
sampler:
probability: 1 # 设置抽样采集率为 100% ,默认为 0.1 ,即 10%
测试
启动项目,测试功能。然后访问Zipkin服务地址默认端口9411。访问结果页