Membuat Span OpenTelemetry daripada String TraceID
Untuk mencipta span baharu pada sisi pelanggan menggunakan traceID, seseorang tidak boleh membuat terus span menggunakan rentetan traceID yang diterima. Sebaliknya, anda mesti membina [trace.SpanContext](https://pkg.go.dev/go.opentelemetry.io/otel/trace#SpanContext) menggunakan traceID yang disediakan.
Bina SpanContext
Untuk menjana SpanContext, adalah disyorkan untuk membalut kod dalam fungsi yang berasingan, seperti ini:
<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>
Perkaya Konteks dengan SpanContext
Setelah SpanContext dibuat, perkayakan konteks baharu dengannya:
<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>
Dengan melakukan langkah-langkah ini, anda boleh berjaya mencipta Span baharu di sebelah pelanggan menggunakan traceID yang diterima daripada pengepala permintaan.
Atas ialah kandungan terperinci Bagaimanakah saya boleh mencipta Span OpenTelemetry daripada rentetan TraceID dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!