如何在 Spring boot 3 中定义 Baggage 添加使用 OpenTelemetry 将其附加到 MDC

问题描述 投票:0回答:1

我想定义一个自定义行李,该行李将在 Spring boot 3 应用程序中使用 OpenTelemetry 附加到 MDC 日志记录中。之前我使用 Brave 作为跟踪器,这是我的配置

构建.gradle:

...
    implementation 'io.micrometer:context-propagation:1.0.5'
    implementation 'io.micrometer:micrometer-tracing'
    implementation 'io.micrometer:micrometer-tracing-bridge-brave'
...

application.yml:

management:
  endpoints:
    web:
      exposure:
        include: "health,info"
  tracing:
    sampling:
      probability: 1.0
    baggage:
      correlation:
        fields:
          - myBaggage
      remote-fields:
        - myBaggage

这是定义Bean并将字段添加到MDC的配置:


@Configuration
public class LoggingContextConfig {

  @Bean
  BaggageField myBaggage() {
    return BaggageField.create("myBaggage");
  }

  @Bean
  ScopeDecorator mdcScopeDecorator() {
    return MDCScopeDecorator.newBuilder().clear()
        .add(SingleCorrelationField.newBuilder(myBaggage()).flushOnUpdate().build()).build();
  }
}

现在切换到 'io.micrometer:micrometer-tracing-bridge-brave' 我注意到此实现存在一些差异,我需要帮助来实现类似的行为。

spring-boot open-telemetry otel
1个回答
0
投票

io.micrometer:micrometer-tracing-bridge-otel:1.0.5
及更高版本中(也在 1.2.0 和 1.3.2 上进行了测试),无需注册其他 Bean(例如
MDCScopeDecorator
),因为
Slf4JBaggageEventListener
将自动处理 MDC 中的相关字段。

我会检查自动配置(使用

--debug
参数和调试器):

  • Slf4JBaggageEventListener
    bean 是否已注册?
  • 相关字段实际上是在标头中传递的还是手动打开的行李?

总的来说,otel 比 Brave 更严格:一些 Micrometer API 滥用在使用 Brave 作为底层库时没问题,但在使用 Otel 时可能是一个严重的错误。如果您有自定义可观察性逻辑,请考虑调试您自己的代码。

© www.soinside.com 2019 - 2024. All rights reserved.