要建立 Span 之间的父子关系,必须在上下文传播不可行的情况下使用标头。在这种情况下,跟踪 ID 和跨度 ID 包含在消息代理的标头中,这允许订阅者使用父跟踪 ID 创建新的跨度。
以下步骤可以使用跟踪 ID 在订阅者端构造上下文或跨度:
<code class="go">func constructNewSpanContext(traceID string) (spanContext trace.SpanContext, err error) { traceID, err := trace.TraceIDFromHex(traceID) if err != nil { return trace.SpanContext{}, err } return trace.NewSpanContext(trace.SpanContextConfig{ TraceID: traceID, }), nil }</code>
<code class="go">spanContext, err := constructNewSpanContext(request.TraceID) if err != nil { log.Fatal(err) }</code>
<code class="go">requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
<code class="go">requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")</code>
通过执行以下步骤,您可以使用从消息标头中提取的跟踪 ID 在订阅者端成功构造新的范围,确保跨度之间的层次关系。
以上是如何从字符串 TraceID 创建 OpenTelemetry Span?的详细内容。更多信息请关注PHP中文网其他相关文章!