全部產品
Search
文件中心

Application Real-Time Monitoring Service:ARMS支援的Trace上下文傳播協議

更新時間:Oct 21, 2026

本文介紹ARMS支援的多種Trace上下文傳播協議。

EagleEye協議

EagleEye協議是ARMS自研的Trace上下文傳播協議,在阿里雲內部被廣泛使用。

Trace上下文中傳播的協議頭:

  • EagleEye-TraceID:隨機32位字串。

  • EagleEye-RpcID:代表Span層級關係,例如:0、0.1、0.2、0.1.1,其中0是0.1、0.2的父Span,0.1是0.1.1的父Span。

  • EagleEye-SpanID:隨機Long型整數,相容開源冗餘欄位。

  • EagleEye-pSpanID:隨機Long型整數,相容開源冗餘欄位。

  • EagleEye-Sampled:Trace是否採樣。

  • EagleEye-pAppName:上遊應用。

  • EagleEye-pRpc:上遊應用介面。

  • EagleEye-UserData:需要在Trace上下文中傳播的Baggage,格式:k1=v1&k2=v2。

W3C協議

W3C Trace Context 規範定義了跨服務傳播追蹤內容相關的標準格式。

Trace中使用的協議頭:

  • traceparent:格式:version-trace-id-parent-id-trace-flags。版本為 00 時,version、trace-id、parent-id 和 trace-flags 分別為 2、32、16、2 個小寫十六進位字元;parent-id 是調用方 Span ID;trace-flags 包含 sampled 標誌位。例如:00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01。

  • tracestate:用於傳遞廠商專用的追蹤狀態,與 traceparent 配合使用。多個成員使用英文逗號(,)分隔,例如:vendor1=value1,vendor2=value2。

    tracestate 與 Baggage 是不同概念。W3C Baggage 使用獨立的 baggage HTTP Header 傳遞使用者自訂的跨服務上下文,多個條目用英文逗號分隔,例如:baggage: tenant_id=t1,region=cn。此處說明的是 W3C 標準格式,不代表所有 ARMS 探針版本預設啟用或支援 Baggage;實際支援以對應探針實現和配置為準。

Zipkin協議

開源專案Zipkin使用的協議。

Trace中使用的協議頭:

  • X-B3-TraceId:32位TraceId。例如:0af7651916cd43dd8448eb211c80319c。

  • X-B3-SpanId:16位SpanId。例如:b7ad6b7169203331。

  • X-B3-ParentSpanId:16位ParentSpanId。例如:b7ad6b7169203331。

  • X-B3-Sampled:採樣標識。例如:0不採樣,1採樣。

  • baggage-:需要在Trace上下文中傳播的Baggage。例如:baggage-k1=v1,baggage-k2=v2。

Jaeger協議

開源專案Jaeger使用的協議。

Trace中使用的協議頭:

  • uber-trace-id:格式:traceId:spanId:parentSpanId:flag。例如:0af7651916cd43dd8448eb211c80319c:b7ad6b7169203331:b7ad6b7169203331:1。

  • uberctx-:需要在Trace上下文中傳播的Baggage。例如:uberctx-k1=v1,uberctx-k2=v2。

SkyWalking協議

開源專案SkyWalking的Trace上下文傳播協議。

  • sw8:由8個欄位組成,各欄位之間通過短劃線(-)分隔。頭部值的最大長度(預設)小於2 K。 頭部值包含以下欄位,所有字串類型的值都需通過BASE64編碼。

    必須項:

    • 採樣(Sample):0或1。0表示上下文存在,但是可以忽略;1表示此追蹤需要採樣並發送到後端。

    • 追蹤標識(Trace Id):字串(BASE64編碼),由英文半形句號(.)分隔的三個Long類型值,表示此追蹤的唯一標識。

    • 父追蹤段ID(Parent trace segment Id):字串(BASE64編碼),全域唯一。

    • 父Span標識:從0開始的整數。此Span ID指向父追蹤段中的Span。

    • 父服務:字串(BASE64編碼),長度不應小於或等於50個UTF-8編碼的字元。

    • 父服務執行個體標識:字串(BASE64編碼),長度不應小於或等於50個UTF-8編碼的字元。

    • 父服務的端點:字串(BASE64編碼),父追蹤段中第一個入口Span的操作名,長度不應小於或等於50個UTF-8編碼的字元。

    • 本請求的目標地址:字串(BASE64編碼),用戶端用於訪問目標服務的網路地址(網路地址格式不一定是IP + 連接埠)。

    sw8樣本: 1-TRACEID-SEGMENTID-3-PARENT_SERVICE-PARENT_INSTANCE-PARENT_ENDPOINT-IPPORT。

  • sw8-x:各欄位之間通過短劃線(-)分隔,欄位可擴充。

    追蹤模式可設定為空白、0或1,預設為空白或0,表示上下文中產生的所有Span將會被跳過分析。上下文在預設情況下傳播到上遊,除非在跟蹤過程中被更改。

ARMS Trace上下文傳播協議選擇策略

預設情況下,ARMS探針會根據一次請求的Header中是否包含指定協議頭來選擇對應的Trace上下文傳播協議。 此處以鏈路A>B>C情境為例,A、B、C分別是不同的應用,當它們收到一個請求時,會依次按照下述邏輯選擇Trace上下文傳播協議:

  1. 掃描請求的所有Header,查看是否包含某協議對應的協議頭。

    • 對於4.5.x及以上版本探針,會按照W3C(OpenTelemetry)、EagleEye、Skywalking、Jaeger、Zipkin的順序尋找。

    • 對於4.x~4.4.x版本探針, 會按照EagleEye、W3C(OpenTelemetry)、Skywalking、Jaeger、Zipkin的順序尋找。

    • 對於4.x以下版本探針,會按照EagleEye、Jaeger、Zipkin、SkyWalking、W3C(OpenTelemetry)的順序尋找。

    若發現存在某Trace協議約定的協議頭,則進行第2步,否則,進行第3步。

  2. 當存在某個協議約定的協議頭時,首先按照該協議從請求中還原Trace上下文,並且後續調用下遊應用也使用該協議傳播Trace上下文。

  3. 當請求中不存在任何有效協議頭,則建立一個新的Trace上下文,且後續按照當前優先順序最高的協議傳播Trace上下文。預設優先順序最高的協議是EagleEye協議,您可以在自訂配置頁面的Trace上下文傳播通訊協定設定地區修改協議優先順序。