Erstellen eines OpenTelemetry-Spans aus einer String-TraceID
Um auf der Abonnentenseite mithilfe der TraceID einen neuen Span zu erstellen, kann man nicht direkt einen erstellen span mithilfe der empfangenen TraceID-Zeichenfolge. Stattdessen müssen Sie einen [trace.SpanContext](https://pkg.go.dev/go.opentelemetry.io/otel/trace#SpanContext) mit der bereitgestellten TraceID erstellen.
Konstruieren Sie den SpanContext
Um den SpanContext zu generieren, wird empfohlen, den Code in eine separate Funktion zu packen, wie zum Beispiel diese:
<code class="go">func constructNewSpanContext(request NewRequest) (spanContext trace.SpanContext, err error) { // Assuming the trace and span IDs are provided as strings in request struct. var traceID trace.TraceID traceID, err = trace.TraceIDFromHex(request.TraceID) if err != nil { fmt.Println("error:", err) return } var spanID trace.SpanID spanID, err = trace.SpanIDFromHex(request.SpanID) if err != nil { fmt.Println("error:", err) return } spanContextConfig := trace.SpanContextConfig{ TraceID: traceID, SpanID: spanID, // Other TraceFlag bits if desired } spanContext = trace.NewSpanContext(spanContextConfig) return spanContext, nil }</code>
Anreichern eines Kontexts mit dem SpanContext
Sobald der SpanContext erstellt ist, bereichern Sie einen neuen Kontext damit:
<code class="go">spanContext, err := constructNewSpanContext(request) if err != nil { fmt.Println("ERROR:", err) } fmt.Println("IS VALID?", spanContext.IsValid()) // Check if the `spanContext` is valid requestContext := context.Background() requestContext = trace.ContextWithSpanContext(requestContext, spanContext) // Start a new span within the enriched context var requestInLoopSpan trace.Span childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan") requestInLoopSpan.AddEvent("processing....") // Should now work</code>
Durch Ausführen dieser Schritte können Sie mithilfe der erhaltenen TraceID erfolgreich einen neuen Span auf der Abonnentenseite erstellen aus den Anforderungsheadern.
Das obige ist der detaillierte Inhalt vonWie kann ich in Go einen OpenTelemetry Span aus einer Zeichenfolge TraceID erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!