Maison >développement back-end >Golang >Comment construire des étendues à partir d'ID de trace dans des contextes non HTTP ?

Comment construire des étendues à partir d'ID de trace dans des contextes non HTTP ?

Susan Sarandon
Susan Sarandonoriginal
2024-10-28 03:06:31941parcourir

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

Construction de spans à partir d'ID de trace dans des contextes non HTTP

Lors de la propagation de traces à l'aide d'en-têtes dans des contextes non HTTP, vous devez construire manuellement spans à l’aide des ID de trace et de span fournis. Voici comment y parvenir :

Côté abonné :

À l'intérieur d'une fonction qui gère les messages entrants avec des en-têtes trace et span :

  1. Extraire les ID de trace et de span des en-têtes.
  2. Utilisez les fonctions trace.TraceIDFromHex() et trace.SpanIDFromHex() pour convertir les ID de chaîne en types appropriés.
  3. Construisez un trace.SpanContext en fournissant l'ID de trace extrait, l'ID de span et les indicateurs de trace.
  4. Enrichissez le contexte actuel avec le contexte de span nouvellement créé à l'aide de context.Background(), suivi de trace.ContextWithSpanContext().
  5. Démarrez une nouvelle étendue en utilisant le contexte enrichi avec un nom approprié.

Exemple :

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

Dans cet exemple, NewRequest est un type personnalisé qui contient les identifiants de trace et de span. La fonction handleIncomingMessage prend une structure NewRequest en entrée et crée une étendue avec les ID de trace et d'étendue fournis.

Remarque : Assurez-vous que de nouvelles étendues ne sont pas créées si le champ IsRemote de l'étendue fournie Le contexte est défini sur true, car cela indique que le span a déjà été exporté à distance.

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