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

Mary-Kate Olsen
リリース: 2024-10-27 20:51:30
オリジナル
733 人が閲覧しました

How can I create an OpenTelemetry Span from a string TraceID in Go?

文字列 TraceID からの OpenTelemetry スパンの作成

traceID を使用して加入者側で新しいスパンを作成するには、受信したtraceID文字列を使用してspanを実行します。代わりに、提供された TraceID を使用して [trace.SpanContext](https://pkg.go.dev/go.opentelemetry.io/otel/trace#SpanContext) を構築する必要があります。

SpanContext

SpanContext を生成するには、次のような別の関数でコードをラップすることをお勧めします。

<code class="go">func constructNewSpanContext(request NewRequest) (spanContext trace.SpanContext, err error) {
    // Assuming the trace and span IDs are provided as strings in request struct.

    var traceID trace.TraceID
    traceID, err = trace.TraceIDFromHex(request.TraceID)
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    var spanID trace.SpanID
    spanID, err = trace.SpanIDFromHex(request.SpanID)
    if err != nil {
        fmt.Println("error:", err)
        return
    }

    spanContextConfig := trace.SpanContextConfig{
        TraceID: traceID,
        SpanID:  spanID,
        // Other TraceFlag bits if desired
    }

    spanContext = trace.NewSpanContext(spanContextConfig)
    return spanContext, nil
}</code>
ログイン後にコピー

SpanContext でコンテキストを強化する

SpanContext が作成されたら、それを使用して新しいコンテキストを強化します。

<code class="go">spanContext, err := constructNewSpanContext(request)
if err != nil {
    fmt.Println("ERROR:", err)
}

fmt.Println("IS VALID?", spanContext.IsValid()) // Check if the `spanContext` is valid

requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)

// Start a new span within the enriched context
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")

requestInLoopSpan.AddEvent("processing....") // Should now work</code>
ログイン後にコピー

これらの手順を実行すると、受信した TraceID を使用してサブスクライバ側で新しい Span を正常に作成できます。リクエストヘッダーから。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!