Rumah > pembangunan bahagian belakang > Golang > 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
Lepaskan: 2024-10-27 20:51:30
asal
816 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan