Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah saya boleh mencipta Span OpenTelemetry daripada rentetan TraceID dalam Go?

Bagaimanakah saya boleh mencipta Span OpenTelemetry daripada rentetan TraceID dalam Go?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-27 20:51:30732semak imbas

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

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn