配置Zipkin与Micrometer后无法获取Span ID和Trace ID问题咨询
解决Micrometer + Zipkin无法获取Span ID/Trace ID的问题
以下是几个关键步骤来排查和解决这个问题:
1. 配置日志输出模板,自动携带Trace/Span ID
Micrometer Tracing会自动将traceId和spanId放入MDC(Mapped Diagnostic Context),你需要修改日志配置让这些ID显示在日志中:
- 如果使用Logback,修改
logback-spring.xml的日志pattern:
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %X{traceId:-} %X{spanId:-}%n</pattern>
- 如果用application.properties配置日志:
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %X{traceId:-} %X{spanId:-}%n
2. 手动在代码中获取Trace/Span ID
如果需要在业务代码中直接使用这些ID,可以通过注入Tracer对象来获取:
import io.micrometer.tracing.Tracer; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class TraceController { private final Tracer tracer; public TraceController(Tracer tracer) { this.tracer = tracer; } @GetMapping("/test") public String testTrace() { String traceId = tracer.currentSpan().context().traceId(); String spanId = tracer.currentSpan().context().spanId(); return String.format("Trace ID: %s, Span ID: %s", traceId, spanId); } }
3. 确认Web请求追踪的自动配置生效
Spring Boot会自动配置TraceWebFilter来处理Web请求的追踪,但如果存在自定义的Web过滤器或WebMvc配置,可能会影响自动配置的生效:
- 检查启动日志,确认
TraceWebFilter相关Bean已初始化 - 避免在自定义过滤器中覆盖或屏蔽掉追踪过滤器的执行顺序
4. 依赖适配检查(针对Spring Boot版本)
如果使用Spring Boot 3.x,确保你的依赖版本与Spring Boot的版本适配,micrometer-tracing-bridge-brave的版本无需手动指定,直接使用Spring Boot依赖管理中的版本即可。
内容的提问来源于stack exchange,提问作者Riya Dhanwani
相关产品推荐
相关产品推荐

