我想定义一个自定义行李,该行李将在 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' 我注意到此实现存在一些差异,我需要帮助来实现类似的行为。
在
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 时可能是一个严重的错误。如果您有自定义可观察性逻辑,请考虑调试您自己的代码。