Spring中用Micrometer接收traceparent头:spanId为何重新生成?
问题原因分析:traceId正确传递但spanId重新生成
默认链路追踪行为
Micrometer Tracing与Spring Boot整合时,默认逻辑是保留上游请求traceparent中的traceId,同时生成新的spanId作为当前服务的本地span标识。每个服务的请求处理环节都需要独立的span来记录自身的处理轨迹,前端的spanId属于上游请求的span,后端作为下游服务,会将上游spanId设为当前span的parentId,而非直接复用它作为自己的spanId。日志未展示parentId
你当前的日志格式[KYC-BE,4bf92f3577b34da6a3ce929d0e0e4736,3cc2a015c655ce84]只包含了服务名、traceId和当前spanId,没有输出parentId字段。实际上后端已经正确识别了前端的spanId作为当前span的parentId,只是日志没体现出来。验证方法
- 借助Zipkin、Jaeger等追踪平台查看完整链路,能清晰看到当前后端span的parentId就是前端的
00f067aa0ba902b7。 - 修改日志配置,加入parentId输出。比如调整
application.properties中的日志格式:
重启服务后,日志会显示parentId,就能确认它和前端的spanId一致。logging.pattern.level=%5p [%X{spring.application.name},%X{traceId},%X{spanId},%X{parentId}]
- 借助Zipkin、Jaeger等追踪平台查看完整链路,能清晰看到当前后端span的parentId就是前端的
内容的提问来源于stack exchange,提问作者Michele
相关产品推荐
相关产品推荐

