在分布式系统中,跟踪请求的流转路径是非常重要的,有助于调试、监控和优化系统性能。
Spring Cloud Sleuth
是常见的解决方案,用于实现分布式追踪。
Spring官方文档已经说明,Springboot 3.x
不再支持sleuth
的使用,已经转移至Micrometer Tracing
项目
Micrometer
Spring Cloud Sleuth 在最近的更新中已经进行了重大调整。在 Spring Cloud 2022.0.0 及以后版本中,Spring Cloud Sleuth 的功能已经整合进了 Spring Boot 和 Spring Cloud 体系中,并且开始推荐使用 Micrometer 来代替部分 Sleuth 的功能。
1. 引入依赖
新版本推荐使用 Micrometer Tracing 和 Spring Boot Actuator 提供的追踪功能。确保配置了相关依赖:
Maven:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
- 对于自动化配置,Spring Boot Actuator 提供了开箱即用的集成。只需要引入 Actuator 相关依赖:
*** Maven: ***
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
2. 配置 Micrometer Tracing
Micrometer Tracing 会自动将 traceId 和 spanId 注入到日志的 MDC(Mapped Diagnostic Context)上下文中。确保在 Spring Boot 应用中激活必要的配置。
在配置文件application.properties
或application.yml
中添加必要的配置。例如:
management.endpoints.web.exposure.include=*
management.metrics.export.influx.enabled=true
management.metrics.export.influx.uri=http://localhost:8086
management.metrics.export.influx.org=my-org
management.metrics.export.influx.bucket=my-bucket
management.metrics.export.influx.token=my-token
management.tracing.enabled=true
这样设置将会启用 Micrometer 的追踪功能。
3. 添加自定义的 Span
除了自动生成的 Span,还可以在代码中手动创建 Span 来追踪特定的业务逻辑。简单示例:
import io.micrometer.tracing.Tracer;
import io.micrometer.tracing.Span;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TraceController {
@Autowired
private Tracer tracer;
@GetMapping("/trace")
public String trace() {
Span newSpan = tracer.nextSpan().name("custom-span").start();
try (Tracer.SpanInScope ws = tracer.withSpan(newSpan)) {
// 业务逻辑
return "Tracing example";
} finally {
newSpan.end();
}
}
}
4. 配置 Logback
在src/main/resources
目录下创建或编辑logback-spring.xml
文件,配置 Span 信息输出。以下示例展示了如何将 Span ID 和 Trace ID 输出到日志中:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!-- 定义日志格式 -->
<property name="LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg %n%X{traceId:-} %X{spanId:-}"/>
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${LOG_PATTERN}</pattern>
</encoder>
</appender>
<root level="info">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
此配置将 traceId 和 spanId 添加到每条日志消息的后面。
5. 查看链路追踪数据
导出追踪数据到合适的监控系统,如 Zipkin 或 Jaeger:
management.zipkin.enabled=true
management.zipkin.base-url=http://localhost:9411/
配置以上属性将会将追踪数据发送到本地运行的 Zipkin 实例。
6. 官方支持文档截图
Micrometer Tracing
名词解释
官方推荐报告工具
- Zipkin