Spring Boot 4 分布式链路追踪官方适配方案与配置细节咨询
你碰到的这个问题我之前帮好几个迁移到Spring Boot 4的开发者捋过,确实Sleuth被彻底移除后,官方文档的过渡指引有点零散,我给你梳理下最清晰的官方推荐方案和落地细节,完全匹配Spring Boot 4的环境:
一、官方核心替代:Micrometer Tracing
首先明确:Spring Boot 4官方已经把Micrometer Tracing作为分布式追踪的标准抽象层,替代了之前的Spring Cloud Sleuth。它本身只是一个API规范,必须搭配两个核心组件才能工作:
- 一个「桥接实现库」:二选一,Brave 或 OpenTelemetry
- 一个「追踪数据导出器」:对应桥接库选,比如Zipkin(适配Brave)、OTLP(适配OpenTelemetry),也可以跨搭配(比如OpenTelemetry也能直接导出到Zipkin)
下面给你两种最常用的生产级配置方案,分别对应不同的场景:
二、方案1:Brave + Zipkin(过渡成本最低,适合原Sleuth+Zipkin用户)
如果你之前用的是Sleuth+Zipkin,这个方案几乎是无缝过渡,配置习惯和之前高度一致:
1. Maven依赖配置
直接在pom.xml中加入以下依赖(Spring Boot 4的依赖管理会自动匹配兼容版本,不用手动写版本号):
<!-- Micrometer Tracing 桥接 Brave --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <!-- Zipkin 数据导出器 --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-reporter-zipkin</artifactId> </dependency> <!-- 可选但强烈推荐:Actuator 监控端点,方便排查追踪问题 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2. 核心配置(application.yml/application.properties)
# Zipkin 服务地址 spring: zipkin: base-url: http://localhost:9411 # 追踪采样率:测试环境设为1.0(全采样),生产可根据流量调0.1-0.5 micrometer: tracing: sampling: probability: 1.0 # 可选:开启Actuator的追踪端点(如果加了actuator依赖) management: endpoints: web: exposure: include: traces
三、方案2:OpenTelemetry + OTLP(云原生推荐,符合行业标准)
如果是新项目或者面向云原生环境,优先选这个方案——OpenTelemetry是CNCF的官方标准,支持导出到几乎所有主流追踪后端(Jaeger、Grafana Tempo、Zipkin等),OTLP是标准的追踪数据协议:
1. Maven依赖配置
<!-- Micrometer Tracing 桥接 OpenTelemetry --> <dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-otel</artifactId> </dependency> <!-- OpenTelemetry OTLP 导出器 --> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-otlp-trace</artifactId> <scope>runtime</scope> </dependency> <!-- 可选:如果要直接导出到Zipkin,替换上面的OTLP导出器为这个 --> <!-- <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-zipkin</artifactId> <scope>runtime</scope> </dependency> --> <!-- 可选但推荐:Actuator 监控 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2. 核心配置(application.yml)
micrometer: tracing: sampling: probability: 1.0 # 采样率配置和之前一致 # OTLP 后端地址(比如Jaeger Collector、Tempo、OpenTelemetry Collector) spring: opentelemetry: trace: exporter: otlp: endpoint: http://localhost:4318/v1/traces compression: gzip # 可选:开启Actuator的OpenTelemetry追踪端点 management: endpoints: web: exposure: include: otel-traces
四、关键:日志中输出traceId/spanId
不管用哪种方案,要在日志中打印traceId和spanId,只需要修改你的日志框架配置:
1. Logback 配置(logback-spring.xml)
在日志格式的Pattern中加入 [%X{traceId:-},%X{spanId:-}],比如:
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level [%X{traceId:-},%X{spanId:-}] %logger{36} - %msg%n</pattern> </encoder> </appender>
:- 是为了在没有追踪上下文时显示空值,避免日志格式混乱。
2. Log4j2 配置(log4j2.xml)
类似地,在Pattern中加入 %X{traceId:-} %X{spanId:-}:
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %X{traceId:-} %X{spanId:-} %c{1.} - %msg%n"/>
五、方案选择建议
- 如果你是从Sleuth+Zipkin迁移过来:优先选Brave + Zipkin,配置习惯和之前几乎一致,学习成本极低,完全兼容现有Zipkin部署。
- 如果你是新项目/云原生环境:优先选OpenTelemetry + OTLP,符合行业标准,扩展性更强,支持更多云原生追踪后端,未来迁移成本更低。
六、常见坑点提醒
- 不要同时引入Brave和OpenTelemetry的桥接库,二选一即可,否则会出现上下文冲突。
- 确保所有依赖都通过Spring Boot的依赖管理引入,不要手动指定版本,避免版本不兼容(Spring Boot 4对Micrometer Tracing和桥接库的版本有严格要求)。
- 生产环境不要把采样率设为1.0,会产生大量追踪数据,建议根据流量调整到0.1-0.5之间,或者用基于速率的采样。
如果你在配置过程中碰到具体问题,比如追踪数据不导出、日志不显示traceId,可以把具体的配置片段和日志信息贴出来,我再帮你排查~




