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.
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>
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!