本文介紹ARMS支援的多種調用鏈取樣模式,協助您根據自身情境選擇合適的調用鏈取樣模式,從而以較低成本擷取想要的調用鏈資料。
名詞介紹
Span:一次請求的一個具體操作,比如遠程調用入口或者內部方法調用。
RootSpan:一條Trace鏈路中的第一個Span。
LocalRootSpan:一條Trace鏈路在單個應用內的Trace片段的第一個Span。
SpanContext:一次請求追蹤的上下文,用於關聯該次請求下的具體操作。
頭採樣:僅會在RootSpan處執行的採樣策略,一般情況下鏈路是完整的。
非頭採樣:在頭採樣策略未命中的情況下。鏈路任意一個LocalRootSpan處均可能觸發執行的採樣策略,一般情況下無法保證鏈路完整。
採樣策略和採樣標記介紹
ARMS為了命中更多有價值的Trace資料,提供了多種採樣策略,其中包含兩個頭採樣策略和三個非頭採樣策略。
採樣標記
用於在使用EagleEye協議進行跨進程Trace上下文傳遞時記錄是否採樣,對應Header的Key為EagleEye-Sampled,對應的Value取值如下:
s0:不採樣
s1:採樣
用於在執行採樣並命中採樣的LocalRootSpan處記錄採樣原因,會以Attribute的形式儲存在Span中,Key為sample.reason,Value取值如下:
s2:小流量採樣
s3:自訂採樣
s4:固定比例採樣
s5:預留
s6:自適應採樣
s7:預留
s8:基礎版採樣
s9:錯採樣
s10:慢採樣
s11:異常採樣
頭採樣策略
ARMS目前支援兩種頭採樣策略,分別是固定比例採樣和自適應採樣。固定比例採樣是Tracing領域最常見的頭採樣策略,自適應採樣是ARMS自研的一種計費友好的頭採樣策略。
固定比例採樣
現有的預設採樣會在請求入口處根據使用者配置的百分比採樣鏈路。執行採樣策略並命中固定比例採樣的Span會攜帶一個Key為sample.reason
,Value為s4
的Attribute。
設定固定比例採樣的操作步驟如下:
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列選擇
。在採樣設定地區選取項目採樣策略為固定採樣率,在採樣率百分比地區輸入採樣率百分比的數字部分,例如輸入10代表採樣10%。
說明修改即時生效,無需重啟應用。預設為10,調大採樣率會消耗額外的系統資源,建議保持預設值。
單擊儲存。
自適應採樣
由於實際情境下應用不同業務的流量可能差距很大,且讀介面流量往往遠大於寫介面流量。但是讀介面的Trace資料價值一般低於寫介面。為了避免固定比例採樣命中過多大流量低價值Trace資料,ARMS提供了自適應採樣策略。該策略會按照LFU的原則選取當前調用量Top 1000的介面,每個介面的採樣彼此隔離,每秒採樣10條,對於Top 1000以外的介面被統一看作一個Other介面,共用一秒10條Trace的Quota。執行採樣策略並命中採樣的Span會攜帶一個Key為sample.reason
,Value為s6
的Attribute。
設定自適應採樣的操作步驟如下:
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列選擇
。在採樣設定地區選取項目採樣策略為自適應採樣。
說明修改即時生效,無需重啟應用。
單擊儲存。
非頭採樣策略
依靠頭採樣策略難以保證一些符合指定特徵的Span資料的採樣,而這種資料往往是使用者關心的。例如有錯慢異常的Span,某些調用量極低的Span。使用者自訂的Span等。但是這些策略命中的採樣因為可能發生在鏈路任何位置,無法保證鏈路完整。
小流量採樣
無需使用者配置,自動保證每一個介面每一分鐘至少有一條Trace被採樣。執行採樣策略並命中採樣的Span會攜帶一個Key為sample.reason
,Value為s2
的Attribute。
錯慢異常採樣
使用錯慢異常採樣需確認自訂配置頁面的調用鏈壓縮功能已開啟,該功能預設開啟。
當一次介面的調用滿足下述條件時,該次調用對應的Trace會被採樣。
介面報錯:HTTP類介面響應碼非200,其他介面被埋點的方法拋出異常。
介面內部執行拋出異常:介面內部執行過程中出現異常,但是該異常未拋出到架構的入口埋點。
介面耗時超過該介面耗時的P99:該條件需要在自訂配置頁面開啟分位元統計功能。
說明如果沒有開啟分位元統計,則大於應用設定的請求閾值的Trace會被採樣。
執行採樣策略並命中採樣的Span會攜帶一個Key為sample.reason
,Value為s9
、s11
或s10
的Attribute。具體取值分別對應上面的三個條件。
自訂採樣
當上述採樣策略均無法保證使用者需要的Trace被採樣時,使用者可自訂需要被100%採樣的介面名、介面首碼、介面尾碼等。執行採樣策略並命中採樣的Span會攜帶一個Key為sample.reason
,Value為s3
的Attribute。
設定自訂採樣的操作步驟如下:
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列選擇
。在採樣設定地區自訂需要全採樣的介面、介面首碼、介面尾碼。
說明修改即時生效,無需重啟應用。
單擊儲存。
採樣策略工作原理
以A>B>C鏈路為例,一次實際的業務調用產生的Span最後是否上報是由上述的採樣策略共同決定的,具體的決策流程如下圖所示,該決策流程會在請求到達A、B、C處均執行一次,但是根據當前是LocalRootSpan還是RootSpan,某些節點會跳過執行。
流程圖中不同顏色的含義如下:
紫色:標準的頭採樣,只會在鏈路的rootSpan處觸發。該策略只會在A處觸發。
藍色:只要頭採樣未命中,可以在鏈路的任何節點觸發。例如A通過採樣策略決定不採樣,請求到B之後,B會根據自己的自訂採樣和小流量採樣策略重新計算一次是否採樣,如果採樣,會將採樣標傳遞給C。該策略會在A、B、C處觸發。
綠色:只要當前的採樣結果不採樣,可以在鏈路的任何節點觸發,但是不影響之後鏈路,例如A通過採樣策略決定不採樣,請求到B之後,B會根據錯慢採樣策略決定是否採樣,如果採樣,不會把採樣標傳遞給C。該策略會在A、B、C處觸發。
相關文檔
調用鏈採集完成後,您可以基於已儲存的全量鏈路詳細資料,自由組合篩選條件與彙總維度進行即時分析。更多資訊,請參見調用鏈分析。