
[英]Spring Cloud Sleuth and Spring Cloud Stream Kinesis - How to propagate trace IDs?
[英]Propagating trace IDs across HTTP REST and Kinesis messaging service boundaries after migrating to Spring Boot 3.0.1/Spring Cloud 2022.0.0
我正在将代码从 Spring Boot 2.7.7/Spring Cloud 2021.0.5 迁移到 Spring Boot 3.0.1/Spring Cloud 2022.0.0。 作为此迁移的一部分,我现在使用io.micrometer:micrometer-tracing-bridge-otel
。 虽然我的代码可以正常工作,但我注意到traceId
不再传播到 HTTP REST 或 Kinesis 消息传递服务边界(即,我的 HTTP REST 客户端/服务器和 Kinesis 消息传递生产者/消费者微服务记录单独的traceId
s)。 是否需要向我的项目添加额外的依赖项或依赖项以确保traceId
跨服务边界传播?
仅供参考,使用 Spring Boot 2.7.7/Spring Cloud 2021.0.5,我能够使用以下配置在 Kinesis 生产者和消费者之间传播traceId
(不需要单独的配置来跨 HTTP REST 边界传播traceId
)——添加b3
header 是让traceId
传播工作的关键:
spring:
cloud:
stream:
bindings:
myEvent-out-0:
content-type: application/*+avro
destination: my-event
kinesis:
binder:
auto-create-stream: true
headers:
- b3
kpl-kcl-enabled: true
我在这里注意到它指出“默认情况下我们不支持连接跨度(这意味着当你有一个 HTTP 跨度时,你将不再在客户端和发件人端看到相同的跨度,你会看到两个单独的跨度现在跨越)。 那么,当它声明默认情况下不支持它时,这是否意味着这是一个可选配置? 这句话让我感到困惑,我想知道为什么决定不加入 span 作为默认自动配置,而这显然是跨分布式架构的日志关联所需要的。
因此,总而言之,我正在寻求有关如何配置 Micrometer Tracing 的指导,以便traceId
始终跨服务边界传播,无论它们是 HTTP REST 还是消息边界。 让这个工作所需的最低配置是什么?
不确定这是否对您有帮助,但我了解到 Spring Boot 3 默认使用 W3C 传播: https://github.com/micrometer-metrics/tracing/wiki/Spring-Cloud-Sleuth-3.1-Migration-指南。
因此,您需要嵌入到 Kinesis Producer 记录中的 header 正是baggage
。
在 Spring 引导文档中查看更多信息: https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.micrometer-tracing
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.