Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成

Spring Cloud Sleuth different trace-ID integrate with Kafka

我使用 Kafka 进行微服务之间的 Asyng 调用,我使用 Spring Sleuth 进行日志记录。 logging 没问题,但是当有消息从 Microservice1 到 Microservice2 时,logging 的消息有不同的 Trace-ID。他们不必具有相同的 trace-Id 但具有不同的 SpanId 吗?有什么特殊配置吗?

消息 headers 默认情况下不会由 Spring Cloud Kafka binder 传输,您必须按照 Spring Cloud Stream Reference Guide 中的描述通过 spring.cloud.stream.kafka.binder.headers 手动设置它。然后检查那些跟踪相关的 headers 是否被正确发送。

您可以在 application.yml 中如下设置 Zipkin headers:

spring:
  cloud:
    stream:
      kafka:
        binder:
          headers:
            - X-B3-TraceId
            - X-B3-SpanId
            - X-B3-Sampled
            - X-B3-ParentSpanId
            - X-Span-Name
            - X-Span-Export

或者在你的 application.properties:

spring.cloud.stream.kafka.binder.headers[0]=X-B3-TraceId
spring.cloud.stream.kafka.binder.headers[1]=X-B3-SpanId
spring.cloud.stream.kafka.binder.headers[2]=B3-Sampled
spring.cloud.stream.kafka.binder.headers[3]=X-B3-ParentSpanId
spring.cloud.stream.kafka.binder.headers[4]=X-Span-Name
spring.cloud.stream.kafka.binder.headers[5]=X-Span-Export

或在 comma-separated 列表中:

spring.cloud.stream.kafka.binder.headers=X-B3-TraceId,X-B3-SpanId,B3-Sampled,\
    X-B3-ParentSpanId,X-Span-Name,X-Span-Export