我在微服务之间使用 Kafka 进行异步调用,我正在使用 Spring Sleuth 进行日志记录。日志没问题,但是当有消息从微服务1到微服务2时,日志的消息有不同的Trace-ID。他们不是必须具有相同的跟踪 ID 但具有不同的 SpanId 吗?有什么特别的配置吗?
最佳答案
默认情况下,消息头不会被 Spring Cloud Kafka binder 传输,您必须按照 Spring Cloud Stream Reference Guide 中的描述通过 spring.cloud.stream.kafka.binder.headers
手动设置它。然后检查那些与跟踪相关的 header 是否已正确发送。
您可以在 application.yml 中按如下方式设置 Zipkin header :
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
关于Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40923367/