分布式追踪(Distributed Tracing)
分布式追踪是一种监控和排错方法,旨在跟踪并可视化分布式系统中的请求如何在若干微服务之间流动。在微服务架构中,一个外部请求可能需要经过多个服务才能完成,如果在请求过程中某个服务出现延迟或故障,就需要一种办法能够快速定位问题发生的位置。
分布式追踪系统通常提供以下功能:
-
追踪标识:为每个请求分配一个唯一标识,随着请求流通过各服务,该标识被传递并记录下来。
-
上下文传播:跟踪信息(如追踪ID和其他元数据)随着调用链的推进传递给每个参与服务。
-
性能数据收集:记录服务在处理请求时的关键时间点(如请求发出时间、收到响应时间等)。
-
日志关联:将日志消息与追踪上下文关联,以提供详细的调用链路信息。
-
可视化:通过追踪集成和分析工具,把所有的追踪数据拼接起来,呈现请求的全局视图,帮助分析延迟、瓶颈或故障所在。
Spring Cloud Sleuth
Spring Cloud Sleuth是Spring Cloud生态系统中的一个项目,它提供了分布式追踪的解决方案。Sleuth可以集成到Spring Boot应用中,为微服务架构下的应用自动进行日志关联和请求追踪。它主要做两件事:
-
添加追踪信息:在日志消息中自动添加追踪ID(Trace ID)和跨度ID(Span ID),以及其他的上下文信息。这有助于将日志消息关联到特定的请求处理流程。Trace ID在整个请求链中是唯一的,而Span ID则表示请求链中的一段。
-
上下文信息传递:在分布式系统的微服务之间通过HTTP头或消息头传递追踪信息。当一个微服务向其他服务发起请求时,Sleuth确保追踪信息被包含在请求中,从而在所有相关的服务日志中都能看到同一Trace ID。
Sleuth可以与Zipkin等追踪系统集成,Zipkin是一个开源的分布式追踪系统。Sleuth通过发送追踪信息到Zipkin Server,可以得到完整的服务调用链路图。
在Spring Boot应用中使用Sleuth的步骤如下:
- 添加依赖:在
pom.xml
中添加Spring Cloud Sleuth的起步依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
-
日志输出:写日志时无需额外修改,Sleuth会自动在日志信息中添加Trace ID和Span ID。
-
配置文件:通常不需要额外配置,Sleuth的默认设置已经足以启动追踪。如果需要自定义设置(如采样率等),可以在
application.yml
进行配置。 -
与Zipkin集成:如果想使用Zipkin进行追踪可视化,可以添加Zipkin的依赖,并配置Zipkin Server的地址。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
在 application.yml
中配置Zipkin Server的URI:
spring:
zipkin:
base-url: http://localhost:9411