我有一个请求“获取图书列表”,该请求包含一个 uniqueId,API 使用
StartActivity
创建一个新的跟踪。StartActivity
创建一个新的跟踪。首先对此进行快速评论:
...API 使用 StartActivity 创建一个新的 Trace。
从你的说法来看,你似乎是自己用代码手动完成的?如果是这样,我强烈建议您停止这样做并改用
OpenTelemetry.Instrumentation.AspNetCore
包 和自动 AspNetCore 检测。这将确保对 API 的每个请求都使用所有 OTEL 定义的最佳实践/规范创建跟踪。
现在,关于您要求按此
uniqueId
值将呼叫“分组”在一起,我的建议如下。我假设,如果您在调用之间有这个 uniqueId,那么它会保存在某个地方,也许在前端 SPA 应用程序上(如果您可以在 API 使用者上添加更多详细信息,那就太好了)。
如果是这样,在您的情况下看到“完整流程”的最佳行动方案是实际添加 OpenTelemetry 工具到您的客户端。这样,客户端就会为其创建根跟踪,该跟踪自然会包含它对 API 进行的所有调用以“执行其工作”。然后,您应该看到 2 个跟踪,一个用于
Get a list of books
,另一个用于 Buy book
,作为同一跟踪的一部分(假设这两个操作都在同一上下文中执行)。
OpenTelemetry 负责跨应用程序边界传播自动生成的
traceId
值,该值随后用于将所有各种分布式跨度关联到单个内聚跟踪中。例如,在 AspNetCore 插装的情况下,如果从非插装上下文调用 API,则 API 范围将成为根范围,否则 API 范围将成为通过跟踪上下文传递的范围的子范围。这一切都是透明发生的。