链路追踪失效怎么办?sleuth版本升级后X-B3-TraceId:打印不出来了?
2023-12-11 16:42:06
Sleuth 3.1.3 版本当中 X-B3-TraceId 消失之谜
链路追踪是分布式系统中的重要组成部分,它能够帮助我们追踪服务之间的调用关系,从而快速定位问题,提高系统稳定性。Sleuth 是 Spring Cloud 生态系统中常用的链路追踪工具,它提供了简单易用的链路追踪解决方案。
然而,随着 Sleuth 版本的更新,一些用户遇到了新的问题:Sleuth 版本升级为 3.1.3 后,链路追踪 X-B3-TraceId 不再打印,导致链路追踪功能失效,给开发者的调试工作带来不便。
问题分析
X-B3-TraceId 是 Sleuth 用来标识请求的唯一 ID,它的作用类似于 HTTP 协议中的 requestId。当请求在分布式系统中流转时,X-B3-TraceId 会随请求一起传递,从而将不同服务之间的调用关系串联起来,形成完整的链路追踪数据。
在 Sleuth 3.1.3 版本中,X-B3-TraceId 的打印逻辑发生了变化,导致了某些情况下 X-B3-TraceId 不再被打印出来,这直接影响了链路追踪功能的正常使用。
解决方案
要解决这个问题,我们需要对 Sleuth 的配置进行调整。具体来说,我们需要在 application.yml
配置文件中添加如下配置:
spring:
sleuth:
sampler:
probability: 1.0
propagation:
traceContext: b3
sampler.probability
: 该配置项用于设置采样率,值范围为 0.0-1.0。采样率越高,被追踪的请求越多。为了确保所有的请求都被追踪,我们可以将该值设置为 1.0。propagation.traceContext
: 该配置项用于设置传播的上下文信息,可选值有 "b3" 和 "w3c"。对于 Sleuth 来说,默认值是 "b3",因此我们需要将其显式地设置为 "b3"。
验证结果
配置完成后,重新启动应用程序,并再次访问系统。此时,您应该可以看到 X-B3-TraceId 再次出现在日志中,并且链路追踪功能也恢复了正常使用。
总结
Sleuth 版本升级后 X-B3-TraceId 打印不出来的原因是 Sleuth 3.1.3 版本中 X-B3-TraceId 的打印逻辑发生了变化。要解决这个问题,我们需要在 application.yml
配置文件中添加配置项 spring.sleuth.sampler.probability
和 spring.sleuth.propagation.traceContext
,并将它们的取值分别设置为 1.0 和 "b3"。
常见问题解答
-
为什么 X-B3-TraceId 在 Sleuth 3.1.3 版本中不再打印?
答:这是因为 Sleuth 3.1.3 版本中 X-B3-TraceId 的打印逻辑发生了变化。 -
如何解决 X-B3-TraceId 不打印的问题?
答:在application.yml
配置文件中添加如下配置:spring: sleuth: sampler: probability: 1.0 propagation: traceContext: b3
-
配置项
sampler.probability
和propagation.traceContext
的作用是什么?
答:sampler.probability
用于设置采样率,确保所有的请求都被追踪。propagation.traceContext
用于设置传播的上下文信息,对于 Sleuth 来说,默认值是 "b3"。 -
如何验证解决方案是否有效?
答:重新启动应用程序,并再次访问系统。此时,您应该可以看到 X-B3-TraceId 再次出现在日志中,并且链路追踪功能也恢复了正常使用。 -
Sleuth 的哪些版本受此问题影响?
答:仅 Sleuth 3.1.3 版本受此问题影响。