Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencipta OpenTelemetry Span daripada String TraceID dalam Sistem Teragih?

Bagaimana untuk Mencipta OpenTelemetry Span daripada String TraceID dalam Sistem Teragih?

DDD
DDDasal
2024-10-29 06:28:021038semak imbas

How to Create OpenTelemetry Spans from a String TraceID in a Distributed System?

Mencipta OpenTelemetry Span daripada String TraceID

Apabila berurusan dengan sistem teragih, adalah penting untuk mengekalkan konteks dan mengesan perhubungan merentas komponen. Dalam kes ini, apabila penerbit menggunakan pengepala mesej untuk menyebarkan maklumat surih, kami masih boleh membina rentang OpenTelemetry pada bahagian pelanggan menggunakan rentetan traceID yang diterima.

Membina SpanContext daripada Nilai Tajuk

Kepada cipta span dengan ibu bapanya dipautkan dengan betul, kita perlu menukar rentetan traceID dan spanID yang diekstrak daripada pengepala permintaan kepada trace.TraceID dan trace.SpanID objek. Kami mencapai ini menggunakan fungsi berikut:

<code class="go">var traceID trace.TraceID
traceID, err = trace.TraceIDFromHex(request.TraceID)
var spanID trace.SpanID
spanID, err = trace.SpanIDFromHex(request.SpanID)</code>

Dengan objek traceID dan spanID, kami boleh membina SpanContext. Kita perlu menetapkan bendera Jauh kepada palsu, menunjukkan bahawa span ini tidak dieksport ke sistem jauh:

<code class="go">var spanContextConfig trace.SpanContextConfig
spanContextConfig.TraceID = traceID
spanContextConfig.SpanID = spanID
spanContextConfig.TraceFlags = 01
spanContextConfig.Remote = false
spanContext = trace.NewSpanContext(spanContextConfig)</code>

Mencipta Span Baharu dengan SpanContext

Untuk mencipta span baharu dengan SpanContext yang dibina ini, kita perlu memperkayakan konteks baharu dahulu dengannya:

<code class="go">requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>

Kemudian, kita boleh memulakan rentang anak baharu menggunakan konteks yang diperkaya:

<code class="go">var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")</code>

Kanak-kanak ini span akan dipautkan kepada span induk di bahagian penerbit, membolehkan penyebaran konteks yang betul ke seluruh sistem yang diedarkan.

Atas ialah kandungan terperinci Bagaimana untuk Mencipta OpenTelemetry Span daripada String TraceID dalam Sistem Teragih?. 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