如何在多个 api 调用中使用相同的跟踪 ID

How to use the same trace id in multiple api calls

我有一个 api 有几种方法。 api 调用的工作流程大致如下: 登录,callX,...和注销。每个 api 方法都在调用子系统。带有 sleuth 的跟踪 ID 适用于例如登录调用及其所有子系统。现在我想要一个与 hole 工作流程相同的跟踪 ID(如会话 ID)。我如何实现这一点。是否存在像 spanid 和 traceid 这样的预定义标签?

检查terminology in the docs

跟踪只是一棵跨度树(有一个根),因此理论上您可以拥有一个从登录开始到注销结束的“会话跨度”,但您需要:

  • 在调用登录端点之前创建它
  • 调用注销后结束
  • 保持在两者之间
  • 处理从未调用注销的情况

如您所见,这可能会带来很大的问题,而且,您的跟踪在注销之前不会完成,您希望同时在 UI 上看到什么?

由于这些原因,跟踪通常(在 HTTP 的情况下)在“请求范围”中。这意味着将为客户端发出的每个请求创建一个新的“根跨度”,并为每次调用从根创建后续跨度。

这并不意味着您不能将某种“workflowId”附加到属于同一工作流的跨度(请永远不要附加真实的 sessionId,因为这应该保密)。

请检查文档的 Baggage and the Tag 部分。您可以创建一个“workflowId”,您可以将其传播到所有服务(使用行李),您可以将其作为标签附加到您的跨度中,以便您可以在 ui 上查询它们并查看所有痕迹属于同一工作流程。