Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich in Go einen OpenTelemetry Span aus einer Zeichenfolge TraceID erstellen?

Wie kann ich in Go einen OpenTelemetry Span aus einer Zeichenfolge TraceID erstellen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-27 20:51:30732Durchsuche

How can I create an OpenTelemetry Span from a string TraceID in Go?

Erstellen eines OpenTelemetry-Spans aus einer String-TraceID

Um auf der Abonnentenseite mithilfe der TraceID einen neuen Span zu erstellen, kann man nicht direkt einen erstellen span mithilfe der empfangenen TraceID-Zeichenfolge. Stattdessen müssen Sie einen [trace.SpanContext](https://pkg.go.dev/go.opentelemetry.io/otel/trace#SpanContext) mit der bereitgestellten TraceID erstellen.

Konstruieren Sie den SpanContext

Um den SpanContext zu generieren, wird empfohlen, den Code in eine separate Funktion zu packen, wie zum Beispiel diese:

<code class="go">func constructNewSpanContext(request NewRequest) (spanContext trace.SpanContext, err error) {
    // Assuming the trace and span IDs are provided as strings in request struct.

    var traceID trace.TraceID
    traceID, err = trace.TraceIDFromHex(request.TraceID)
    if err != nil {
        fmt.Println("error:", err)
        return
    }

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

    spanContextConfig := trace.SpanContextConfig{
        TraceID: traceID,
        SpanID:  spanID,
        // Other TraceFlag bits if desired
    }

    spanContext = trace.NewSpanContext(spanContextConfig)
    return spanContext, nil
}</code>

Anreichern eines Kontexts mit dem SpanContext

Sobald der SpanContext erstellt ist, bereichern Sie einen neuen Kontext damit:

<code class="go">spanContext, err := constructNewSpanContext(request)
if err != nil {
    fmt.Println("ERROR:", err)
}

fmt.Println("IS VALID?", spanContext.IsValid()) // Check if the `spanContext` is valid

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

// Start a new span within the enriched context
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")

requestInLoopSpan.AddEvent("processing....") // Should now work</code>

Durch Ausführen dieser Schritte können Sie mithilfe der erhaltenen TraceID erfolgreich einen neuen Span auf der Abonnentenseite erstellen aus den Anforderungsheadern.

Das obige ist der detaillierte Inhalt vonWie kann ich in Go einen OpenTelemetry Span aus einer Zeichenfolge TraceID erstellen?. 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