AIOps 智能運維:有沒有比專家經驗更優雅的錯/慢調用分析工具?

作者:圖楊

工程師小 A 剛剛接手他們公司最核心的電商系統的運維工作,小 A 發現,在生產環境中,系統明明運行得非常穩定,但是總會出現一些“詭異”的情況。比如:

  1. 偶爾會一些錯誤調用,但是,還沒來得及修,系統又莫名奇妙地恢復正常。
  2. 應用的平均響應時間很短,但是總會有一些響應時間非常長的離羣調用,每次花很多時間來分析這些離羣點,但是每次分析出來的結果都不一樣,有時候是數據庫問題,有時候是消息隊列的問題,原因千奇百怪,很難逐一排查。

如果是經驗豐富的工程師,對系統非常非常熟悉,也許能夠依靠經驗來解決這些“詭異”的問題。但是,對於一個大型公司來說,他們的系統已經迭代了十幾年,幾百個人貢獻過代碼,很難再出現對系統非常熟悉的工程師了。所以,每次系統出現問題,小 A 都需要用多種工具,花費大量時間來排查,還要面對客戶時不時的投訴;每一次 618 和雙十一前夕,大家都戰戰兢兢,求神拜佛,祈禱千萬不要在關鍵時刻發生異常。

那麼,除了專家經驗和對好幾十種可能性逐一排查之外,有沒有更優雅的,快速定位錯/慢 Trace 產生原因的工具?

答案是有的,阿里雲應用實時監控服務 ARMS 最近推出了錯/慢 Trace 分析功能(Trace 是調用鏈,指從用戶發起服務請求到結束,按順序記錄整個請求鏈路的相關數據,關於 Trace 的介紹可以看 [ 1] )。我們會對錯/慢 Trace 和正常 Trace 在每一個維度進行對比分析,從而幫助用戶挖掘錯/慢 Trace 的的共有特徵。

該功能不需要任何專家經驗,即使小 A 對系統不那麼熟悉,他也可以利用這個功能,在大促前夕梳理一下經常出錯,或者響應時間遠高於平均值的接口和機器,有針對性的對系統進行優化。在這篇文章中,我們將介紹:

  1. ARMS 錯/慢 Trace 分析功能基本原理;
  2. 該功能能夠覆蓋哪些異常 Trace 根因;
  3. 最後會介紹一些最佳實踐案例。

該功能已正式發佈,產品文檔 [ 2] 和最佳實踐案例 [ 3] 均已上線,文章的最後有免登錄 demo 的體驗鏈接,歡迎大家來體驗。

ARMS 錯/慢 Trace 分析功能基本原理

在生產環境下,影響調用時延以及引發錯誤的因素有很多,流量不均、單機故障、程序異常、依賴組件瓶頸等。友商和學術界常用的方式是利用 ML、LLM 對大量 Trace 進行訓練,再來對新來的異常 Trace 進行分類,以此來定位根因。但是在實際生產環境中,不同系統的 Trace 特徵完全不同,而且隨着系統的更新,Trace 的特徵以及引發錯/慢 Trace 的根因也會不斷改變。因此,對於商業可觀測產品而言,這種基於歷史數據對新數據進行判斷的方法,基於我們淺薄的認知,現有的算法可能還不夠成熟。

爲了避免應用間的差異對錯/慢 Trace 根因定位準確率的影響,我們的方案是:

“將錯/慢 Trace 和同一系統中,正常 Trace 從各個維度進行對比,識別出錯/慢 Trace 的特徵,引導用戶不斷探索,最終定位異常根因。”

舉個例子,當用戶收到了大量接口報錯的告警,但是不知道引發異常的根因是什麼。在這種情況下,ARMS 錯/慢調用分析功能,會對一個系統中 1000 條錯 Trace 樣本和 1000 條正常 Trace 樣本從各個維度進行比較,發現幾乎所有的錯 Trace 都集中在應用 "mall-gateway"、主機 “10.0.0.47” 和接口 "components/api/v1/mall/product" 上,並且經過它們的,基本沒有正常 Trace,那麼和應用名 ="mall-gateway"、主機 Ip=“10.0.0.47” 和接口名 ="components/api/v1/mall/product" 的 Trace 值得進一步排查,因爲很有可能就是部署在這臺主機上的這個接口出現了問題。

並且,ARMS 支持用戶自定義要分析和對比的 Trace,只需要在調用鏈分析的篩選框修改條件即可,比如可以把 serviceName="mall-gateway" 放到篩選框中,對該應用的錯 Trace 進行進一步分析。

您可以不斷地重複這個過程,直到您定位到系統的異常。

ARMS 錯/慢 Trace 分析功能能夠覆蓋哪些異常 Trace 根因?

我們定位根因的邏輯是,對批量錯/慢 Trace 和批量正常 Trace 在各個維度上進行比較,所以理論上,只要是調用鏈上擁有的維度能表徵的信息,我們都能定位出來,包括但不限於:

  1. 主機異常
  2. 接口異常
  3. 慢 SQL
  4. 消息隊列異常等等

最佳實踐

如何通過錯 Trace 分析功能,排查錯調用根因?

Step 1:發現 13:21 到 13:28,應用 "mall-gateway" 出現了一些 Http 錯誤的調用

Step 2:修改時間窗口到批量 Http 錯誤發生的時間段,開始排查問題

Step 3:進入錯 Trace 分析頁面

發現:錯調用集中在 3 個維度:接口名 = "/components/api/v1/mall/product",IP=“10.0.0.47” 以及 IP=“10.0.0.37”,下面依次進行排查。

Step 3.1:排查 spanName="/components/api/v1/mall/product"

發現:接口 "/components/api/v1/mall/product" 的錯調用幾種在 3 個 Ip 中,並且,路過這些 IP 的,全部都是錯誤調用。

這說明這三個 Ip 對應的主機很可能出現了異常,下面進行進一步排查。

Step 3.1.1:

serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product" AND ip="10.0.0.47"

發現該篩選條件下,每一次調用都是錯誤調用,這說明主機 "10.0.0.47" 中,應用 "mall-gateway" 的接口 "/components/api/v1/mall/product"。在該時段確實出現了異常。

可以回到調用鏈列表頁面進一步確認。

可以點擊任意一條 Trace 查看詳情。

Step 3.1.2:

排查 serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product" AND ip="10.0.0.50"

類似地,發現該篩選條件下,每一次調用都是錯誤調用。

Step 3.1.3:

排查 serviceName="mall-gateway" AND spanName="/components/api/v1/mall/product" AND ip="10.0.0.37"

......

Step 3.2:排查 Ip ="10.0.0.50" 和 Ip = "10.0.0.37"

其實聰明的讀者應該已經發現了問題,剛剛我們在排查接口 "/components/api/v1/mall/product" 時就已經發現了這兩臺主機有問題。但是我們還是可以繼續排查。

發現:對 Ip ="10.0.0.47" 或  Ip = "10.0.0.37" 的錯調用開始下鑽分析,也指向了接口 "/components/api/v1/mall/product",並且這些錯誤都是 500 錯誤。

這和上一步的排查指向了同樣的根因,這說明部署在主機 "10.0.0.47" 以及 "10.0.0.37" 上,接口 "/components/api/v1/mall/product" 相關的程序出現了錯誤,建議查一下相關代碼近期的變更。

如何通過慢 Trace 分析功能,梳理慢接口?

Step 1:發現應用 serviceName="mall-user-server" 中,在 13:40 到 13:49 存在許多 5s 以上的慢調用

Step 2:先關注 15:40 到 15:49,5s+ 的 Trace,將【耗時對比臨界值】改成 5s

發現耗時大於 5s 的 Trace 集中在接口 "/components/api/v1/local/success"、"/components/api/v1/http/success" 和 Ip="10.0.0.44" 的主機中。

Step 3:依次排查 2 個接口和一個 Ip 地址

Step 3.1:排查 serviceName="mall-user-server" AND spanName="/components/api/v1/local/success"

發現:該篩選條件下,每一次調用耗時都大於 5s,它是一個慢接口,已經定位到根因。

回 Trace 詳情頁面進一步確認,發現該篩查條件下,平均耗時就大於 5s。

Step 3.2:排查 serviceName="mall-user-server" AND spanName="/components/api/v1/http/success"

發現:該篩選條件下,每一次調用耗時都大於 5s,它是一個慢接口。

Step 3.3:排查 serviceName="mall-user-server" AND ip="10.0.0.44"

發現:該篩選條件下,慢 Trace 的也指向了接口 "/components/api/v1/http/success",和 Step 3.2 重合了,可以推斷接口 "/components/api/v1/http/success" 部署在主機 "10.0.0.44" 上,它出現了一些異常。

當然用戶還可以進一步往下探索。

Demo 體驗鏈接

https://www.aliyun.com/product/arms?spm=5176.26798190.J_8765075780.1.7b673fd69umBcT

Step 1:切換成新版控制檯

Step 2:點擊調用鏈分析按鈕

總結

在這篇文章中,我們試圖幫助小 A 排查系統中,“詭異”的錯/慢調用產生原因。我們給出了一種,比專家經驗更優雅的,排查問題的工具—— ARMS 錯/慢 Trace 分析,並給出了最佳實踐教程。

通過使用 ARMS 錯/慢 Trace 分析功能,系統發生故障的時候,小 A 可以不再依靠“直覺”來排查問題;在大促前夕,也可以梳理出慢調用接口、容易引發錯誤的主機等,這樣工程師們能夠更優針對性地對系統進行優化。

這樣,工程們在排查問題上花的時間少一點,專注在業務代碼上的時間多一點,把核心業務做大做強。

歡迎加入我們的 AIOps 客戶交流釘釘羣(羣號:25125004458):

相關鏈接:

[1] 基礎篇丨鏈路追蹤(Tracing)其實很簡單

[2] 查看應用的調用鏈信息_應用實時監控服務(ARMS)-阿里雲幫助中心

https://help.aliyun.com/zh/arms/application-monitoring/user-guide/call-chain-analysis

[3] 通過錯/慢調用鏈排查應用產生異常的原因_應用實時監控服務(ARMS)-阿里雲幫助中心

https://help.aliyun.com/zh/arms/application-monitoring/use-cases/troubleshooting-application-anomalies-through-error-slow-trace-analysis

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章