Spring Cloud Sleuth-非Sleuth应用程序的Sleuth兼容ID生成

时间:2018-10-11 11:31:36

标签: spring-cloud-sleuth

1-在为侦探进行POC时,我们收集到,如果对启用slueth的应用程序的传入请求具有跟踪/跨度和父ID,则它们会向前传播,并且不会生成新ID。但是,这似乎仅在所有3个都存在时才起作用。我们尝试在请求标头中仅使用跟踪ID,并由侦探生成了新的跟踪ID-请确认是否需要同时显示3个消息才能成功传播。

2-我们有多个相互通信的微服务。其中一些是直接从UI层调用的,其他一些是从非侦探应用程序调用的。在这两种情况下,都会在请求中发送128位UUID作为跟踪ID。如果要使用侦探,则需要从UI层和非侦探应用生成侦探兼容的64位ID,以便在请求执行期间通过多个启用侦探的应用成功继承它们。 能否请您提供关于如何实现64位ID生成的建议,以使它们符合sleuth标准并成功传播。有效的侦听ID有什么要求?

任何指针都将受到高度赞赏。

谢谢。

2 个答案:

答案 0 :(得分:1)

  1. 启用了侦探的应用程序仅在http请求标头中查找名为x-b3-trace-id的标头的值。此值由发出请求的应用程序传递,并由启用了侦听功能的应用程序对其traceId重用。不需要什么了。另外请记住,默认情况下,所有日志条目的traceId和spanId都相等。

  2. 这个问题的答案也在上面的#1中。如果您在请求标头中嵌入了x-b3-trace-id,那么基本上这就是sleuth关心的是它的跟踪ID。

我希望这对您有帮助

答案 1 :(得分:0)

您无需指定它们中的任何一个即可工作。 跨度是已完成的一组工作,而跟踪 ID 是已完成的所有小工作之间的相关性。例如:


  1. 您拥有启用了弹簧侦探的服务 A 和服务 B。
  2. 通过 http 调用服务 A,无需提供 x-b3-trace-id 和 x-b3-span-id。将生成新的 traceId 和 spanId。
  3. 服务 A 正在对服务 B 进行 http 调用,它会自动将 traceId 发送到服务 B。登录这两个服务将为您提供相同的 traceId,可用于关联您的服务与不同 spanId 之间的所有调用/事件可用于构建所有调用的树。