Heim >Backend-Entwicklung >Golang >Wie konstruiere ich Spans aus Trace-IDs in Nicht-HTTP-Kontexten?

Wie konstruiere ich Spans aus Trace-IDs in Nicht-HTTP-Kontexten?

Susan Sarandon
Susan SarandonOriginal
2024-10-28 03:06:31937Durchsuche

How to Construct Spans from Trace IDs in Non-HTTP Contexts?

Konstruieren von Spans aus Trace-IDs in Nicht-HTTP-Kontexten

Bei der Weitergabe von Traces mithilfe von Headern in Nicht-HTTP-Kontexten müssen Sie manuell erstellen Spans mithilfe der bereitgestellten Trace- und Span-IDs. So erreichen Sie dies:

Abonnentenseite:

Innerhalb einer Funktion, die eingehende Nachrichten mit Trace- und Span-Headern verarbeitet:

  1. Extrahieren die Trace- und Span-IDs aus den Headern.
  2. Verwenden Sie die Funktionen „trace.TraceIDFromHex()“ und „trace.SpanIDFromHex()“, um die String-IDs in geeignete Typen umzuwandeln.
  3. Konstruieren Sie einen „trace.SpanContext by“. Bereitstellung der extrahierten Trace-ID, Span-ID und Trace-Flags.
  4. Anreichern des aktuellen Kontexts mit dem neu erstellten Span-Kontext mithilfe von context.Background(), gefolgt von Trace.ContextWithSpanContext().
  5. Beginnen Sie einen neuen Span unter Verwendung des angereicherten Kontexts mit einem geeigneten Namen.

Beispiel:

<code class="go">func handleIncomingMessage(request NewRequest) {
    traceID, err := trace.TraceIDFromHex(request.TraceID)
    if err != nil {
        fmt.Println("error: ", err)
        return
    }

    spanID, err := trace.SpanIDFromHex(request.SpanID)
    if err != nil {
        fmt.Println("error: ", err)
        return
    }

    spanContext := trace.NewSpanContext(trace.SpanContextConfig{
        TraceID: traceID,
        SpanID:  spanID,
        TraceFlags:   01,
        Remote:  false,
    })

    ctx := context.Background()
    ctx = trace.ContextWithSpanContext(ctx, spanContext)

    _, span := otel.Tracer("requestInLoop").Start(ctx, "requestInLoopSpan")
    span.AddEvent("processing....")
}</code>

In diesem Beispiel ist NewRequest ein benutzerdefinierter Typ, der enthält die Trace- und Span-IDs. Die handleIncomingMessage-Funktion verwendet eine NewRequest-Struktur als Eingabe und erstellt einen Span mit den bereitgestellten Trace- und Span-IDs.

Hinweis: Stellen Sie sicher, dass keine neuen Spans erstellt werden, wenn das IsRemote-Feld des bereitgestellten Spans context ist auf true gesetzt, da dies anzeigt, dass der Span bereits remote exportiert wurde.

Das obige ist der detaillierte Inhalt vonWie konstruiere ich Spans aus Trace-IDs in Nicht-HTTP-Kontexten?. 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