非 HTTP コンテキストでのトレース ID からのスパンの構築
非 HTTP コンテキストでヘッダーを使用してトレースを伝播する場合、手動で構築する必要があります提供されたトレース ID とスパン ID を使用してスパンを確認します。これを実現する方法は次のとおりです。
サブスクライバ側:
トレース ヘッダーとスパン ヘッダーを持つ受信メッセージを処理する関数内:
例:
<code class="go">func handleIncomingMessage(request NewRequest) { traceID, err := trace.TraceIDFromHex(request.TraceID) if err != nil { fmt.Println("error: ", err) return } spanID, err := trace.SpanIDFromHex(request.SpanID) if err != nil { fmt.Println("error: ", err) return } spanContext := trace.NewSpanContext(trace.SpanContextConfig{ TraceID: traceID, SpanID: spanID, TraceFlags: 01, Remote: false, }) ctx := context.Background() ctx = trace.ContextWithSpanContext(ctx, spanContext) _, span := otel.Tracer("requestInLoop").Start(ctx, "requestInLoopSpan") span.AddEvent("processing....") }</code>
この例では、NewRequest は、次の内容を含むカスタム タイプです。トレース ID とスパン ID。 handleIncomingMessage 関数は、NewRequest 構造体を入力として受け取り、指定されたトレース ID とスパン ID を使用してスパンを作成します。
注: 指定されたスパンの IsRemote フィールドが指定されている場合は、新しいスパンが作成されないことを確認してください。 context は true に設定されます。これは、スパンがすでにリモートでエクスポートされていることを示します。
以上が非 HTTP コンテキストでトレース ID からスパンを構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。