问题描述
我在opentelemetry/specification/trace/api中找到了这个
但是我没有找到在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
可能是您最好的选择。