Konstruieren von Spans aus Trace-IDs in Opentelemetry
Kontextweitergabe wird normalerweise verwendet, um übergeordnete Trace-IDs abzurufen und Spans als untergeordnete Elemente zu erstellen. In Szenarien, in denen Header für den Nachrichtenaustausch verwendet werden, sind jedoch alternative Ansätze erforderlich.
Um einen Span aus einer Zeichenfolgen-Trace-ID zu erstellen, können Sie die folgenden Schritte ausführen:
Konstruieren Sie eine Funktion zum Parsen von Trace- und Span-IDs:
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
}
Diese Funktion extrahiert die Trace- und Span-IDs aus der Anfrage und erstellt ein SpanContext-Objekt.
SpanContext in Kontext einfügen:
spanContext, err := constructNewSpanContext(request)
if err != nil {
fmt.Println("ERROR:", err)
}
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
Der SpanContext wird verwendet, um den Anforderungskontext anzureichern und die Fortsetzung der Ablaufverfolgung anzuzeigen.
Erstellen Sie eine Neue Span:
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")
requestInLoopSpan.AddEvent("processing....")
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3