Spring 云流消息的侦探检测在使用 zipkin + kafka 时丢失
Sleuth instrumentation of Spring cloud stream messages is lost when using zipkin + kafka
我有以下设置:
- 几个 Spring Cloud Edgware 服务,最显着的是
spring-cloud-starter-zipkin
和 spring-cloud-stream-binder-kafka
依赖项。
- 一个 Zipkin 服务器 运行
openzipkin/zipkin:2.8
docker 图片
- 我看到来自服务的痕迹进入 "zipkin" 主题,zipkin 挑选了这些痕迹,我可以在 zipkin ui 中查看它们。
- 乍一看似乎一切正常,特别是对于我的服务之间的休息调用,但我只是看到它不适用于我自己的消息,我用于我的服务之间的异步通信(我使用 spring 云流为此)。
- 我可以看到来自
TraceChannelInterceptor
的日志消息表明正在进行检测
- 但是当我检查 kafka 中的数据时,跟踪消息 headers 没有出现在消息中。
曾经有一个 StreamEnvironmentPostProcessor
that did the job of adding the trace headers to the kafka bindings when I included the spring-cloud-sleuth-stream
dependendy in the past. But the doc clearly states now :
Note: spring-cloud-sleuth-stream is deprecated and incompatible with these destinations
现在我应该怎么做才能使它正常工作?自己将 headers 添加到绑定配置中?还是我遗漏了什么?
这是 Spring Cloud Sleuth in Edgware 中的错误。 Edgware 中的 Stream Kafka Binder 需要显式传递应该传播的 headers。在类路径上添加 sleuth-stream
的副作用正是这个特性。通过修复 https://github.com/spring-cloud/spring-cloud-sleuth/issues/1005 问题,我们将缺少的功能添加回核心。这没有移植到 Finchley,因为 Finchley 中的 Stream Kafka Binder 默认通过所有 headers。
Edgware 的解决方法是按以下方式传递 headers 的列表:
spring:
cloud:
stream:
kafka:
binder:
headers:
- spanId
- spanSampled
- spanProcessId
- spanParentSpanId
- spanTraceId
- spanName
- messageSent
我有以下设置:
- 几个 Spring Cloud Edgware 服务,最显着的是
spring-cloud-starter-zipkin
和spring-cloud-stream-binder-kafka
依赖项。 - 一个 Zipkin 服务器 运行
openzipkin/zipkin:2.8
docker 图片 - 我看到来自服务的痕迹进入 "zipkin" 主题,zipkin 挑选了这些痕迹,我可以在 zipkin ui 中查看它们。
- 乍一看似乎一切正常,特别是对于我的服务之间的休息调用,但我只是看到它不适用于我自己的消息,我用于我的服务之间的异步通信(我使用 spring 云流为此)。
- 我可以看到来自
TraceChannelInterceptor
的日志消息表明正在进行检测 - 但是当我检查 kafka 中的数据时,跟踪消息 headers 没有出现在消息中。
曾经有一个 StreamEnvironmentPostProcessor
that did the job of adding the trace headers to the kafka bindings when I included the spring-cloud-sleuth-stream
dependendy in the past. But the doc clearly states now :
Note: spring-cloud-sleuth-stream is deprecated and incompatible with these destinations
现在我应该怎么做才能使它正常工作?自己将 headers 添加到绑定配置中?还是我遗漏了什么?
这是 Spring Cloud Sleuth in Edgware 中的错误。 Edgware 中的 Stream Kafka Binder 需要显式传递应该传播的 headers。在类路径上添加 sleuth-stream
的副作用正是这个特性。通过修复 https://github.com/spring-cloud/spring-cloud-sleuth/issues/1005 问题,我们将缺少的功能添加回核心。这没有移植到 Finchley,因为 Finchley 中的 Stream Kafka Binder 默认通过所有 headers。
Edgware 的解决方法是按以下方式传递 headers 的列表:
spring:
cloud:
stream:
kafka:
binder:
headers:
- spanId
- spanSampled
- spanProcessId
- spanParentSpanId
- spanTraceId
- spanName
- messageSent