Sleuth
Spring Cloud Sleuth 为 Spring Cloud 应用提供分布式链路追踪能力,通过在请求中注入 Trace ID 和 Span ID,实现跨服务的请求链路追踪。
适用场景:微服务架构的请求链路追踪、排查跨服务调用延迟问题、生产环境的分布式排障。
提示
Spring Cloud Sleuth分布式链路追踪,集成Zipkin实现请求链路可视化
核心概念
| 概念 | 说明 |
|---|---|
| Trace | 一次完整的请求链路,全局唯一 |
| Span | 请求链路中的一个工作单元 |
| Trace ID | 整个链路的唯一标识 |
| Span ID | 单个工作单元的标识 |
| MDC | 映射诊断上下文,用于日志输出 |
快速开始
引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>Sleuth 自动为日志添加 Trace ID 和 Span ID:
2024-01-01 12:00:00.000 INFO [service-a,abc123,def456] --- [main] ...格式:[appName, traceId, spanId]
Zipkin 集成
引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>配置:
spring:
zipkin:
base-url: http://localhost:9411
sleuth:
sampler:
probability: 1.0 # 采样率,1.0 表示 100%启动 Zipkin:java -jar zipkin-server.jar,访问 http://localhost:9411 查看链路追踪信息。
采样率
| 值 | 说明 |
|---|---|
| 0.0 | 不采样 |
| 0.5 | 50% 采样 |
| 1.0 | 100% 采样 |
生产环境建议设置较低采样率,避免影响性能。
常见问题处理
TraceId 不在日志中
- 确认
spring-cloud-starter-sleuth依赖已引入 - 检查日志格式是否包含
%X{traceId}和%X{spanId} - 如果使用 Logback,确认 logback 配置中未覆盖默认 MDC 输出
Zipkin 链路不完整
- 检查采样率配置:
spring.sleuth.sampler.probability - 确认 Zipkin Server 是否正常运行:访问
http://localhost:9411 - 检查网络连通性和防火墙设置