简介
Spring Cloud Sleuth实现了一种分布式的服务链路跟踪解决方案,通过使用Sleuth可以让我们快速定位某个服务的问题。
概念
- Span
Span是基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
最开始的初始Span称为根span,此span中span id和 trace id值相同。
- Trance
包含一系列的span,它们组成了一个树型结构
- Annotation
用于及时记录存在的事件。常用的Annotation如下
cs - Client Sent:客户端发送一个请求,表示span的开始
sr - Server Received:服务端接收请求并开始处理它。(sr-cs)等于网络的延迟
ss - Server Sent:服务端处理请求完成,开始返回结束给服务端。(ss-sr)表示服务端处理请求的时间
cr - Client Received:客户端完成接受返回结果,此时span结束。(cr-sr)表示客户端接收服务端数据的时间
使用
zipkin环境
zipkin jar包下载地址
https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/
运行
java -jar zipkin-server-2.12.9-exec.jar
访问http://localhost:9411/zipkin/出现如下界面说明zipkin环境构建成功。
项目配置
依赖-所有链路上的服务都需要添加
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
application.yml-所有链路上的服务都需要添加如下的配置
spring:
application:
name: consumer_80
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
#采样率值介于 0 到 1 之间,1 则表示全部采集
probability: 1
测试
访问消费者接口后可以看到链路跟踪成功。
整合RabbitMq
spring:
rabbitmq:
host: ${RABBIT_MQ_HOST:192.168.182.20}
port: ${RABBIT_MQ_PORT:5672}
username: ${RABBIT_MQ_USERNAME:guest}
password: ${RABBIT_MQ_PASSWORD:guest}
zipkin:
enabled: true
sender:
type: rabbit
sleuth:
enabled: true
http:
legacy:
enabled: true
正常启动rabbitmq即可,启动zikpin时需要额外参数
java -DRABBIT_ADDRESSES=192.168.182.20:5672 -DRABBIT_USER=guest -DRABBIT_PASSWORD=guest -jar zipkin-server-2.12.9-exec.jar
或
RABBIT_ADDRESSES=localhost java -jar zipkin.jar