You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot追踪中的Baggage是什么?请解析其与链路追踪的关系

什么是链路追踪中的Baggage?它和链路追踪的关系是什么?

一、Baggage的核心定义

Baggage是分布式链路追踪体系里的自定义上下文数据载体,简单说就是你可以把需要在整个调用链中传递的自定义信息(比如用户ID、请求唯一标识、业务标签等)放到里面,它会跟着链路的Trace/Span上下文,在分布式系统的各个服务节点之间流转。

它和链路追踪自带的traceId/spanId不同:后者是链路追踪框架自动生成的、用来标记调用链路的核心标识;而Baggage是完全由开发者自定义的附加数据,用来补充链路追踪的业务维度信息。

二、Baggage和链路追踪的关系

  1. 依附于链路上下文存在
    Baggage绑定在当前Trace/Span的上下文里,只有在链路追踪的上下文生效范围内,Baggage才能被读取和传递。比如你提供的代码里,BaggageInScope用try-with-resources声明,在try块的业务逻辑执行期间,这个Baggage会和当前Span绑定,出了这个作用域就失效。

  2. 补充链路追踪的业务元数据
    链路追踪本身主要记录调用路径、节点耗时、调用状态等技术层面的追踪数据,而Baggage可以携带业务相关的自定义数据,让你在查看链路日志或追踪数据时,能直接关联到业务信息(比如某条链路对应的用户是谁、属于哪个业务模块)。

  3. 受链路传播协议控制
    不同的链路传播协议对Baggage的默认支持不同:

  • 用W3C协议时,Baggage会自动跟着跨服务请求传播;
  • 用B3协议时,默认不会自动传播,需要通过management.tracing.baggage.remote-fields配置指定哪些Baggage字段要跨服务传递。

另外,通过management.tracing.baggage.correlation.fields配置,可以把指定的Baggage字段同步到日志的MDC(Mapped Diagnostic Context)里,这样日志中就能直接打印出这些自定义数据,方便日志和链路追踪的关联分析。

三、结合示例代码理解

你提供的Spring Boot代码示例,就是通过Tracer API创建了一个名为baggage1、值为value1的Baggage:

@Component
class CreatingBaggage {

  private final Tracer tracer;

  CreatingBaggage(Tracer tracer) {
      this.tracer = tracer;
  }

  void doSomething() {
      try (BaggageInScope scope = this.tracer.createBaggageInScope("baggage1", "value1")) {
          // Business logic
      }
  }

}

在try块的业务逻辑执行期间,这个Baggage会被绑定到当前的Span上下文:如果当前服务调用了其他服务,且配置了对应的传播规则,baggage1=value1就会被传递到下游服务;如果配置了MDC关联,日志里也能直接拿到这个值。

内容的提问来源于stack exchange,提问作者gstackoverflow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 05:03:22