ホームページ > バックエンド開発 > Golang > 文字列 TraceID から OpenTelemetry スパンを作成するにはどうすればよいですか?

文字列 TraceID から OpenTelemetry スパンを作成するにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-10-26 14:09:02
オリジナル
680 人が閲覧しました

How Can You Create an OpenTelemetry Span from a String TraceID?

文字列 TraceID から OpenTelemetry スパンを構築する

スパン間の親子関係を確立するには、コンテキストの伝播が実行できない状況でヘッダーを利用する必要があります。このシナリオでは、トレース ID とスパン ID がメッセージ ブローカーのヘッダー内に含まれているため、サブスクライバーは親トレース ID を使用して新しいスパンを作成できます。

解決策

次の手順を実行できます。トレース ID を使用してサブスクライバ側でコンテキストまたはスパンを構築します:

  1. 引数としてトレース 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>
ログイン後にコピー
  1. チャネル内で、関数を呼び出してスパン コンテキストを構築します:
<code class="go">spanContext, err := constructNewSpanContext(request.TraceID)
if err != nil {
    log.Fatal(err)
}</code>
ログイン後にコピー
  1. 構築されたスパン コンテキストでコンテキストを強化します:
<code class="go">requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
ログイン後にコピー
  1. エンリッチされたコンテキストを使用して新しいスパンを作成します:
<code class="go">requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")</code>
ログイン後にコピー

次の手順に従うと、メッセージ ヘッダーから抽出されたトレース ID を使用してサブスクライバ側で新しいスパンを正常に構築できます。 、スパン間の階層関係を確保します。

以上が文字列 TraceID から OpenTelemetry スパンを作成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート