全部產品
Search
文件中心

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

更新時間:Sep 05, 2025

本文介紹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中使用的協議頭:

  • traceparent:格式:兩位版本號碼-32位traceId-16位parentSpanId-採樣標誌。例如:00-0af7651916cd43dd8448eb211c80319c-b7ad6b7169203331-01

  • tracestate:需要在Trace中透傳的Baggage。格式:k1=v1&k2=v2

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.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上下文傳播通訊協定設定地區修改協議優先順序。