首頁 > 後端開發 > Golang > 主體

如何在非 HTTP 上下文中從追蹤 ID 建構 Span?

Susan Sarandon
發布: 2024-10-28 03:06:31
原創
815 人瀏覽過

How to Construct Spans from Trace IDs in Non-HTTP Contexts?

從非HTTP 上下文中的追蹤ID 構造Span

在非HTTP 上下文中使用標頭傳播追蹤時,您需要手動構造使用提供的追蹤和跨度ID 進行跨度。以下是實現此目的的方法:

訂閱者端:

在處理帶有追蹤和跨度標頭的傳入訊息的函數內部:

  1. 提取標頭中的追蹤和跨度ID。
  2. 使用trace.TraceIDFromHex() 和trace.SpanIDFromHex() 函式將字串ID 轉換為適當的型別。
  3. 建構一個trace.SpanContext 透過提供提取的追蹤 ID、跨度 ID 和追蹤標誌。
  4. 使用 context.Background() 使用新建立的跨度上下文豐富當前上下文,然後使用 trace.ContextWithSpanContext()。
  5. 使用豐富的上下文和適當的名稱開始一個新的範圍。

範例:

<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>
登入後複製

在此範例中,NewRequest 是一個自訂類型,包含追蹤和跨度 ID。 handleIncomingMessage 函數採用 NewRequest 結構作為輸入,並使用提供的追蹤和跨度 ID 建立一個跨度。

注意: 如果提供的 Span 的 IsRemote 字段,請確保不會建立新的 Span context 設定為 true,因為這表示該跨度已遠端匯出。

以上是如何在非 HTTP 上下文中從追蹤 ID 建構 Span?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!