OpenTelemetry 中可分割的大迹线如何处理?

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

我有一个工作人员,它每 x 秒调用一个函数

foo
。 我想跟踪这个函数的每次调用
foo
,以监控每个调用的情况。

我正在使用 c#

activity
进行监控,它位于 OpenTelemetry 收集器/后端/等中... 我在 Grafana 上观察这些痕迹。

我的函数 foo 类似于:

void foo()
{
  using var activity = activitySource.StartActivity("foo");

  var userIDList = GetUserIDList(); // Some span are create here

  foreach (var userID in userIDList)
  {
    someActionOnUser(userID); // lot of span are create here
  }
}

最终的痕迹很重(大约10Mo),我想减小这个大小,因为后端有一个大小限制(我可以增大这个限制,但我寻找更好的解决方案......)。

我的想法是:

  • 为每个循环迭代创建一个父跟踪A(它将捕获
    someActionOnUser
    中创建的span)
  • 为父跟踪“foo”创建一个跨度B(这将不会捕获
    someActionOnUser
    中创建的跨度)
  • 设置从 A 到 B 以及 B 到 A 的 Span 链接
在 C# 中,Span 链接是

Activity Link

但是在 C# 中,只有在创建 Activity 时才能设置 Activity Link(

链接到 Activity 代码源),所以这个解决方案实际上不太可行...

我发现了这个

讨论,建议在活动中添加一个功能AddLinks

,以及这个问题。

所以我认为这个想法并不是很好(我想知道这是否不是一个反模式......)。 我不认为我是第一个遇到这个问题的人,但我没有找到很多关于这个问题的资源。 我怀疑我有一个糟糕的策略来处理这个问题。

人们如何处理这个问题?

c# trace open-telemetry system.diagnostics
1个回答
1
投票

https://github.com/open-telemetry/opentelemetry-dotnet/tree/main/docs/trace/links-creation-with-new-activities - 检查此文档,它有一些关于如何实现此目的的示例。 (注:AddLink API 将于今年晚些时候推出:https://github.com/open-telemetry/opentelemetry-dotnet/issues/5273

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