从隐式上下文获取当前活动范围

问题描述

我在opentelemetry/specification/trace/api中找到了这个

如果该语言支持隐式传播的Context(请参见here),则API还应提供以下功能

  • 从隐式上下文获取当前活动范围。这等效于获取隐式上下文,然后从上下文中提取Span
  • 将当前活动范围设置为隐式上下文。这等效于获取隐式上下文,然后将Span插入上下文。

但是我没有找到在Java或go中获取当前活动范围的方法。是否有任何语言支持功能
任何帮助将不胜感激!

解决方法

是的,.NET 支持它:global::OpenTelemetry.Trace.Tracer.CurrentSpan。这是有效的,因为在任何给定的执行流程中一次只能有一个“活动”跨度。需要明确的是:可以有多个 span 同时处于活动状态,只是不在同一个执行流程中;执行流可以分叉,但每个分叉一次只有一个活动跨度。

此外,.NET 在其 Activity API 中已经具有与 OpenTelemetry API 等效的功能。

  • Tracer 是 ActivitySource 的包装器。
  • TelemetrySpan 是 Activity 的包装器。

您还可以通过访问 System.Diagnostics.ActivityContext 来获取当前的 Activity.Current.Context

OpenTelemetry API 的 .NET 参考实现建议您直接使用 .NET 框架的内置活动 API。但是,它还提供了封装 Activity API 的 OpenTelemetry shims。

例如,您可以将 OpenTelemetry.Trace.SpanContext 隐式转换为 System.Diagnostics.ActivityContext。您可以使用 new OpenTelemetry.Trace.SpanContext(activityContext) 将其转换回来。

我没有看到从 SpanContext 获取 TelemetrySpan 的方法;然而。所以 global::OpenTelemetry.Trace.Tracer.CurrentSpan 可能是您最好的选择。