SPINE:高拓展性、用戶友好的自動化日誌解析新神器

微軟亞洲研究院 發佈 2022-11-13T11:51:58.148730+00:00

編者按:在計算機系統與軟體的實踐和研究中,可靠性是至關重要且經久不衰的課題。如何自動化地分析日誌所記錄的系統狀態並讓數據「說話」 ,受到了廣泛研究。日誌解析是自動化日誌分析中的關鍵起步。如何將日誌解析應用於大規模複雜的雲環境往往面臨諸多現實挑戰,如數據不均衡,數據漂移等。

編者按:在計算機系統與軟體的實踐和研究中,可靠性是至關重要且經久不衰的課題。如何自動化地分析日誌所記錄的系統狀態並讓數據「說話」 ,受到了廣泛研究。日誌解析是自動化日誌分析中的關鍵起步。如何將日誌解析應用於大規模複雜的雲環境往往面臨諸多現實挑戰,如數據不均衡,數據漂移等。

為了解決這些挑戰,微軟亞洲研究院的研究員們提出了支持用戶反饋且具有高可擴展性的日誌解析方法 SPINE。該方法被軟體工程領域頂級會議 ESEC/FSE 2022 接收,並榮獲 「傑出論文獎」 (ACM SIGSOFT Distinguished Paper Award)。SPINE 是如何提升日誌解析效果和性能的呢?讓我們從今天的文章中獲得答案吧!


在雲計算時代,軟體系統的可靠性至關重要,一點小問題就可能引發蝴蝶效應,影響百萬用戶。為了了解並保障軟體系統的穩定,日誌被廣泛用於觀測並忠實記錄系統的內部狀態,是分析與解決系統故障的基礎。然而,使用人工分析體量巨大的日誌並不現實,因此自動化日誌分析日漸興起,而日誌解析是關鍵且基礎的步驟。在實踐中,日誌數據往往存在著數據量巨大、極度不均衡、數據漂移且沒有標註等問題。為了解決這些問題,並將日誌解析真正落實到複雜的雲環境中,微軟亞洲研究院的研究員們和微軟 Azure 的工程師們提出了支持用戶反饋的大數據場景下的日誌解析方法 SPINE,並將其落地到了產品線中。

近日,SPINE 被軟體工程領域的全球頂級會議 ESEC/FSE 2022 接收,並榮獲 「傑出論文獎」 (ACM SIGSOFT Distinguished Paper Award)


論文連結:

https://www.microsoft.com/en-us/research/publication/spine-a-scalable-log-parser-with-feedback-guidance-2/


ESEC/FSE 大會全稱為 ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering (ESEC/FSE) ,與 ICSE、ASE 並列為軟體工程領域三大頂級會議,在學術界和工業界都具有極大的影響力。今年的 ESEC/FSE 大會有效投稿量為449,最終接收99篇,接收率約為22%,會議將於2022年11月14日至18日在新加坡舉辦。


日誌解析:智能日誌分析的關鍵核心

自動化日誌分析在近年來逐漸成為研究熱點,例如基於日誌的異常檢測、故障診斷、故障預測等。幾乎所有的自動化日誌分析技術,都依賴於日誌解析這一關鍵的前置步驟。經過日誌解析,將半結構化文本形式的原始日誌轉換為結構化的日誌數據之後,下游的各類日誌分析任務才能自動化地執行。

日誌解析可從形式上被定義為:從原始日誌信息中提取日誌模板和日誌參數的任務。日誌信息的主體通常由兩部分構成:(1) 模板:描述系統事件的靜態的關鍵字,通常為一段自然語言,這些關鍵字被顯式地寫在日誌語句的代碼中。(2) 參數:也稱為動態變量,是在程序運行期間的某個變量的值。

現階段,大量的自動化日誌解析工作致力於準確高效地分離日誌中的模板和參數部分。儘管這些日誌解析器在公開的基準日誌數據集上取得了良好成效,但它們在實際應用中仍然面臨諸多挑戰。微軟的研究員和工程師們通過在實際工業環境中進行的大量例證研究,揭示出其中的兩個核心挑戰。


​大規模、不平衡的日誌數據

​首先,大多數現有的日誌解析器只能在單線程模式下運行。然而,現實世界的日誌數據量極為龐大。例如,在例證研究中,僅微軟某個內部服務,平均每天就會產出約50億條日誌,合每小時約2億條。如此規模的數據量超出了任何單一計算核或節點的處理能力,尤其難以滿足實時日誌分析的需要。

​​表面上,日誌解析似乎是一項很容易並行化的任務。然而,工業實踐中日誌數據的內在不平衡性將大大降低並行化的效率。這促使研究員們設計一種能夠在多個計算單元上進行更有效的橫向擴展的日誌解析器。

日誌漂移與解析器的快速適應

另一個挑戰來自於日誌伴隨著軟體系統的疊代而不斷發生變化。研究員們在微軟某內部服務中收集了8周的日誌,並計算隨著時間推移而新出現的日誌模板的數量,結果如圖3所示。由於持續集成/交付(CI/CD)的開發範式,日誌模板的數量會隨時間增加,日誌解析器也應不斷地更新,以適應數據的漂移,否則解析的準確度會隨時間流逝而逐漸下降。

遺憾的是,因為缺少足夠的有標籤數據,現有的日誌解析器大多採用無監督的方法,例如聚類、頻繁模式挖掘、最長共同子序列提取等來識別日誌的公共部分作為模板。這需要大量的人工標註來進行繁瑣的模型超參數調整,並且要求用戶對日誌解析方法的內部原理極為熟悉。因此,研究員們認為日誌解析應當降本增效,儘可能地降低用戶反饋機制的成本,提高用戶體驗,以達到快速調整日誌解析器參數的效果。

反饋支持的高擴展日誌解析器 SPINE

針對上述問題,微軟亞洲研究院的研究員們設計了 SPINE。SPINE 具體分為兩個階段:離線訓練階段(紅色箭頭)和在線解析階段(綠色箭頭)。在離線訓練階段,SPINE 會基於收集的日誌數據訓練一個初始模型。隨後,在在線解析階段,應用訓練得到的日誌解析模型,處理不斷更新的在線日誌數據。

SPINE 包含四個核心組件:日誌數據預處理(Pre-processing)、初始分組(Initial grouping)、漸進式聚類(Progressive clustering)和在線解析(Online parsing)。首先,對原始的日誌分詞,並進行必要的日誌清理。在此之後,初始分組模塊會將日誌快速分割成粗粒度的、互不重疊的多個日誌組(log group)。再將漸進式聚類算法應用於每個日誌組 ,把相似的日誌進一步劃分為細粒度的日誌簇(log cluster)。一個日誌簇中的日誌,可以認為誕生於同一個日誌列印語句。因此,可以提取其共同的 token 作為模板,將其餘部分視為參數。在線解析階段,SPINE 會將學習到的模型應用於新到來的日誌數據。基於這些日誌和模型中已有的日誌模版之間的相似度,將其歸屬為最相似的日誌簇中,並解析出其模板和參數。

SPINE 可以靈活地擴展到多個並行計算單元,以應對極大規模的工業日誌數據。為了應對工業日誌數據的極端不平衡性,研究員們設計了一種特殊的日誌數據調度算法來平衡不同計算單元上的工作負載,以節約總體運行時間。此外,SPINE 還設計了專門的用戶反饋機制來維持在漂移日誌數據下的解析精度。

​並行化日誌數據調度

在前置步驟中,日誌被劃分成不同的日誌組。然而,工業日誌數據的不平衡性會導致日誌的解析時間往往受制於最大的那個日誌組。這一挑戰促使了新的調度算法設計的誕生,將日誌解析任務更均勻地分配給多個計算單元,以達到最佳性能。假設個日誌組 g_i∈G 被分配到個計算單元 e_i∈E。理想情況下,每個計算單元將處理相等數量的 avg = ∑_(i=1)^m|g_i |/n 的日誌消息,其中 || 是日誌組 g_i 的大小。為了實現這一目標,研究員們將數量高於平均水平的日誌組分割成更小的子組,使其日誌數量接近平均值,同時合併數量少於平均水平的日誌組,使其所產生的超集的規模也接近於平均水平。算法細節可參考圖 5中的偽代碼。

​用戶反饋融合

​SPINE 模型架構中使用了漸進聚類算法進行細粒度的日誌聚類。在每個日誌組中,日誌信息首先被轉換為 one-hot 向量,再利用常見聚類方法(例如 K-Means 或高斯混合聚類)對日誌向量進行聚類,將其分為兩個子組。同樣的過程在每個子組上疊代進行,直到滿足停止條件。結果可得一棵二叉聚類樹,樹上的葉子結點即為日誌簇,如圖6所示。此算法的優點在於:(1)其算法本身具有極高的聚類效率。(2)該算法非常容易控制聚類的粒度。其核心在於是否需要繼續沿著聚類樹進行二叉分裂。這為用戶決定何時停止聚類提供了可能。

​用戶的反饋過程涉及多輪查詢,在每一輪中,SPINE 在一定條件下會向用戶推薦來自同一日誌簇的一對日誌,用戶對於這對日誌是否共享相同的模板給出反饋。用戶的反饋有助於SPINE決定是否將相應的日誌簇分成兩個子簇。隨後,SPINE 選擇下一個需要反饋指導的日誌簇決定是否要拆分。圖6顯示了一個反饋查詢的例子。

如何儘可能少地標註日誌數量,並同時最大限度地提高模型的準確性,是設計反饋機制的核心問題。SPINE 的反饋查詢的選擇基於飽和度增益(saturation gain)進行的。我們約定,若一個 token 在某一 log cluster 的每條日誌消息中都出現過,則視為一個 saturated token。一般來說,平均 token saturation 越高,意味著這組日誌共享了更多的單詞,所以它們越有可能是來自同一個日誌生成語句。飽和度增益是指,如果我們把一個葉子節點分成兩個子葉子節點,飽和度的增量。我們計算一個葉子節點 ln 的飽和度增益 G_ln,如公式1所示。該公式反映出繼續向下分裂聚類樹是否能所帶來的更多的 saturated token,從而有較高的提高解析精度的可能性。


實驗結果

​研究員們在16個公開的日誌數據集上對 SPINE 進行了大量實驗,以回答以下研究問題。

  • RQ1: 在沒有反饋指導和並行化加速的情況下,基礎版本的 SPINE 效果和效率如何?
  • RQ2: 有反饋指導的 SPINE 效果如何?
  • RQ3: 有並行化加速的 SPINE 效率如何?

基礎實驗

從對比 SPINE-base 和五個 SOTA 日誌解析器的解析精度實驗(表1),以及解析運行時間的對比結果(圖 7)中可見,SPINE 的效果優於或不遜於 SOTA 方法。另外,在沒有並行加速優化的情況下,SPINE 的解析效率也可以達到領先水平。

用戶反饋實驗

研究員們將 SPINE-feedback 版本應用於三個日誌數據集,即 Linux、Mac 和 OpenStack 後,如表1中所示。注意,在這三個數據集上,原有的日誌解析器的解析精度都很不理想。為此,研究員們首先為每個數據集訓練了一個初始解析模型,隨後查詢了具有最高飽和度增益的日誌簇的用戶反饋。

為了顯示 SPINE 反饋機制的有效性,實驗中研究員們使用了兩個基線推薦策略。第一個基線是一個隨機策略(表示為 random),即隨機地從任意一個日誌簇中抽出一對日誌推薦給用戶標註。第二條基線表示為 LNS,即僅僅考慮葉子節點的大小進行推薦。實驗結果如圖8所示。隨著反饋次數的增加,以上策略都可以在 SPINE 模型架構上提高解析的準確性。與其它兩個基線相比,SPINE-feedback 取得了最高的準確度提升。例如,Linux 和 OpenStack 日誌數據集上的解析準確率可以在不到10次的用戶反饋後提高到0. 90以上。即使是在非常複雜的 Mac 日誌數據集上,解析準確率也可以從0.78提高到0.85以上,而這僅僅需要20次用戶反饋即可。

​並行化實驗

在三個最大的數據集——HDFS、BGL 和 Spark 上,研究員們評估了日誌數據調度方法的有效性。研究員們在不同數量的計算單元下運行 SPINE-parallel,並記錄了其吞吐量(每秒處理的日誌數量)變化,其結果如圖9所示。

SPINE 日誌調度方法可以顯著提高解析的效率。例如,SPINE-parallel 在 BGL 數據集上可以實現5倍左右的吞吐量提升,大約每秒處理225,000條日誌。對比簡單的 BestFit 方法,SPINE 的日誌數據調度算法可以更充分地利用更多的計算單元,以到達更高的效率。


參考文獻

[1] Towards automated log parsing for large-scale log data analysis.

[2] Onion: identifying incident-indicating logs for cloud systems.

[3] Public datasets for log parsing. https://github.com/logpai/logparser

[4] Tools and benchmarks for automated log parsing

關鍵字: