Maison > développement back-end > Golang > Comment créer des étendues OpenTelemetry à partir d'une chaîne TraceID dans un système distribué ?

Comment créer des étendues OpenTelemetry à partir d'une chaîne TraceID dans un système distribué ?

DDD
Libérer: 2024-10-29 06:28:02
original
1037 Les gens l'ont consulté

How to Create OpenTelemetry Spans from a String TraceID in a Distributed System?

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

Lorsqu'il s'agit de systèmes distribués, il est crucial de maintenir le contexte et de tracer les relations entre les composants. Dans ce cas, où l'éditeur utilise des en-têtes de message pour propager les informations de trace, nous pouvons toujours construire des étendues OpenTelemetry du côté de l'abonné en utilisant la chaîne traceID reçue.

Construction du SpanContext à partir des valeurs d'en-tête

À Pour créer un span avec ses parents correctement liés, nous devons convertir les chaînes traceID et spanID extraites des en-têtes de requête en objets trace.TraceID et trace.SpanID. Nous y parvenons en utilisant les fonctions suivantes :

<code class="go">var traceID trace.TraceID
traceID, err = trace.TraceIDFromHex(request.TraceID)
var spanID trace.SpanID
spanID, err = trace.SpanIDFromHex(request.SpanID)</code>
Copier après la connexion

Avec les objets traceID et spanID, nous pouvons construire un SpanContext. Nous devons définir l'indicateur Remote sur false, indiquant que cette étendue n'est pas exportée vers un système distant :

<code class="go">var spanContextConfig trace.SpanContextConfig
spanContextConfig.TraceID = traceID
spanContextConfig.SpanID = spanID
spanContextConfig.TraceFlags = 01
spanContextConfig.Remote = false
spanContext = trace.NewSpanContext(spanContextConfig)</code>
Copier après la connexion

Création d'une nouvelle étendue avec SpanContext

Pour créer une nouvelle étendue avec ce SpanContext construit, nous devons d'abord en enrichir un nouveau contexte :

<code class="go">requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)</code>
Copier après la connexion

Ensuite, nous pouvons commencer un nouveau span enfant en utilisant le contexte enrichi :

<code class="go">var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")</code>
Copier après la connexion

Cet enfant span sera lié au span parent côté éditeur, permettant une propagation appropriée du contexte dans tout le système distribué.

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!

source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal