Sleuth 踪迹的自定义传输

Custom transport for Sleuth traces

我的项目正在使用 Spring Cloud Sleuth 参与记录分布式跨度。与其他系统的通信是通过 Dapr 完成的,Spring Cloud Sleuth 不支持。应用程序通过 Sidecar(由 Dapr 提供)相互通信;应用程序和 Sidecar 之间的通信是 HTTP 或 gRPC。

Dapr 期望根据 W3C 标准传播分布式跟踪。通过在 application.yml 中设置以下内容,可以在 Sleuth 中使用 W3C 标准:

spring:
  sleuth:
    propagation:
      type: w3c

但是,这仅适用于由 Spring 管理的传输。由于 Dapr 不依赖于 Spring 或任何其他框架,因此他们使用自己的客户端与 sidecar 进行 HTTP 或 gRPC 通信。因此,Sleuth 工具不起作用。

我在文档中找不到任何关于如何编写自己的工具的提示。

所以我的问题是:我将如何使用非Spring 托管连接传播那些与 W3C 兼容的元数据?

Spring Cloud Sleuth 从非常高的角度做了两件事:

  1. 为您提供 API 跟踪库(抽象出跟踪库)
  2. 仪器 Spring Spring
  3. 支持的项目或库

正因为如此,如果你有一个不被Spring支持的库,你可以检查底层跟踪库是否支持它。默认情况下,跟踪库是 Brave,但它似乎不支持 Dapr。

如果你的tracing library和Sleuth都没有对你选择的项目进行instrument,你需要自己编写instrumentation(也可以开个issue让Brave支持)。

您可以使用 Sleuth and/or Brave 编写检测,文档的这些部分可以提供帮助:

除此之外,您还需要弄清楚如何通过线路传输跟踪数据。在大多数情况下,这会在客户端使用 headers(HTTP、Kafka、AMQP/RabbitMQ 等)发生,您需要将跟踪数据添加到您的消息中,以便通过网络传输服务器端你需要获取这些数据并重用它(如果有的话none,你需要从头开始创建一个Span)。

您可以看看其他类似的传输是如何被检测的(在 Sleuth 或 Brave 中)并做类似的事情,例如:HTTP、Kafka、AMQP/RabbitMQ、gRPC、Dubbo 等