Beim Umgang mit verteilten Systemen ist es entscheidend, den Kontext beizubehalten und Beziehungen zwischen Komponenten zu verfolgen. In diesem Fall, in dem der Herausgeber Nachrichtenheader verwendet, um Trace-Informationen weiterzugeben, können wir auf der Abonnentenseite weiterhin OpenTelemetry-Spans mithilfe der empfangenen TraceID-Zeichenfolge erstellen.
An Um einen Span mit korrekt verknüpften übergeordneten Elementen zu erstellen, müssen wir die aus den Anforderungsheadern extrahierten TraceID- und SpanID-Zeichenfolgen in Trace.TraceID- und Trace.SpanID-Objekte konvertieren. Dies erreichen wir mit den folgenden Funktionen:
<code class="go">var traceID trace.TraceID traceID, err = trace.TraceIDFromHex(request.TraceID) var spanID trace.SpanID spanID, err = trace.SpanIDFromHex(request.SpanID)</code>
Mit den Objekten „traceID“ und „spanID“ können wir einen SpanContext erstellen. Wir müssen das Remote-Flag auf „false“ setzen, um anzuzeigen, dass dieser Span nicht in ein Remote-System exportiert wird:
<code class="go">var spanContextConfig trace.SpanContextConfig spanContextConfig.TraceID = traceID spanContextConfig.SpanID = spanID spanContextConfig.TraceFlags = 01 spanContextConfig.Remote = false spanContext = trace.NewSpanContext(spanContextConfig)</code>
Um einen neuen Span zu erstellen Mit diesem konstruierten SpanContext müssen wir zunächst einen neuen Kontext damit anreichern:
<code class="go">requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
Dann können wir mit dem angereicherten Kontext einen neuen untergeordneten Bereich beginnen:
<code class="go">var requestInLoopSpan trace.Span childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")</code>
Dieses Kind span wird mit dem übergeordneten span auf der Herausgeberseite verknüpft, was eine ordnungsgemäße Kontextweitergabe im gesamten verteilten System ermöglicht.
Das obige ist der detaillierte Inhalt vonWie erstelle ich OpenTelemetry-Spans aus einer String-TraceID in einem verteilten System?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!