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