文字列 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 サイトの他の関連記事を参照してください。