Spring Sleuth Zipkin 额外场传播

Spring Sleuth Zipkin Extra Field Propagation

我是分布式日志记录的新手,我需要有关跨 Http 请求和消息传递请求传播额外字段的帮助。 目前,我能够传播 traceId 和 spanId,但我需要传递 correlationId 才能传播到所有微服务。

spring:
   sleuth:
      correlation-fields:
       - x-correlation-id
      remote-fields:
      - x-correlation-id

logback.xml

%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(%5p [${appName},%X{traceId:-},%X{parentId:-},%X{spanId:-},%X{correlation-id:-}]) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%t]){faint}  %clr(%logger{20}:%line){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}

我有点好奇如何将关联ID传递给其他服务。

In case the message starts from Service A - 
Service A (Message Started,CorrelationID-123) -> ServiceB (CorrelationID-123) -> ServiceC(CorrelationID-123)
In case if it started with Service B
Service B (Message Started,CorrelationID-123) -> ServiceA (CorrelationID-123) -> ServiceC(CorrelationID-123)

  1. 如何将关联 ID 传递给 Kafka 消息?
  2. 如何将关联 ID 传递给 Http 请求?
  3. 是否可以使用来自其他服务的现有 tracedId?

我觉得你说的correlationId其实就是traceId,如果你刚接触分布式追踪,我强烈推荐阅读spring-cloud-sleuth的文档,introduction section will give you a basic understanding while the propagation会告诉你如何您的字段跨服务传播。
我还推荐这个演讲:Distributed Tracing: Latency Analysis for Your Microservices - Grzejszczak, Krishna.

准确回答您的问题:

How the correlation id will be passed to Kafka messages?

Kafka 有 headers,我假设这些字段是通过 Kafka 传播的 headers。

How the correlation id will be passed to Http requests?

通过 HTTP Headers.

Is it possible to use existing tracedId from other service?

不仅可能,Sleuth 开箱即用。如果传入的request/message/event/etc中有traceId。 Sleuth 不会创建新的但会使用它(请参阅我上面链接的文档)。