4

我使用 Kafka 进行微服务之间的 Asyng 调用,并且使用 Spring Sleuth 进行日志记录。日志是可以的,但是当有消息从微服务 1 到微服务 2 时,日志的消息有不同的 Trace-ID。他们不是必须具有相同的 trace-Id 但具有不同的 SpanId 吗?有什么特别的配置吗?

4

1 回答 1

6

默认情况下,Spring Cloud Kafka binder 不会传输消息标头,您必须按照Spring Cloud Stream Reference Guidespring.cloud.stream.kafka.binder.headers中的说明手动设置它。然后检查这些跟踪相关的标头是否已正确发送。

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

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

或者在逗号分隔的列表中:

spring.cloud.stream.kafka.binder.headers=X-B3-TraceId,X-B3-SpanId,B3-Sampled,\
    X-B3-ParentSpanId,X-Span-Name,X-Span-Export
于 2016-12-08T01:19:30.853 回答