「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 文字列 TraceID から OpenTelemetry スパンを作成するにはどうすればよいですか?

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

2024 年 11 月 5 日に公開
ブラウズ:926

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

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

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

解決策

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

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

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

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3