調用鏈
更新時間 2024-10-18 15:50:36
最近更新時間: 2024-10-18 15:50:36
分享文章
本文主要介紹調用鏈
在企業微服務之間調用復雜的場景下,APM Agent會抽樣一些請求,攔截對應請求及后續一系列的調用信息。比如在A調用B然后調用C的場景,請求進入A后,APM系統會采用智能采樣算法,決定是否對請求進行調用鏈跟蹤。
智能采樣算法
APM系統會采用智能采樣算法,決定是否對請求進行調用鏈跟蹤。
- 如果決定要跟蹤,那么就會生成一個TraceID,攔截A下面的一些重要方法(一般具有樹結構父子關系)的詳細信息(稱為event),同時APM會將TraceID透傳到B,B也會攔截下面的重要方法,同時透傳TraceID到C,C也跟B和A類似。每個節點分別上報event信息,通過TraceID形成關聯,這樣通過TraceID就可以查看整個請求的調用詳情。
- 如果決定不跟蹤,那么就不會生成TraceID,B服務由于沒有收到TraceID,自身也會產生跟A服務一樣的算法,決定是否要進行調用鏈跟蹤。
- 數據上報后,APM系統除了會存儲所有event詳情,同時會將每個服務的根event(稱為span)信息額外存儲起來,用于后續調用鏈搜索。用戶一般是先搜索到span信息,然后根據span信息上附帶的TraceID獲取到總體調用鏈詳情。
- 調用鏈采樣策略系統默認是智能采樣,url分為錯誤url、慢url(默認800ms、用戶自定義配置)、正常url三種url,每種url調用鏈數據的采樣率單獨計算。APM的統計數據是一分鐘采集上報一次,第一個采集周期所有url調用鏈數據都按正常url采樣。第二個采集周期時,根據上一個采集周期的統計數據,將url分類為錯誤url、慢url、正常url三種url。
- 錯誤url的采樣率:cpu小于30%每分鐘采集100條,cpu大于或等于30%小于60%每分鐘采集50條,cpu大于或等于60%每分鐘采集10條,每條url至少采集2條。
- 慢url的采樣率:cpu小于30%每分鐘采集100條,cpu大于或等于30%小于60%每分鐘采集50條,cpu大于或等于60%每分鐘采集10條,每條url至少采集2條。
- 正常url的采樣率:cpu小于30%每分鐘采集20條,cpu大于或等于30%小于60%每分鐘采集10條,cpu大于或等于60%每分鐘采集5條,每條url至少采集1條。
上述調用鏈算法優點是,一旦決定產生調用鏈信息,那么鏈路是完整的,幫用戶做正確決策。對于大量調用的url,可能會采集不到異常請求,可以通過異常監控的指標采集等其他方式來定位系統中的異常。
調用鏈搜索
調用鏈搜索主要是搜索span信息,就是一個節點的根event。一個調用鏈可能從多個環境下面搜索到。比如A調用B調用C的場景,對于同一個調用鏈路,從A、B、C可能都可以搜索到同一個調用鏈。
1、登錄管理控制臺。
2、單擊左側
,選擇“應用性能管理 APM”,進入APM服務頁面。
3、在左側導航欄選擇“應用監控 > 調用鏈”,進入調用鏈界面。
4、輸入如下查詢條件查詢具體的調用鏈列表,也可在界面下方新增自定義查詢條件。
表 調用鏈查詢條件
| 查詢條件 | 具體含義 | 必填/選填 |
|---|---|---|
| 應用 | 調用鏈所在應用。 | 必填 |
| 區域 | 調用鏈所在區域。 | 必填 |
| 組件 | 調用鏈所在組件。 | 選填 |
| 環境 | 調用鏈所在環境。 | 選填 |
| 實例 | 調用鏈所在實例。 | 選填 |
| URL | 調用鏈的URL,分為Rest URL和Real URL兩種搜索條件:Rest URL為restful風格的URL,URL中帶有變量名稱,如/apm/get/{id};Real URL為實際訪問的URL。 | 選填 |
| 精確 | 對URL是否精確匹配,開啟狀態下為精確查詢URL,不開啟則進行模糊查詢。 | 選填 |
| 調用方法 | 調用鏈的HttpMethod。 | 選填 |
| 狀態碼 | 調用鏈返回的HTTP狀態碼。 | 選填 |
| 響應時間 | 調用鏈的響應時間范圍,可以填寫最小響應時間和最大響應時間搜索調用鏈,兩個值都可以為空。 | 選填 |
| 是否異常 | 調用鏈是否有異常。 | 選填 |
| Trace ID | 調用鏈的TraceID,填寫該搜索條件后,其他搜索條件全部失效,只根據該TraceID搜索。 | 選填 |
| 自定義參數 | 已配置url監控項的攔截header指定key值、攔截url參數指定key值、攔截cookie指定key值參數后,在這里可以設置key=value進行搜索。 | 選填 |
| 全局Trace ID | 調用鏈的全局TraceID,填寫該搜索條件后,其他搜索條件全部失效,只根據該全局TraceID搜索。 | 選填 |
| 應用碼 | 已配置url監控項的業務code采集長度限制、解析業務code的key、業務code的正確值參數后,會采集響應的應用碼,這這里可以根據應用碼進行搜索。 | 選填 |
查看調用鏈詳情
根據搜索條件查詢出來的調用鏈列表可以查看調用鏈的基本信息
在查詢后的調用鏈列表中,單擊待查看的調用鏈前的
,查看該調用鏈基本信息,如下圖所示。
圖調用鏈基本信息


表中標識的具體參數所代表的含義如下:
- 調用鏈的HttpMethod
- 調用鏈的RestURL,Rest URL為restful風格的URL,URL中帶有變量名稱,如/apm/get/{id};單擊該URL可以跳轉到調用鏈的詳情頁面
- 調用鏈的開始時間
- 調用鏈返回的HTTP狀態碼
- 調用鏈的響應時間
- 調用鏈的TraceID
- 調用鏈所在組件
- 調用鏈所在環境
- 調用鏈所在實例的主機名
- 調用鏈所在實例的IP
- 調用鏈的實際URL
用戶也可以從一些監控項視圖頁面,比如Url監控項的table視圖,單擊具體的Url跳轉過來,這樣就已經預先填寫好搜索條件,幫助用戶更快速搜索出所需要的調用鏈信息。
調用鏈詳情頁面可以查看調用鏈的完整鏈路信息,包含本地方法堆棧和相關遠程調用的調用關系
單擊調用鏈名稱,可查看調用鏈詳細信息,如下圖所示。
- 上半部分為調用鏈完整鏈路的時序圖,展示組件之間的完整調用關系,內部包含一次調用對應的客戶端和服務器端的信息,然后線條越在下面,越晚發生調用。
- 下半部分為調用鏈詳細的方法堆棧,每一行代表一個方法調用,展示了調用鏈內部方法的詳細調用關系。默認只展示javaagent支持的組件方法,如需展示應用方法,可以在JavaMethod配置中配置需要攔截的應用方法。
圖 調用關系

表中標識的具體參數所代表的含義如下:
- 調用鏈的時序圖中調用接口所屬的組件和環境。
- 數字為接口調用的客戶端響應時間,單位ms,具可將鼠標指針放置在該位置進行查看。
- 數字為接口調用的服務端響應時間,單位ms。
- 調用鏈方法堆棧中該方法對應的關鍵參數數據,如tomcat入口方法展示實際url、mysql的sql調用方法則展示具體執行sql。
- 調用鏈方法的擴展數據,一般展示該方法相關的參數信息。
- 調用鏈是“樹”狀結構,深度表示“樹”狀結構的層數。如圖所示。
圖 深度
