Heim >Backend-Entwicklung >Golang >Wie erstelle ich OpenTelemetry-Spans aus einer String-TraceID in einem verteilten System?

Wie erstelle ich OpenTelemetry-Spans aus einer String-TraceID in einem verteilten System?

DDD
DDDOriginal
2024-10-29 06:28:021041Durchsuche

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

Erstellen von OpenTelemetry-Spans aus einer String-TraceID

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.

Erstellen des SpanContext aus Header-Werten

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>

Erstellen eines neuen Spans mit dem SpanContext

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn