如何對混合日志進行自動化解析

2024年2月6日 26点热度 0人点赞

本文分享自華為雲社區《【AIOps】日志分析領域難題:如何對混合日志進行自動化解析?-雲社區-華為雲》,作者: DevAI。

AIOps智能運維,是指將AI應用於運維領域,基於已有的運維數據通過AI的方式來解決傳統運維沒辦法解決的問題;本文聚焦在AIOps領域的日志解析子課題。現有的日志解析器 (log parser) 在實際生產應用時面臨著兩大局限:

一是現有日志解析器假定所有日志都是單行文本,但是實際生產環境中收集到的日志可能包含多行的日志消息(例如Java堆棧和Hadoop計數器),這會導致傳統日志解析器逐行提取模版的解析范式無法適用於這些多行日志。二是傳統日志解析器依賴固定解析規則,難以滿足不同場景下的解析需求。為了解決這些問題,本文提出了一種全新的混合日志解析器:Hue。Hue是一種基於啟發式解析樹適用於復雜混合日志的日志解析方法。本文在三個混合日志數據集和十六個廣泛使用的單行日志數據集上進行了綜合評估,混合日志數據集包括真實的華為雲線上雲服務日志。結果顯示Hue在混合日志和單行日志數據上都表現出了最優的解析能力。

1. 混合日志和解析任務介紹

本文定義了混合日志的消息類型包括單行的事件日志(Event Log)、具有清晰的行列結構的表格日志(Table Log)、以及具有跨行文本結構的文本日志(Text Log)。

  • 事件日志(Event Log):事件日志是單行日志消息。事件日志記錄服務或組件的操作或狀態,包含日志頭和消息內容。為了與現有單行日志解析任務中的定義保持一致,事件日志的模板由日志消息中的常量和表示變量的通配符組成。
  • 表格日志(Table Log):表格日志是多行日志,包含一個表頭、多行參數和潛在的表行。具有相同日志模板的表格日志具有相同的表列數和不同的行數,並且同一列中的token數據類型相同。由於表格日志的表頭由區分不同表的關鍵信息(即列號和列類型)組成,因此表格日志的模板是表頭,而表內容被視為解析後的日志消息中的參數。因此,對表格日志進行日志解析的目的是提取其表頭,並將其表內容轉換為參數。
  • 文本日志(Text Log):文本日志是不屬於“表格日志”類別的多行日志。文本日志以明文的形式記錄系統事件之外的詳細信息,如程序中的回溯調用堆棧,或以鍵值對的形式記錄數據庫內容等。文本日志廣泛存在於Hadoop、Spark和MySQL等眾多組件中。本文將文本日志的模板定義為幾行保持不變的標記,例如traceback錯誤類型或消息中的鍵。因此,對文本日志進行日志解析的目標是從消息中提取這些行。

此外,本文同樣定義了混合日志解析任務的目標是區分混合日志中的消息類型,並提取不同日志消息的公共部分作為日志模版。與傳統日志解析相比,混合日志解析是一個更通用、覆蓋面更廣的研究問題,當日志中所有消息都是單行的事件日志時,混合日志解析任務退化為傳統單行日志解析任務,即傳統日志解析任務是混合日志解析任務的一個子集。混合日志解析任務如圖中所示。

2. 一種全新的混合日志解析器:Hue

本文提出了一種全新的混合日志解析器Hue。Hue是一種無監督的在線日志解析器,它利用啟發式解析樹和高效的人工反饋機制,使其既能自動化地高效解析混合日志,也能根據使用者的需求反饋高精度地解析混合日志。具體而言,Hue首先通過聚合混合日志的相鄰行的方式,再挖掘日志的行間特征,從而確定日志的消息類型;之後,Hue通過使用解析樹的啟發式規則,挖掘聚合後的日志行的行內特征,從而確定日志消息的具體模版。除全自動解析模式以外,Hue也允許根據使用者的反饋進行半自動的解析。Hue將自動識別可能具有多種解析結果的日志消息,並向用戶拋出反饋請求,以及時修正解析過程。Hue的工作流程如圖所示。

具體而言,Hue混合日志解析方法主要包括四步:

  • 關鍵字鑄造(Key Casting):現有的預處理策略難以處理可能包含表格日志和文本日志的混合日志,例如表格日志中隻有變量的行,這些行會被現有的預處理策略全部刪除或轉換為相同的通配符,從而導致解析不準確。Hue采用了一種全新的預處理策略,稱為關鍵字鑄造(Key Casting),其主要思想是使用不同的通配符在預處理中更好地編碼先驗知識。Hue用空格分割一行,並根據通用的轉換表將常用的作為變量的token轉換為相應的通配符。
  • 行聚合(Line Aggregating):為了正確解析混合日志,識別日志類型至關重要。直觀上,使用行號來標識事件日志相對容易;但區分表格日志和文本日志是具有挑戰性的,因為它們都具有多行結構。為了克服這個問題,本文提出了行聚合來區分表格日志和文本日志。表格日志中的相鄰行往往表現出更高的相似性,而在文本日志中,盡管相鄰行不太相似,但它們通常共享相同的縮進,因此,Hue通過對多行日志中的相鄰行進行聚合,並根據相鄰行的序列相似度和縮進數來識別日志類型。
  • 模式提取(Pattern Extracting):傳統的日志解析器通常使用完整的日志消息進行聚類,這在混合日志解析中效率很低,因為混合日志消息在扁平化後可能會非常長。此外,來自同一模板組的多行日志的行數可能相差很大,導致消息級聚類的準確性較低。為了應對這些挑戰,Hue提出了模式提取方法,它利用從線聚合中獲得的阻塞隊列和日志類型來對具有相同模板的日志進行分組。
  • 在線解析(Online Parsing):Hue進行在線解析時,會獲取當前日志的模板,並更新每個日志組中過期的模板;同時通過引入引導式的更新機制,以增強具有模糊日志的日志文件的解析性能。

3. 效果評估

本文全面對比了Hue在混合日志和單行日志上的解析精度,也對比了Hue在全自動解析模式下和半自動(人工反饋)模式下的解析精度。本文在三個混合日志數據集(如Table 1中所示)和十六個廣泛使用的單行日志數據集(如Table 4中所示)上對方法進行了綜合評估。

如Table 2和Table 3中所示,本文使用Group Accuracy(GA)和F1-Score上評估了Hue在全自動模式下的混合日志解析精度。考慮到Hue是第一個具備解析混合日志的解析器,且現有日志解析器無法解析混合日志,本文在測試其他解析器時將所有多行日志數據拉平為單行之後再對現有解析器進行評估。從圖中可以看出,由於拉平過程破壞了多行日志的行間特征,導致現有解析器完全無法正常完成混合日志的解析。

本文也評估了Hue在傳統的單行日志解析任務上的精度。如Table 4和Table 5所示,本文依然沿用Group Accuracy(GA)和F1-Score指標對Hue在全自動模式下的解析能力進行評估。結果顯示即使沒有引入任何人工反饋,Hue也能超越現有的日志解析器。

此外,本文評估了在允許使用人工反饋的前提下,Hue在混合日志和單行日志上的解析精度的提升能力。如Figure 11和Figure 12圖中所示,Hue在正確的人工反饋的指導下,解析精度仍然能進一步提升。

4. 總結

本文來自華為雲PaaS技術創新Lab和香港中文大學(深圳)賀品嘉教授團隊合作項目成果產出,相關研究成果已被軟件工程領域頂會FSE’2023(CCF A類)正式錄用(論文題目:【Hue: A User-Adaptive Parser for Hybrid Logs】)。

本文對混合日志和混合日志解析問題進行了深入研究,並形式化地定義了混合日志類型和混合日志解析任務的目標。本文提出了第一個可以對混合日志進行高效處理的解析器Hue。Hue是一種基於啟發式解析樹,能夠精確解析復雜的混合日志的方法。Hue允許用戶自行決定拒絕部分解析規則的更新,從而滿足不同場景下的解析需求。

本文在三個混合日志數據集和十六個廣泛使用的單行日志數據集上對方法進行了綜合評估,這些數據集既包括開源軟件上的數據,也包括經過脫敏後真實的華為雲線上雲服務日志。結果顯示Hue在混合日志和單行日志數據上都表現出了最優的解析能力。

文章來自 PaaS技術創新Lab,PaaS技術創新Lab隸屬於華為雲,致力於綜合利用軟件分析、數據挖掘、機器學習等技術,為軟件研發人員提供下一代智能研發工具服務的核心引擎和智慧大腦。我們將聚焦軟件工程領域硬核能力,不斷構築研發利器,持續交付高價值商業特性!加入我們,一起開創研發新“境界”!

PaaS技術創新Lab主頁鏈接:
https://www.huaweicloud.com/lab/paas/home.html

關註#華為雲開發者聯盟# 點擊下方,第一時間了解華為雲新鮮技術~

華為雲博客_大數據博客_AI博客_雲計算博客_開發者中心-華為雲