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
DDDoriginal
2024-10-29 06:28:021106parcourir

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>

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>

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>

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>

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!

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