スパン間の親子関係を確立するには、コンテキストの伝播が実行できない状況でヘッダーを利用する必要があります。このシナリオでは、トレース 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 スパンを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。