Heim >Backend-Entwicklung >Golang >Wie konstruiere ich Spans aus Trace-IDs in Nicht-HTTP-Kontexten?
Konstruieren von Spans aus Trace-IDs in Nicht-HTTP-Kontexten
Bei der Weitergabe von Traces mithilfe von Headern in Nicht-HTTP-Kontexten müssen Sie manuell erstellen Spans mithilfe der bereitgestellten Trace- und Span-IDs. So erreichen Sie dies:
Abonnentenseite:
Innerhalb einer Funktion, die eingehende Nachrichten mit Trace- und Span-Headern verarbeitet:
Beispiel:
<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>
In diesem Beispiel ist NewRequest ein benutzerdefinierter Typ, der enthält die Trace- und Span-IDs. Die handleIncomingMessage-Funktion verwendet eine NewRequest-Struktur als Eingabe und erstellt einen Span mit den bereitgestellten Trace- und Span-IDs.
Hinweis: Stellen Sie sicher, dass keine neuen Spans erstellt werden, wenn das IsRemote-Feld des bereitgestellten Spans context ist auf true gesetzt, da dies anzeigt, dass der Span bereits remote exportiert wurde.
Das obige ist der detaillierte Inhalt vonWie konstruiere ich Spans aus Trace-IDs in Nicht-HTTP-Kontexten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!