Construction d'étendues à partir d'ID de trace dans Opentelemetry
La propagation de contexte est généralement utilisée pour récupérer les ID de trace parents et créer des étendues en tant qu'enfants. Toutefois, dans les scénarios où des en-têtes sont utilisés pour l'échange de messages, des approches alternatives sont nécessaires.
Pour créer une étendue à partir d'un ID de trace de chaîne, vous pouvez suivre ces étapes :
Construire une fonction pour analyser les ID de trace et d'étendue :
func constructNewSpanContext(request NewRequest) (spanContext trace.SpanContext, err error) {
traceID, err := trace.TraceIDFromHex(request.TraceID)
if err != nil {
fmt.Println("error:", err)
}
spanID, err := trace.SpanIDFromHex(request.SpanID)
if err != nil {
fmt.Println("error:", err)
}
spanContextConfig := trace.SpanContextConfig{
TraceID: traceID,
SpanID: spanID,
TraceFlags: 01,
Remote: false,
}
spanContext = trace.NewSpanContext(spanContextConfig)
return spanContext, nil
}
Cette fonction extrait les ID de trace et d'étendue de la requête et construit un objet SpanContext.
Injecter SpanContext dans le contexte :
spanContext, err := constructNewSpanContext(request)
if err != nil {
fmt.Println("ERROR:", err)
}
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
Le SpanContext est utilisé pour enrichir le contexte de la requête, indiquant la suite de la trace.
Créer un Nouveau Span :
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")
requestInLoopSpan.AddEvent("processing....")
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3