詳解 Apache SkyWalking 跨進程傳播協議

簡介

SkyWalking 跨進程傳播協議是用於上下文的傳播,本文介紹的版本是3.0,也被稱為為sw8協議。

Header項

Header應該是上下文傳播的最低要求。

  • Header名稱:sw8.
  • Header值:由-分隔的8個欄位組成。Header值的長度應該小於2KB。

Header值

Header值中具體包含以下8個欄位:

  1. 取樣(Sample),0 或 1,0 表示上下文存在, 但是可以(也很可能)被忽略;1 表示這個追蹤需要取樣並發送到後端。
  2. 追蹤ID(Trace Id),是 BASE64 編碼的字元串,其內容是由 . 分割的三個 long 類型值, 表示此追蹤的唯一標識。
  3. 父追蹤片段ID(Parent trace segment Id),是 BASE64 編碼的字元串,其內容是字元串且全局唯一。
  4. 父跨度ID(Parent span Id),是一個從 0 開始的整數,這個跨度ID指向父追蹤片段(segment)中的父跨度(span)。
  5. 父服務名稱(Parent service),是 BASE64 編碼的字元串,其內容是一個長度小於或等於50個UTF-8編碼的字元串。
  6. 父服務實例標識(Parent service instance),是 BASE64 編碼的字元串,其內容是一個長度小於或等於50個UTF-8編碼的字元串。
  7. 父服務的端點(Parent endpoint),是 BASE64 編碼的字元串,其內容是父追蹤片段(segment)中第一個入口跨度(span)的操作名,由長度小於或等於50個UTF-8編碼的字元組成。
  8. 本請求的目標地址(Peer),是 BASE64 編碼的字元串,其內容是客戶端用於訪問目標服務的網路地址(不一定是 IP + 埠)。

Header值示例

上面的說明太幹了,我們來舉一個具體的例子,可以更好的理解。

有兩個服務,分別叫onemore-aonemore-b,用戶通過HTTP調用onemore-a/onemore-a/get,然後onemore-a/onemore-a/get又通過HTTP調用onemore-b/onemore-b/get,流程圖就是這樣的:

那麼,我們在onemore-b/onemore-b/get的Header中就可以發現一個叫做sw8的key,其值為:

1-YTRlYzZmYzhjY2FiNGJiNGI2ODIwNjQ2OThjYzk3ZTYuNzQuMTYyMTgzODExMDQ1NTAwMDk=-YTRlYzZmYzhjY2FiNGJiNGI2ODIwNjQ2OThjYzk3ZTYuNzQuMTYyMTgzODExMDQ1NTAwMDg=-2-b25lbW9yZS1h-ZTFkMmZiYjYzYmJhNDMwNDk5YWY4OTVjMDQwZTMyZmVAMTkyLjE2OC4xLjEwMQ==-L29uZW1vcmUtYS9nZXQ=-MTkyLjE2OC4xLjEwMjo4MA==

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注後回復「電子書」,免費獲取12本Java必讀技術書籍。

-字元進行分割,可以得到:

  1. 1,取樣,表示這個追蹤需要取樣並發送到後端。
  2. YTRlYzZmYzhjY2FiNGJiNGI2ODIwNjQ2OThjYzk3ZTYuNzQuMTYyMTgzODExMDQ1NTAwMDk=,追蹤ID,解碼後為:a4ec6fc8ccab4bb4b682064698cc97e6.74.16218381104550009
  3. YTRlYzZmYzhjY2FiNGJiNGI2ODIwNjQ2OThjYzk3ZTYuNzQuMTYyMTgzODExMDQ1NTAwMDg=,父追蹤片段ID,解碼後為:a4ec6fc8ccab4bb4b682064698cc97e6.74.16218381104550009
  4. 2,父跨度ID。
  5. b25lbW9yZS1h,父服務名稱,解碼後為:onemore-a
  6. ZTFkMmZiYjYzYmJhNDMwNDk5YWY4OTVjMDQwZTMyZmVAMTkyLjE2OC4xLjEwMQ==,父服務實例標識,解碼後為:[email protected]
  7. L29uZW1vcmUtYS9nZXQ=,父服務的端點,解碼後為:/onemore-a/get
  8. MTkyLjE2OC4xLjEwMjo4MA==,本請求的目標地址,解碼後為:192.168.1.102:80

擴展Header項

擴展Header項是為高級特性設計的,它提供了部署在上游和下游服務中的探針之間的交互功能。

  • Header名稱:sw8-x
  • Header值:由-分割,欄位可擴展。

文章持續更新,微信搜索「萬貓學社」第一時間閱讀,關注後回復「電子書」,免費獲取12本Java必讀技術書籍。

擴展Header值

當前值包括的欄位:

  1. 追蹤模式(Tracing Mode),空、0或1,默認為空或0。表示在這個上下文中生成的所有跨度(span)應該跳過分析。在默認情況下,這個應該在上下文中傳播到服務端,除非它在跟蹤過程中被更改。

微信公眾號:萬貓學社

微信掃描二維碼

關注後回復「電子書」

獲取12本Java必讀技術書籍