Spring Boot 3中如何配置Zipkin baseUrl对接Jaeger Collector
我们已部署Jaeger用于Istio代理间调用追踪,Spring Boot 2环境下通过Spring Cloud Sleuth配置成功实现应用内Span上报与日志traceId输出,但升级到Spring Boot 3后,应用日志能正常输出traceId,却无法将Span上报至指定Jaeger Collector,报错显示仍默认连接localhost:9411:
2023-03-16T15:36:15.037Z WARN [our-service,,] 1 --- [ender@207ff82c}] z.r.AsyncReporter$BoundedAsyncReporter : Dropped 1 spans due to ResourceAccessException(I/O error on POST request for "http://localhost:9411/api/v2/spans": Connection refused
问题原因
Spring Boot 3引入Micrometer Tracing替代了原Spring Cloud Sleuth的核心追踪实现,原spring.zipkin.base-url等配置属性已废弃,不再生效,需使用Micrometer对应的新配置项。
正确配置方式
1. 确认依赖(已正确引入的可忽略)
Spring Boot 3环境下需使用以下依赖:
<dependency> <groupId>io.micrometer</groupId> <artifactId>micrometer-tracing-bridge-brave</artifactId> </dependency> <dependency> <groupId>io.zipkin.reporter2</groupId> <artifactId>zipkin-reporter-brave</artifactId> </dependency>
2. 修改application.yaml配置
替换原spring.zipkin相关配置,改用Micrometer的配置前缀:
spring: application: name: our-service management: tracing: sampling: probability: 1.0 # 按需调整采样率,1.0表示全采样 propagation: type: B3,W3C # 保持与Istio兼容的传播类型 zipkin: tracing: endpoint: <url to our jaeger collector>:9411/api/v2/spans # 完整的Jaeger Zipkin兼容端点 logging: pattern: level: "%5p [${spring.application.name},%X{traceId:-},%X{spanId:-}]" # 保持日志traceId/spanId输出格式
3. 验证
重启Spring Boot 3应用后,检查日志是否再出现localhost连接错误,同时登录Jaeger UI查看是否能接收到该应用上报的Span。
关键说明
- Jaeger的Zipkin兼容端点默认是
/api/v2/spans,配置时需指定完整路径,而非仅base地址 management.tracing.propagation.type保持B3,W3C可确保与Istio代理的追踪上下文兼容
内容的提问来源于stack exchange,提问作者I.Brok

