經過我們工程團隊幾個月的努力,OpenResty XRay 終於可以在沒有人工干預的情況下生成人類可讀的分析報告。OpenResty XRay 現在看起來更像是一個超級私人醫生,它 24 小時不間斷地觀察線上軟體的健康狀況,對出現的問題或變化實時給出診斷,並撰寫詳細的報告,提出改進建議。讓我們一起來看看現在的報告系統能夠做些甚麼,以及它在不久的將來能做甚麼。

OpenResty XRay 是一個動態追蹤產品,它可以自動分析正在執行中的應用程式,以排除效能問題、行為問題和安全漏洞,並提供可行的建議。在底層實現上,OpenResty XRay 由我們的 Y 語言驅動,可以在不同環境下支援多種不同的執行時,如 Stap+, eBPF+, GDB 和 ODB。

過去

首先讓我們回顧一下過去,看看使用者在使用 OpenResty XRay老版本時經常遇到的問題。作為比較,我們也會簡單地提到新版本。

分析器太多的問題

OpenResty XRay 提供了數百種基於動態追蹤 技術的高階分析器。這個數量還在快速增長。擁有這麼多的分析器其實是件好事,但對大多數使用者來說,這也意味著陡峭的學習曲線。使用者不但要學習如何使用特定的分析器,而且需要能夠在正確的時間針對正確的程序執行這些工具。後者對於線上生產伺服器來說很有難度,因為一些關鍵事件不會在你挑選的時間內出現,它可能會出現在你睡覺的時候。

當然,OpenResty XRay 支援定期或在關鍵的事件(如 CPU 峰值或記憶體增長)發生時自動執行少數基本分析器。但是,它不能根據當前的環境和問題自動執行更高階的分析器。

幸運的是,OpenResty XRay 現在在選擇針對甚麼程序執行甚麼分析器以及何時執行這些分析器方面更加智慧。它還可以自動分析分析器和工具執行的結果,並提取有用的資訊來決定下一步該怎麼做。例如,它可以確定在當前情況下需要執行哪些更專業的工具,以定位特定時間內特定程序的問題的根源。換句話說,它現在可以獨立進行復雜的決策和解決問題。

圖表和資料太多的問題

隨著時間的推移,OpenResty XRay 會收集大量資料。儘管資料量比大多數監控系統、日誌系統和傳統的 APM 產品要小得多,但對於任何一個人來說,每天甚至每小時要消化的資料量還是很大。大量資料導致分析器輸出大量圖表、表格和文字報告,這很容易使人(包括我們自己)不知所措。這造成了一種糟糕的情況,當人們試圖在我們的網路控制檯中檢視所有的分析器報告時,他們可能會覺得無從下手。

新版本的 OpenResty XRay 現在具有了新的能力:它可以自動解讀大量的圖表和資料,結合類似的圖表和資料,挑選出最典型或最極端的例子,並寫出簡潔但仍然有料的報告,讓普通的人類使用者可以閱讀。

解釋火焰圖

出人意料的是,儘管火焰圖在概念上很簡單,但我們發現大多數使用者都不能正確解讀火焰圖。即使是那些認為自己可以的人,他們也可能經常錯過圖表中的真正線索。這種情況甚至經常發生在我們自己的工程團隊中!

火焰圖樣本

新版本的 OpenResty XRay 現在可以自動地分析火焰圖了。

  1. 找到最熱的程式碼路徑或 GC 物件參考路徑(從 GC 根部),在語義層面上識別常見的程式碼路徑,以及
  2. 向人們解釋這些發現(熱點)。

現在

OpenResty XRay 現在徹底改變了如何監控、分析和排除線上軟體應用程式的故障。對於我們的大多數使用者來說,他們所需要做的就是安裝 OpenResty XRay 的 agent 守護程序服務,並在他們的伺服器上保持執行。然後,使用者只需閱讀每小時更新的日報或週報,就可以看到所有結論和建議,這些結論和建議可以讓他們的應用程式更加高效、穩定、可靠和安全。我們的OpenResty XRay iPhone 和 Android 的移動應用程式甚至可以推送新報告或問題的通知!

簡報

使用者可以在 OpenResty XRay 網路控制檯(或移動應用程式)的 “Insights” 頁面檢視簡報。

Insights 選單

日報

預設顯示的報告是今天的日報,每小時更新一次。選擇以前日期的日報也很容易。日報的時間範圍是一天。

每個報告由兩層標題組成。第一層是使用者應用程式。具有不同可執行二進位制檔案和不同命令列的應用程式被認為是不同的。第二層是問題型別,如 CPU、off-CPU、記憶體和錯誤與異常。

CPU 時間問題

OpenResty XRay 日報

上面的報告樣本顯示了 CPU 資源類別中的一些原始碼級瓶頸問題。正如我們大多數使用者已經知道的那樣,OpenResty XRay 可以在不訪問使用者原始碼的情況下,迅速找出原始碼層面上的深層問題。就像上面那些用箭頭連線的綠框是用函式呼叫連結串列示的 Lua 或 C 程式碼路徑。這也是動態追蹤 技術的魅力所在。

off-CPU 時間問題

在 off-CPU(或阻塞/睡眠)型別中的一些樣本報告問題。

off-CPU問題

記憶體使用問題

你想知道你的目標應用程序在生產中如何使用你的記憶體嗎?以及為甚麼它們會佔用這麼多記憶體?我們可以在報告中的這個記憶體問題型別部分讓你知道。對於 OpenResty 或 Nginx 應用程式,我們可以涵蓋libcglibcjemalloc)、Nginx 記憶體池、Nginx 共享記憶體區,以及由其垃圾收集器(GC)管理的 LuaJIT 記憶體。下面是一個例子。

記憶體使用問題

錯誤和異常

你生產機器中丟擲的異常和錯誤列在這個類別下面。即使是那些在目標應用程式內部捕獲的異常也會在這裡顯示出來。下面是一些關於 Lua 異常的例子。

Errors & Exceptions

更多問題型別

我們仍在增加覆蓋更多的問題型別例如硬碟 I/O、網路 I/O、延遲和安全。如果有新的問題型別出現,我們會第一時間讓您知曉。

報告比較和差異

OpenResty XRay 會自動計算每份日報(週報)與上一份日報(週報)相比的差異或變化。因此,報告中顯示的問題會有不同型別。比如某個問題是上一份報告中沒有的,它的型別就是“新問題”(注意上面的截圖中顯示的 “New” 標籤)。某個問題在上一份報告中存在,本次報告中消失,這種就是“消失的問題”。也有一些問題可能在兩份報告中都存在,只是問數值有變化。

問題的數值變化(上升和下降)如下。

數值上升

數值下降

差異小於之前數量的 5%,將被視為相等。

週報

週報的格式與日報相同。唯一的區別是,它的時間範圍是一週。當一週結束後,系統就會自動生成一份新的週報。

OpenResty XRay 週報

完整的報告

與簡報相比,完整的報告更加全面。使用者可以點選簡報上的“檢視完整報告”連結,檢視相應的完整報告。這一步驟普通使用者可以跳過。

為自主部署的使用者提供的上傳報告的功能

對於使用 OpenResty XRay 自主部署的客戶,也可以選擇自動將報告上傳到 OpenResty XRay 團隊進行人工專家稽核。我們的專家團隊可以審查機器生成的報告,並安排與客戶會面,更詳細地討論未決問題。由於我們仍在打磨報告生成引擎和各種技術堆疊的知識庫,因此自動報告中可能有缺失的部分。

自動推理

OpenResty XRay 現在可以對許多問題型別都能進行自動推斷,比如 CPU 使用率、阻塞或睡眠時間(off-CPU)、錯誤或異常,以及記憶體使用。它首先執行更通用的工具來獲得一個概要,然後用更專業的工具來細究概要中的各種發現。例如,當系統看到 Gzip 壓縮需要很多 CPU 時間,系統會執行更多的工具來縮小根源,比如 Gzip 壓縮級別是否太高,或者試圖壓縮對 Gzip 壓縮演算法不友好的二進位制資源。

Chained Analyzers

何時針對甚麼程序執行甚麼分析器

OpenResty XRay 使用一種由事件、計時器和系統指標為導向的自動取樣方法。當 OpenResty XRay 不對正在執行的程式進行取樣時,該程式的開銷嚴格來說是零(由於動態追蹤 的非侵入性)。即使在取樣時,開銷通常也非常低(低於 5%,甚至無法測量)。

OpenResty XRay 有智慧策略來決定何時針對甚麼程序執行甚麼工具。它根據系統指標或已經執行的其他分析器的結果,仔細選擇下一步要執行的合適的分析器。目標是當事情發生時,在“犯罪現場”收集適當數量和適當種類的資料。當問題已經消失時,再去分析目標程序就沒有意義了。

一些先進的分析器確實比其他分析器產生更多的開銷。OpenResty XRay 也試圖透過減少這類工具的執行頻率(或根本不執行)或限制目標應用程式的範圍(如只分析單個程序而不是整個程序組)來儘量減少開銷。這種開銷控制只適用於在 OpenResty XRay 控制檯中標記為“生產”的機器。對於非生產型伺服器來說,不惜一切代價儘快獲得結果更方便。

對於自主部署使用者

對於 OpenResty XRay 自主部署版本的使用者,記得啟用自動上傳報告的功能,以便OpenResty Inc. 團隊能夠及時審查報告。

自動上傳報告

未來

目前,OpenResty XRay 的自動報告生成器只支援 Nginx 和 OpenResty 應用程式(包括那些基於 OpenResty 的更高階別的應用程式,如 Kong)。然而,我們已經有了為其他技術棧設計的具體分析器和工具,如 PostgreSQL、Redis、Python 和 Perl。我們將很快把支援擴充套件到更多的應用程式型別。

此外,我們正在覆蓋更多的問題型別或資源型別,如硬碟 I/O、網路 I/O、延遲和安全漏洞。

OpenResty XRay 的客戶如果有特定的功能希望我們的報告能儘快提供,我們會優先安排實現。

關於作者

章亦春是開源 OpenResty® 專案創始人兼 OpenResty Inc. 公司 CEO 和創始人。

章亦春(Github ID: agentzh),生於中國江蘇,現定居美國灣區。他是中國早期開源技術和文化的倡導者和領軍人物,曾供職於多家國際知名的高科技企業,如 Cloudflare、雅虎、阿里巴巴, 是 “邊緣計算“、”動態追蹤 “和 “機器程式設計 “的先驅,擁有超過 22 年的程式設計及 16 年的開源經驗。作為擁有超過 4000 萬全球域名使用者的開源專案的領導者。他基於其 OpenResty® 開源專案打造的高科技企業 OpenResty Inc. 位於美國矽谷中心。其主打的兩個產品 OpenResty XRay(利用動態追蹤技術的非侵入式的故障剖析和排除工具)和 OpenResty Edge(最適合微服務和分散式流量的全能型閘道器軟體),廣受全球眾多上市及大型企業青睞。在 OpenResty 以外,章亦春為多個開源專案貢獻了累計超過百萬行程式碼,其中包括,Linux 核心、Nginx、LuaJITGDBSystemTapLLVM、Perl 等,並編寫過 60 多個開源軟體庫。

關注我們

如果您喜歡本文,歡迎關注我們 OpenResty Inc. 公司的部落格網站

我們也在 B 站上也有 OpenResty 官方的影片分享空間,歡迎訂閱。

同時歡迎掃碼關注我們的微信公眾號:

我們的微信公眾號