Maison >développement back-end >Golang >Comment créer un Span OpenTelemetry à partir d'un TraceID de chaîne ?

Comment créer un Span OpenTelemetry à partir d'un TraceID de chaîne ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 14:09:02684parcourir

How Can You Create an OpenTelemetry Span from a String TraceID?

Construction d'un Span OpenTelemetry à partir d'un TraceID de chaîne

Pour établir la relation parent-enfant entre les spans, les en-têtes doivent être utilisés dans des situations où la propagation du contexte n'est pas viable. Dans ce scénario, un ID de trace et un ID de span sont contenus dans les en-têtes du courtier de messages, ce qui permet à l'abonné de créer un nouveau span avec l'ID de trace parent.

Solution

Les étapes suivantes peuvent être pris pour construire un contexte ou un span côté abonné à l'aide de l'ID de trace :

  1. Définir une fonction avec l'ID de trace comme argument :
<code class="go">func constructNewSpanContext(traceID string) (spanContext trace.SpanContext, err error) {
    traceID, err := trace.TraceIDFromHex(traceID)
    if err != nil {
        return trace.SpanContext{}, err
    }
    return trace.NewSpanContext(trace.SpanContextConfig{
        TraceID: traceID,
    }), nil
}</code>
  1. À l'intérieur du canal, appelez la fonction pour construire le contexte span :
<code class="go">spanContext, err := constructNewSpanContext(request.TraceID)
if err != nil {
    log.Fatal(err)
}</code>
  1. Enrichissez un contexte avec le contexte span construit :
<code class="go">requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
  1. Créez un nouveau span en utilisant le contexte enrichi :
<code class="go">requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")</code>

En suivant ces étapes, vous pouvez réussir à construire un nouveau span côté abonné en utilisant l'ID de trace extrait des en-têtes de message , assurant la relation hiérarchique entre les travées.

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