我在opentelemetry/specification/trace/api中找到了这个:
如果语言支持隐式传播
Context
(参见此处),API 还应该提供以下功能:
- 从隐式上下文中获取当前活动的跨度。这相当于获取隐式上下文,然后
Span
从上下文中提取。- 将当前活动范围设置为隐式上下文。这相当于获取隐式上下文,然后将 插入
Span
到上下文中。
但是我没有找到在java或go中获取当前活动跨度的方法。是否有任何语言支持此功能?
任何帮助将不胜感激!
我在opentelemetry/specification/trace/api中找到了这个:
如果语言支持隐式传播
Context
(参见此处),API 还应该提供以下功能:
- 从隐式上下文中获取当前活动的跨度。这相当于获取隐式上下文,然后
Span
从上下文中提取。- 将当前活动范围设置为隐式上下文。这相当于获取隐式上下文,然后将 插入
Span
到上下文中。
但是我没有找到在java或go中获取当前活动跨度的方法。是否有任何语言支持此功能?
任何帮助将不胜感激!
是的,.NET 支持它:global::OpenTelemetry.Trace.Tracer.CurrentSpan
. 这是可行的,因为在任何给定的执行流程中一次只能有一个“活动”跨度。需要明确的是:可以有多个 span 并发活动,只是不在同一个执行流程中;执行流程可以分叉,但每个分叉一次只有一个活动跨度。
此外,.NET 已经在其 Activity API 中具有等效的 OpenTelemetry API。
您还可以System.Diagnostics.ActivityContext
通过访问来获取电流Activity.Current.Context
。
OpenTelemetry API 的 .NET 参考实现建议您直接使用 .NET 框架的内置 Activity API。但是,它还提供了包装 Activity API 的 OpenTelemetry 垫片。
例如,您可以将 an 隐式转换OpenTelemetry.Trace.SpanContext
为 a System.Diagnostics.ActivityContext
。您可以使用new OpenTelemetry.Trace.SpanContext(activityContext)
.
我没有看到从 SpanContext 获取 TelemetrySpan 的方法;然而。所以global::OpenTelemetry.Trace.Tracer.CurrentSpan
可能是你最好的选择。