Opentelemetry でのトレース ID からのスパンの構築
コンテキスト伝播は通常、親トレース ID を取得し、子としてスパンを作成するために使用されます。ただし、メッセージ交換にヘッダーが使用されるシナリオでは、別のアプローチが必要になります。
文字列トレース ID からスパンを作成するには、次の手順に従います。
]トレース ID とスパン ID を解析する関数の構築:
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
}
この関数は、リクエストからトレース ID とスパン ID を抽出し、SpanContext オブジェクトを構築します。
SpanContext を Context に注入します:
spanContext, err := constructNewSpanContext(request)
if err != nil {
fmt.Println("ERROR:", err)
}
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
SpanContext は、トレースの継続を示す、リクエスト コンテキストを強化するために使用されます。
新しいスパン:
var requestInLoopSpan trace.Span
childContext, requestInLoopSpan := otel.Tracer("inboundmessage").Start(requestContext, "requestInLoopSpan")
requestInLoopSpan.AddEvent("processing....")
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3