随着系统规模越来越大,微服务之间调用关系变得错综复杂,一条调用链路中可能调用多个微服务,任何一个微服务不可用都可能造整个调用过程失败
spring cloud sleuth 可以跟踪调用链路,分析链路中每个节点的执行情况
01.微服务中添加 spring cloud sleuth 依赖
修改以下微服务的 pom.xml,添加 sleuth 依赖
sp02-item-service
sp03-user-service
sp04-order-service
sp11-zuul
编辑起步依赖,分别 sleuth 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
02.在控制台查看链路跟踪日志
通过 zuul 网关,访问 order-service
http://localhost:3001/order-service/112233
四个微服务的控制台日志中,可以看到以下信息:
[服务id,请求id,span id,是否发送到zipkin]
请求id:请求到达第一个微服务时生成一个请求id,该id在调用链路中会一直向后面的微服务传递
span id:链路中每一步微服务调用,都生成一个新的id
[zuul,6c24c0a7a8e7281a,6c24c0a7a8e7281a,false]
[order-service,6c24c0a7a8e7281a,993f53408ab7b6e3,false]
[item-service,6c24c0a7a8e7281a,ce0c820204dbaae1,false]
[user-service,6c24c0a7a8e7281a,fdd1e177f72d667b,false]
03.sleuth + zipkin 链路分析
zipkin 可以收集链路跟踪数据,提供可视化的链路
链路数据抽样比例
默认10%的链路数据会被发送到zipkin服务。可以配置修改抽样比例
spring:
sleuth:
sampler:
probability: 0.1
zipkin 服务
下载 zipkin 服务器,https://github.com/openzipkin/zipkin
启动zipkin时,连接到rabbitmq
java -jar zipkin-server-2.12.9-exec.jar --zipkin.collector.rabbitmq.uri=amqp://admin:admin@192.168.64.140:5672
http://localhost:9411/zipkin
微服务添加 zipkin 起步依赖
修改以下微服务
sp02-item-service
sp03-user-service
sp04-order-service
sp11-zuul
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
如果没有配置过 spring cloud bus,还需要添加 rabbitmq 依赖和连接信息
pom.xml 添加 spring cloud bus 依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-bus</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit-test</artifactId>
<scope>test</scope>
</dependency>
配置文件中添加 rabbitmq 连接信息
在以下配置文件中修改:
config中的4个配置文件
sp12-config项目的application.yml
注意:
连接信息请修改成你的连接信息
config项目需要提交
spring:
……
rabbitmq:
host: 192.168.64.140
port: 5672
username: admin
password: admin
启动并访问服务,访问 zipkin 查看链路分析
http://localhost:3001/order-service/112233
刷新访问多次,链路跟踪数据中,默认只有 10% 会被收集到zipkin
访问 zipkin
http://localhost:9411/zipkin