3

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

如果语言支持隐式传播Context(参见此处),API 还应该提供以下功能:

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

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

4

1 回答 1

2

是的,.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 框架的内置 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可能是你最好的选择。

于 2021-03-29T22:31:16.917 回答