Maison > développement back-end > Golang > 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
Libérer: 2024-10-27 20:51:30
original
888 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal