」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何從字串 TraceID 建立 OpenTelemetry Span?

如何從字串 TraceID 建立 OpenTelemetry Span?

發佈於2024-11-05
瀏覽:464

How Can You Create an OpenTelemetry Span from a String TraceID?

從字串 TraceID 建構 OpenTelemetry Span

要建立 Span 之間的父子關係,必須在上下文傳播不可行的情況下使用標頭。在這種情況下,追蹤 ID 和跨度 ID 包含在訊息代理程式的標頭中,這允許訂閱者使用父追蹤 ID 建立新的跨度。

解決方案

以下步驟可以使用追蹤ID 在訂閱者端建立上下文或跨度:

  1. 以追蹤ID 作為參數定義一個函數:
func constructNewSpanContext(traceID string) (spanContext trace.SpanContext, err error) {
    traceID, err := trace.TraceIDFromHex(traceID)
    if err != nil {
        return trace.SpanContext{}, err
    }
    return trace.NewSpanContext(trace.SpanContextConfig{
        TraceID: traceID,
    }), nil
}
  1. 通道內部,呼叫函數建構span上下文:
spanContext, err := constructNewSpanContext(request.TraceID)
if err != nil {
    log.Fatal(err)
}
  1. 使用建構的跨度上下文豐富上下文:
requestContext := context.Background()
requestContext = trace.ContextWithSpanContext(requestContext, spanContext)
  1. 使用豐富的上下文建立新的範圍:
requestInLoopSpan, _ := otel.Tracer("requestInLoop").Start(requestContext, "requestInLoopSpan")
requestInLoopSpan, _ := oteler( " requestInLoop").Start(requestContext, "requestInLoopSpan")

透過以下步驟,您可以使用從訊息標頭中提取的trace ID在訂閱者端成功建構一個新的span,從而確保span之間的層次關係跨距。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3