SpringCloud之Sleuth&Zipkin(分布式服务跟踪)
一.Sleuth&Zipkin是什么?
sleuth :链路追踪器
zipkin:链路分析器,可以理解为可视化界面,配合Sleuth可以清晰定位请求流程
二.为什么需要链路追踪?
在微服务框架中,一个由客户端发起的请求在后端系统中经过多个不同的服务节点调用来协同生产最后的请求结果,
每一个前段请求会形成一条复杂的分布式服务调用链路链路中的任何一环出现高延时或错误都会引起这个请求最后的失败,
所以我们需要一个专门用于记录链路数据,可以迅速定位故障
三.Sleuth工作流程
1.sleuth 记录的是一次请求链路(请求经过哪些服务,哪些类)
2.一条链路有个唯一标识(Trace ID), 每个经过一个链路(服务)使用Span来标识(记录请求相关信息),
各个span间使用parent ID 关联
四.Zipkin+Sleuth整合
1.在cloud-provide-product8080和cloud-consumer-order8090中添加sleuth依赖
springcloud 默认集成了 sleuth + zipkin, 导一个依赖即可
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
2.在需要写日志的类上贴@Slf4j,然后再cloud-consumer-order8090,cloud-provide-product8080中打印日志。
3.需要在product-server和order-server中的yml配置文件中添加zipkin地址.
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
#采用率,介于0到1之间, 1表示全部收集
probability: 1
4.启动zipkin服务,我们直接使用的是jar的方式.
5.测试:访问 http://localhost:9411
五.日志参数讲解
日志格式:
[order-server,c323c72e7009c077,fba72d9c65745e60,false]
1、第一个值,spring.application.name的值,服务名
2、第二个值,c323c72e7009c077,sleuth生成的Trace ID,用来标识请求链路,一条请求链路中包含一个Trace ID,多个Span ID
3、第三个值,fba72d9c65745e60、spanID 基本的工作单元,获取元数据,如发送一个http
4、第四个值:false,是否要将该信息输出到zipkin服务中来收集和展示。
六.小结
1.Sleuth是链路追踪器,一条链路上有一个唯一的Trace Id 和多个Span ID,通过id追踪一个请求的整个链路情况
2.zipkin是链路分析器,可以理解为可视化界面,配合Sleuth可以清晰定位请求流程
3.使用Sleuth与zipkin,需要启动类和启动zipkin服务,Sleuth定位追踪,zipkin主要用于显示界面
4.需要在yml中配置采用率以及导入依赖(导入其中一个即可)
5.日志上面也会显示追踪的信息