Maison  >  Article  >  développement back-end  >  Comment puis-je créer un OpenTelemetry Span à partir d'une chaîne TraceID dans Go ?

Comment puis-je créer un OpenTelemetry Span à partir d'une chaîne TraceID dans Go ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-27 20:51:30732parcourir

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

Création d'un Span OpenTelemetry à partir d'un TraceID de chaîne

Pour créer un nouveau span côté abonné à l'aide du traceID, on ne peut pas créer directement un span en utilisant la chaîne traceID reçue. Au lieu de cela, vous devez construire un [trace.SpanContext](https://pkg.go.dev/go.opentelemetry.io/otel/trace#SpanContext) à l'aide du traceID fourni.

Construisez le SpanContext

Pour générer le SpanContext, il est recommandé d'envelopper le code dans une fonction distincte, comme celle-ci :

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

Enrichir un contexte avec le SpanContext

Une fois le SpanContext créé, enrichissez-en un nouveau contexte :

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

En effectuant ces étapes, vous pouvez réussir à créer un nouveau Span côté abonné en utilisant le traceID reçu à partir des en-têtes de requête.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn