本文介紹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應用。
-:接入可觀測鏈路 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應用。
-:接入可觀測鏈路 OpenTelemetry 版的應用。
在上方導航欄選擇
。在采樣設置區域選擇采樣策略為自適應采樣。
說明修改即時生效,無需重啟應用。
單擊保存。
非頭采樣策略
依靠頭采樣策略難以保證一些符合指定特征的Span數據的采樣,而這種數據往往是用戶關心的。例如有錯慢異常的Span,某些調用量極低的Span,以及用戶自定義的Span等。但是這些策略命中的采樣因為可能發生在鏈路任何位置,無法保證鏈路完整。
小流量采樣
無需用戶配置,自動保證每一個接口每一分鐘至少有一條Trace被采樣。執行采樣策略并命中采樣的Span會攜帶一個Key為sample.reason
,Value為s2
的Attribute。
錯慢異常采樣
使用錯慢異常采樣需確認自定義配置頁面的調用鏈壓縮功能已開啟,該功能默認開啟。
當一次接口的調用滿足下述條件時,該次調用對應的Trace會被采樣。
接口報錯:HTTP類接口響應碼非200,其他接口被埋點的方法拋出異常。
接口內部執行拋出異常:接口內部執行過程中出現異常,但是該異常未拋出到框架的入口埋點。
接口調用耗時高: 接口調用耗時超過自定義配置頁面配置的接口慢調用閾值。
說明如果同時開啟了分位數統計,則當接口調用耗時大于該接口P99分位數時也會被識別為慢調用。
執行采樣策略并命中采樣的Span會攜帶一個Key為sample.reason
,Value為s9
、s11
或s10
的Attribute。具體取值分別對應上面的三個條件。
自定義采樣
當上述采樣策略均無法保證用戶需要的Trace被采樣時,用戶可自定義需要被100%采樣的接口名、接口前綴、接口后綴等。執行采樣策略并命中采樣的Span會攜帶一個Key為sample.reason
,Value為s3
的Attribute。
設置自定義采樣的操作步驟如下:
登錄ARMS控制臺,在左側導航欄選擇 。
在應用列表頁面頂部選擇目標地域,然后單擊目標應用名稱。
說明語言列的圖標含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
:接入應用監控的Python應用。
-:接入可觀測鏈路 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處觸發。
相關文檔
調用鏈采集完成后,您可以基于已存儲的全量鏈路明細數據,自由組合篩選條件與聚合維度進行實時分析。更多信息,請參見調用鏈分析。