前言
参考资料:
《Spring Microservices in Action》
《Spring Cloud Alibaba 微服务原理与实战》
《B站 尚硅谷 SpringCloud 框架开发教程 周阳》
Spring Cloud Sleuth 是一个 Spring Cloud 项目,它将关联 ID 装备到 HTTP 调用上,并将生成的跟踪数据提供给 OpenZipkin 的钩子。Spring Cloud Sleuth 通过添加过滤器并与其他 Spring 组件进行交互,将生成的关联 ID 传递到所有系统调用;
1. Sleuth 基础知识
1.1 Sleuth 原理
- 使用 Sleuth 来追踪服务调用链很简单,只需要添加一个 pom.xml 依赖即可;
- 添加依赖后会对输出日志追加一条信息;
- 利用信息里的追踪 ID即可获知本次调用使用到了哪些服务;
2. 在服务中使用 Sleuth 追踪
2.1 引入 pom.xml 依赖文件
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
只需要引入该依赖文件即可完成以下工作:
- 检查每次调用是否存在 Spring Cloud Sleuth 跟踪信息,存在则进行日志记录和处理;
- 将 Spring Cloud Sleuth 跟踪信息添加到 Spring MDC(Spring Mapped Diagnostic Context,Spring 的映射诊断上下文);
- 将 Spring Cloud跟踪信息注入服务发出的每个出站 HTTP 调用以及 Spring 消息传递通道的消息中;
2.2 查看日志信息
- 启动服务,调用接口,则会在控制台里看到类似如下信息:
Sleuth 会在每个日志条目追加以下信息:
- 服务的应用程序名称:默认为
spring.application.name
定义的名称; - 跟踪 ID(trace ID):跟踪 ID是关联 ID 的等价术语,表示整个事务的唯一编号;
- 跨度 ID(span ID):表示整个事务中某一部分的唯一 ID(当与 Zipkin 集成来可视化事务时,跨度 ID 尤为重要 );
- 是否将跟踪数据发送到 Zipkin:对大量的日志数据起过滤筛选作用;
- 服务的应用程序名称:默认为
- 举个例子:客户端请求上游服务,而上游服务需要请求下游服务时,这两个服务有相同的跟踪 ID,不同的跨度 ID;