在生產環境中,引發應用異常(如耗時突增、錯誤率突增)的原因有很多,常見的包括流量不均、單機故障、程式異常和相依元件故障等。在新應用上線或大促備戰前通常建議做一次系統性的效能調優,分析當前系統存在哪些效能瓶頸,梳理出常出錯的或耗時較高的介面和組件進行最佳化。本文介紹如何使用ARMS調用鏈分析的錯/慢Trace分析功能,定位系統或應用產生錯、慢調用的原因,協助您排查問題、定位系統效能瓶頸。
前提條件
已為應用安裝探針,具體操作,請參見應用監控接入概述。
已切換至新版控制台。
體驗Demo
通過錯Trace分析功能排查錯調用根因
步驟一:定位錯調用發生時間
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列單擊調用鏈分析。
說明僅新版控制台支援進入調用鏈分析頁面,切換新版控制台的操作請參見前提條件。
可以發現樣本應用mall-gateway在15:20~15:28時間段出現了一些HTTP錯誤的調用。
修改查詢時間段為HTTP錯誤發生的時間,開始排查問題。
步驟二:定位錯誤調用所在的介面或組件
在錯/慢Trace分析頁簽,可以發現錯Trace主要集中在/components/api/v1/mall/product介面上,且全都是500錯誤。
排查/components/api/v1/mall/product介面
在下方圖表中單擊spanName: /components/api/v1/mall/product。
此時調用鏈分析會自動將
serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product"
設定為篩選條件。可以發現/components/api/v1/mall/product介面的調用鏈全都出錯了。
在列表頁簽,單擊任意Trace右側的詳情,可以查看錯誤詳情。
通過慢Trace分析功能梳理慢介面
步驟一:定位慢調用發生時間
登入ARMS控制台,在左側導覽列選擇 。
在應用列表頁面頂部選擇目標地區,然後單擊目標應用程式名稱。
說明語言列的表徵圖含義如下:
:接入應用監控的Java應用。
:接入應用監控的Golang應用。
-:接入Managed Service for OpenTelemetry的應用。
在上方導覽列單擊調用鏈分析。
可以發現樣本應用mall-user-server在15:40~15:49時間段存在許多5s以上的慢調用。
修改查詢時間段為慢調用發生的時間。
在錯/慢Trace分析頁簽修改耗時對比臨界值為5000ms,開始排查問題。
步驟二:定位慢調用所在的介面或組件
在錯/慢Trace分析頁簽,可以發現慢Trace主要集中在介面名為/components/api/v1/http/success、上報協議為EagleEye,以及命名空間為arms-test的Span上,依次對它們進行排查。
排查/components/api/v1/http/success介面
在下方圖表中單擊spanName: /components/api/v1/http/success。
此時調用鏈分析會自動將serviceName="mall-user-server" AND spanName="/components/api/v1/http/success"
設定為篩選條件。
可以發現,在該篩選條件下,每一次調用耗時都大於5s,/components/api/v1/http/success介面即為慢調用根因。
在耗時百分位地區同樣可以發現調用平均耗時大於5s。
排查attributes._arms.trace.protocol.type=EagleEye的Span
在下方圖表中單擊attributes._arms.trace.protocol.type: EagleEye。
此時調用鏈分析會自動將serviceName="mall-user-server" AND attributes._arms.trace.protocol.type="EagleEye"
設定為篩選條件。
可以發現,在該篩選條件下,慢Trace的也指向了/components/api/v1/http/success介面。
將/components/api/v1/http/success介面加入篩選條件中,可以發現每一次調用的耗時都大於5秒。
在耗時百分位地區同樣可以發現調用平均耗時大於5s。
排查命名空間為arms-test的Span
在serviceName="mall-user-server" AND attributes.namespace="arms-test"
篩選條件下,可以發現,慢Trace的依然指向/components/api/v1/http/success介面。
將/components/api/v1/http/success介面加入篩選條件中,可以發現每一次調用的耗時都大於5秒。
經過上述的排查,可以發現慢調用都來自於介面/components/api/v1/http/success, attributes._arms.trace.protocol.type="EagleEye"和arms-test命名空間自身都沒有問題,它們中出現了慢調用是因為/components/api/v1/http/success介面服務部署在arms-test命名空間,且它的調用鏈上報協議類型為EagleEye。