在 OpenTelemetry 中对多个轨迹进行分组

问题描述 投票:0回答:1

我有一个请求“获取图书列表”,该请求包含一个 uniqueId,API 使用

StartActivity
创建一个新的跟踪。
我有另一个请求“购买书籍”,该请求包含与“获取书籍列表”相同的 uniqueId,API 使用
StartActivity
创建一个新的跟踪。
在我的可观察性工具(DataDog)中,我看到了两条跟踪,但我希望看到一个视图,这样我就可以看到从“获取图书列表”到“购买图书”请求的跟踪。这将使我能够看到整个用户旅程。
我如何使用 OpenTelemetry 实现这一目标? API 是无状态的,请求唯一的共同点是 uniqueId。

c# .net open-telemetry datadog distributed-tracing
1个回答
0
投票

首先对此进行快速评论:

...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 范围将成为通过跟踪上下文传递的范围的子范围。这一切都是透明发生的。

© www.soinside.com 2019 - 2024. All rights reserved.