摘 "要: 傳統(tǒng)基于規(guī)則的日志解析方法針對(duì)每類日志需單獨(dú)編寫(xiě)規(guī)則,且隨著系統(tǒng)更新,出現(xiàn)新的日志模式時(shí),需人工再次干預(yù);基于深度學(xué)習(xí)的日志解析方法雖準(zhǔn)確率高,但計(jì)算復(fù)雜度高。為解決日志解析方法人力成本和計(jì)算復(fù)雜度高的問(wèn)題,文中提出一種基于詞模式規(guī)則的輕量級(jí)日志模板提取方法,該方法由初始規(guī)則集生成、詞模式規(guī)則應(yīng)用、潛在錯(cuò)誤樣本發(fā)掘三個(gè)部分構(gòu)成。首先,原始日志基于自適應(yīng)隨機(jī)抽樣獲取彼此間相似度較低的代表性日志;然后,基于專家反饋提取初始詞模式規(guī)則集,在詞模式規(guī)則應(yīng)用模塊對(duì)原始日志進(jìn)行處理并提取日志模板;最后,在潛在錯(cuò)誤樣本發(fā)掘模塊檢查生成的日志模板聚類,發(fā)現(xiàn)潛在的錯(cuò)誤分類樣本并對(duì)其進(jìn)行規(guī)則集更新。經(jīng)過(guò)實(shí)驗(yàn)驗(yàn)證,在16個(gè)公開(kāi)日志數(shù)據(jù)集上,文中方法的平均準(zhǔn)確度達(dá)到97.8%,與基于深度學(xué)習(xí)的日志解析算法準(zhǔn)確度基本持平;在計(jì)算效率方面,文中方法的單線程解析速度達(dá)到每秒20 000條,且隨著可用內(nèi)核數(shù)量的增加,性能持續(xù)提升,滿足系統(tǒng)日志的故障診斷和安全分析需求。
關(guān)鍵詞: 日志解析; 模板提取; 詞模式規(guī)則; 正則匹配; 啟發(fā)式策略; 規(guī)則集
中圖分類號(hào): TN911?34; TP391 " " " " " " " " " "文獻(xiàn)標(biāo)識(shí)碼: A " " " " " " " " " " 文章編號(hào): 1004?373X(2024)21?0156?09
Lightweight log template extraction method based on word pattern rules
GU Zhaojun1, ZHANG Zhikai2, LIU Chunbo1, YE Jingwei2
(1. Information Security Evaluation Center, Civil Aviation University of China, Tianjin 300300, China;
2. College of Computer Science and Technology, Civil Aviation University of China, Tianjin 300300, China)
Abstract: In the traditional rule?based log parsing methods, writing of separate rules for each type of logs is required. With the update of the system, new log patterns appear, and the manual intervention is needed again. The log parsing methods based on deep learning, however, have high accuracy but high computational complexity. In view of the above, a lightweight log template extraction method based on word pattern rules is proposed to reduce the high human cost and computational complexity. This method consists of three parts, including initial rule set generation, word pattern rule application, and potential error sample discovery. On the basis of the adaptive random sampling, the original logs obtain representative logs with low similarity among each other. Then the initial word pattern rule set is extracted based on expert feedback. The original logs are processed and log templates are extracted in the word pattern rule application module. The generated log templates are examined for clustering in the potential error sample discovery module, so as to find out the potential misclassified samples and update the rule set. After experimental verification, the average accuracy of the proposed method reaches 97.8% on 16 public log datasets. The average accuracy is basically the same as that of the log parsing algorithms based on deep learning. In terms of computational efficiency, the single?threaded parsing speed of the proposed method reaches 20 000 entries per second, and its performance continues to improve with the increase of the number of available cores. To sum up, the proposed method can meet the demand of fault diagnosis and safety analysis of system logs.
Keywords: log paring; template extraction; word pattern rule; regex match; heuristic strategy; rule set
0 "引 "言
近年來(lái),智能運(yùn)維[1](Artificial Intelligence for IT Operations, AIOps)興起,日志分析仍然是追溯問(wèn)題的重要證據(jù)[2]。日志是豐富的信息來(lái)源,同時(shí)日志作為審計(jì)材料在軟件系統(tǒng)中普遍可用,適合用于支持運(yùn)維工作。然而,隨著軟件系統(tǒng)的復(fù)雜性增加,日志數(shù)據(jù)的體積往往呈現(xiàn)龐大的趨勢(shì)。據(jù)微軟報(bào)告[3]顯示,僅微軟內(nèi)部某項(xiàng)服務(wù)每天平均產(chǎn)生約50億條日志,相當(dāng)于每小時(shí)產(chǎn)生約2億條。龐大的數(shù)據(jù)量使得人工檢查和分析日志文件變得不切實(shí)際。因此,自動(dòng)化的日志分析方法變得流行,并被應(yīng)用于異常檢測(cè)[4]、故障診斷[5]、系統(tǒng)理解[6]以及用戶行為分析[7]等領(lǐng)域。
日志解析是日志分析的關(guān)鍵步驟,其目標(biāo)是對(duì)原始日志數(shù)據(jù)進(jìn)行清理,實(shí)現(xiàn)非結(jié)構(gòu)化日志數(shù)據(jù)的結(jié)構(gòu)化和向量化。龐大的日志數(shù)據(jù)量對(duì)日志解析算法的運(yùn)行性能提出了要求,現(xiàn)代軟件系統(tǒng)通常采用流式處理數(shù)據(jù)的方式,將來(lái)自系統(tǒng)內(nèi)各個(gè)組件的日志匯總至日志平臺(tái)進(jìn)行進(jìn)一步分析。如果解析算法的處理速度不能跟上日志產(chǎn)生的速度,那么基于日志的實(shí)時(shí)異常檢測(cè)、故障預(yù)測(cè)等任務(wù)將難以順利進(jìn)行。從另一個(gè)角度來(lái)說(shuō),更高性能的輕量級(jí)日志解析算法在同等計(jì)算資源下提供了將更多系統(tǒng)組件日志納入統(tǒng)一的日志分析平臺(tái)的可能性,更豐富的信息來(lái)源使得下游任務(wù)能夠更加深入地分析系統(tǒng)組件之間的復(fù)雜關(guān)系。
目前日志解析方法多是基于日志模板規(guī)則,即通過(guò)正則表達(dá)式匹配整個(gè)日志模板進(jìn)行日志解析,如Grok過(guò)濾器技術(shù)[8]。這類方法的問(wèn)題是,每項(xiàng)Grok過(guò)濾器規(guī)則對(duì)應(yīng)一類日志模板,這意味著對(duì)于包含大量異構(gòu)日志事件類型,并且在持續(xù)更新的現(xiàn)代軟件系統(tǒng)中,Grok規(guī)則庫(kù)持續(xù)膨脹,難以維護(hù)和擴(kuò)展。其次,每項(xiàng)新增的Grok規(guī)則都會(huì)導(dǎo)致額外一次對(duì)整個(gè)日志行的正則匹配,如果存在大量的規(guī)則,將會(huì)顯著拖慢解析器的整體運(yùn)行效率。
故多位學(xué)者提出了基于預(yù)定義的啟發(fā)式規(guī)則的日志解析方法,首先發(fā)現(xiàn)日志數(shù)據(jù)中的固有特征,再利用特征進(jìn)行模板提取,以用于日志分析?;陬l繁詞統(tǒng)計(jì)的SLCT(Simple Log Cluster Tool)認(rèn)為在日志文件中出現(xiàn)次數(shù)較多的詞是常量,此方法在初步解析中有效,但難以識(shí)別出頻率低、罕見(jiàn)的日志模板[9]。LFA(Log File Analyzer)考慮詞的位置進(jìn)行統(tǒng)計(jì)[10],Logram則采用n?gram類方法作為統(tǒng)計(jì)指標(biāo),從而將詞的上下文信息納入考慮[11]。IPLoM(Iterative Partition Log Mining)提出了迭代劃分的思路,通過(guò)基于日志長(zhǎng)度和詞的位置特征不斷將日志劃分為小的聚類[12]。Drain是近年來(lái)廣泛使用的日志解析算法,它是基于日志的前綴解析樹(shù),本質(zhì)是迭代劃分算法的樹(shù)形表達(dá)[13]。Prefix?Graph將從前綴樹(shù)擴(kuò)展出的概率圖結(jié)構(gòu)應(yīng)用于日志解析[14]。PosParser從自然語(yǔ)言處理領(lǐng)域的觸發(fā)詞概念中獲得啟發(fā),將日志中詞的詞性作為常變量判別的依據(jù)之一[15]。隨著深度學(xué)習(xí)技術(shù)的發(fā)展,深度學(xué)習(xí)技術(shù)從標(biāo)注的日志數(shù)據(jù)集中學(xué)習(xí)日志的常/變量特征,在日志解析中也有良好的表現(xiàn)。其中,UniParser是基于對(duì)比學(xué)習(xí)策略的LSTM網(wǎng)絡(luò)[16],用于進(jìn)行日志的上下文編碼,而LogPPT則直接利用RoBERTa網(wǎng)絡(luò)進(jìn)行日志序列的特征提取[17]。
上述方法均未在準(zhǔn)確率和運(yùn)行效率上達(dá)到理想平衡,本文提出了利用細(xì)粒度啟發(fā)式規(guī)則解析日志的一種新模式,基于數(shù)字特征的常/變量判別策略作為基礎(chǔ),根據(jù)日志特征生成少量正則表達(dá)式,將匹配范圍從整條日志縮小到數(shù)個(gè)關(guān)鍵性的詞,從而高效構(gòu)造日志模板,在此基礎(chǔ)上實(shí)現(xiàn)了基于詞模式規(guī)則的輕量級(jí)日志模板提取方法。
1 "日志解析問(wèn)題描述
日志解析是通過(guò)分析日志數(shù)據(jù),推斷出生成日志的源代碼輸出語(yǔ)句的格式[18]。圖1是典型的日志解析過(guò)程。一條日志中的內(nèi)容分為兩類:一類是靜態(tài)內(nèi)容,即固定在源代碼中的詞,這些詞構(gòu)成的句子被稱為日志模板,用于描述某些系統(tǒng)事件,這類詞被稱為日志常量;另一類是動(dòng)態(tài)內(nèi)容,即在源代碼中使用通配符表示的詞,它們隨著程序運(yùn)行狀態(tài)變化而變化,被稱為日志變量。
對(duì)于一組日志輸入[L={l1,l2,…,ln,…,lN}],其中,[n∈[1,N]],記映射[T(ln):L→T]將日志[li]映射至其真實(shí)日志模板,其中[T={t1,t2,…}]為該組日志輸入[L]所涉及的全部日志模板;日志解析算法[P(l):L→P]將[L]映射到類別集合[P]上,其中[P={p1,p2,…}]為解析算法[P(l)]在日志輸入[L]下產(chǎn)生的所有日志模板分類。
[P]與[T]之間的關(guān)系可用二分圖[G=(V,E)]表示,其中頂點(diǎn)集[V]是[P]與[T]的并集,即[G=({P,T},E)];邊集[E]有如下定義:
[E=px,tyP(l)=px, T(l)=ty, ?l∈L] (1)
記[G]的全部[I]個(gè)極大連通子圖為[{G1,G2,…,Gi,…,GI}],對(duì)于任一極大連通子圖[Gi=({Pi,Ti},Ei)],有如下五種情況。
1) [Pi=1且Ti=1],代表日志解析產(chǎn)生的某類別與某日志模板嚴(yán)格對(duì)應(yīng),該類別包括且僅包括全部某一日志模板下屬日志,代表日志解析算法正確分類了該類日志;
2) [Pi=1且Tigt;1],日志解析產(chǎn)生的某一類別與多個(gè)實(shí)際日志模板對(duì)應(yīng),說(shuō)明日志解析粒度過(guò)粗,一部分日志處于欠分類狀態(tài);
3) [Pigt;1且Ti=1],日志解析產(chǎn)生的多個(gè)類別與同一日志模板對(duì)應(yīng),說(shuō)明日志解析粒度過(guò)細(xì),一部分日志處于過(guò)分類狀態(tài);
4) [Pigt;1且Tigt;1],說(shuō)明日志解析算法在涉及到的日志子集上分類失敗,解析結(jié)果基本不具備任何參考價(jià)值,分類是混亂的;
5) [Pi=0且Ti=1],說(shuō)明對(duì)于某部分日志,解析算法未能產(chǎn)生解析結(jié)果,此時(shí)稱解析算法是不完全的。一些早期的日志解析算法會(huì)具備這類不良性質(zhì),本文中不做過(guò)多討論。
從分類意義上講,日志解析的目的是找到一種映射[P′(l):L→P′],使得[P′]與[T]所成關(guān)系圖[G]的每一極大連通子圖[G′i=({P′i,Ti},E′i)],均有[P′i=1且Ti=1]。
2 "輕量級(jí)日志模板提取方法
2.1 "方法概述
基于詞模式規(guī)則的輕量級(jí)日志模板提取方法的總體框架如圖2所示,由自適應(yīng)隨機(jī)抽樣與初始規(guī)則集生成、詞模式規(guī)則應(yīng)用、潛在錯(cuò)誤樣本發(fā)掘與規(guī)則集更新三個(gè)部分構(gòu)成。圖2中用實(shí)線箭頭表示算法的離線訓(xùn)練流程,虛線箭頭表示算法的在線解析流程。首先,基于最長(zhǎng)公共子序列(Longest Common Sequence, LCS)和特殊符號(hào)相似度對(duì)原始日志進(jìn)行抽樣,獲取日志間相似度最低的代表性日志;然后,基于專家反饋或大語(yǔ)言模型在代表性日志集中提取基本的詞模式規(guī)則,并由規(guī)則處理模塊對(duì)原始日志進(jìn)行處理并提取日志模板;最后,基于模板相似度(Template Similarity, TS)和變量詞頻統(tǒng)計(jì)(Variable Frequency, VF)兩類啟發(fā)式規(guī)則檢查生成的日志模板聚類,發(fā)現(xiàn)潛在的錯(cuò)誤分類樣本并將其送回產(chǎn)生詞模式規(guī)則。算法迭代執(zhí)行直至規(guī)則集不再發(fā)生變化,此時(shí)算法的訓(xùn)練步驟宣告結(jié)束,最終產(chǎn)生的規(guī)則集被應(yīng)用于整個(gè)原始日志數(shù)據(jù)集上,進(jìn)行高效的日志解析。
2.2 "代表性日志抽樣模塊
為了產(chǎn)生詞模式規(guī)則使用的關(guān)鍵性詞模式信息,提出一種代表性日志抽樣算法。
首先,使用通用分隔符對(duì)日志進(jìn)行分詞;其次,按日志行中包含詞的數(shù)量與日志中的特殊符號(hào)集合對(duì)所有日志進(jìn)行初步分類;然后,對(duì)于產(chǎn)生的每個(gè)日志簇,使用自適應(yīng)隨機(jī)測(cè)試[17]中的自適應(yīng)隨機(jī)抽樣算法獲得多樣且分布均勻的樣本集。算法1描述了基于自適應(yīng)隨機(jī)抽樣的代表性日志抽樣算法。
算法1以原始日志數(shù)據(jù)集[D]和采樣數(shù)量[K]為輸入。在第1行,[D]中所有的日志項(xiàng)被處理為(日志長(zhǎng)度,日志中所有特殊符號(hào)集合,原始日志)的三元組。第2行創(chuàng)建一個(gè)集合[Drep]作為算法的結(jié)果,初始化為空。在第3~21行,每次循環(huán)中算法基于與[Drep]已有元素的相似度迭代地抽樣新的日志項(xiàng),直至[Drep]擁有[K]個(gè)日志項(xiàng)。在第4~7行,算法以日志長(zhǎng)度和日志中的特殊符號(hào)為線索,從[L]中選取[η]個(gè)候選日志儲(chǔ)存在[C]中。隨后在第8~17行,對(duì)于[C]中的每個(gè)候選者,算法計(jì)算它與[Drep]最相近元素的相似度。在第18、19行,根據(jù)上述計(jì)算結(jié)果,算法選擇[C]中與已有元素距離最遠(yuǎn)的日志項(xiàng)加入采樣集[Drep]。
Algorithm 1: 代表性日志抽樣算法
Data:[D],日志數(shù)據(jù)集;[K],采樣數(shù)量
Result:[Drep],[K]條抽樣日志集合
1 /* [L={len,punc,orig}]:日志長(zhǎng)度,符號(hào)集合,原始日志 */
2 [L←process(D)];
3 /* 初始化采樣集 */
4 [Drep←?];
5 while [K]gt;1 do
6 /*初始化候選集*/
7 " [C←{random c∈L∣c.len?Drep or c.punc?Drep};]
8 " for [i=1←η] do
9 " " "[C.add({random c∈L∣c.len∈C and c.punc∈C});]
10 "end
11 "/* 計(jì)算[C]中日志與[Drep]的相似度 */
12 "[Δ←?];
13 "for each [c∈C] do
14 " " [δ←0;]
15 " " "/*搜索[c]在[Drep]中的最近鄰,并計(jì)算兩者間相似度*/
16 " " for each [l∈Drep] do
17 " " " [δ←MAX(δ,similarity(c.org,l.org));]
18 " " end
19 " " [Δ.add(δ);]
20 "end
21 "/*選擇與[Drep]中最近鄰擁有最遠(yuǎn)距離/最小相似度的候選者加入采樣集*/
22 "[Drep.add{c∈C∣Δc is smallest};]
23 "[K←K-1;]
24 end
25 return [Drep];
2.3 "詞模式規(guī)則處理模塊
本文提出以基于數(shù)字特征的常/變量判別策略作為基礎(chǔ),將算法所需的知識(shí)輸入策略分為三類,即非數(shù)字變量判別、含數(shù)字常量判別、分隔符指定。
2.3.1 "過(guò)濾含數(shù)字詞
算法使用基于數(shù)字特征的常/變量判別策略作為基礎(chǔ)。為了與后續(xù)三類額外策略相適應(yīng),同時(shí)處理部分邊緣情況,將過(guò)濾規(guī)則設(shè)定如下:
1) 詞(token)不能包含任何數(shù)字字符;
2) 詞不能完全由a~f組成,即不能是十六進(jìn)制數(shù);
3) 詞不能只包含一個(gè)符號(hào)字符;
4) 詞不是變量被替換產(chǎn)生的通配符。
基礎(chǔ)策略無(wú)法處理如下兩類特殊詞。
不含數(shù)字的變量:
Invalid user test from 52.80.34.196
包含數(shù)字的常量:
ARPT: 7915: wl0: MDNS: IPV4 Addr: lt;Addrgt;
ARPT: 6289: wl0: MDNS: IPV6 Addr: lt;Addrgt;
2.3.2 "非數(shù)字變量判別
通過(guò)詞所在的上下文可以有效地區(qū)分不包含數(shù)字的變量,例如現(xiàn)有深度學(xué)習(xí)方法從大量標(biāo)注數(shù)據(jù)中學(xué)習(xí)常/變量所在的不同上下文特征。本文方法使用抽樣算法和反饋步驟從大量未標(biāo)注日志中篩選出潛在包含該類情況的日志樣例,基于專家知識(shí)或大語(yǔ)言模型生成正則表達(dá)式匹配所需的上下文信息。在基礎(chǔ)策略的基礎(chǔ)上,非數(shù)字變量判別解決了日志解析的過(guò)分類問(wèn)題。
2.3.3 "含數(shù)字常量判別
對(duì)于判別日志中的常量,更關(guān)注其高精確率,而對(duì)召回率的要求較低。如2.3.1節(jié)特殊詞,即使忽略詞“IPV4”,根據(jù)剩余的常量三元組(ARPT:, MDNS:, Addr:),算法仍然可以正確地區(qū)分該類日志與其他類別的日志。但從更細(xì)粒度的角度上看,此時(shí)無(wú)法區(qū)分IPV4事件和IPV6事件。另一方面,見(jiàn)如下常量判別策略實(shí)例,端口名“alt0”具有明顯的變量特征,但有時(shí)運(yùn)維人員根據(jù)實(shí)際業(yè)務(wù)需求,需要將來(lái)自不同接口的網(wǎng)絡(luò)連接視為不同的日志類型,故將某種機(jī)制“alt0”指定為常量。含數(shù)字常量判別作為補(bǔ)充,解決了上述兩類日志解析中的欠分類情況。
原始日志
…… available network connection on network 172.16.0.0/16 via interface alt0
…… available network connection on network 10.0.0.0/8 via interface wlan42
現(xiàn)有的一部分日志解析方法類似地采用正則替換作為預(yù)處理步驟。本文方法的目標(biāo)更有針對(duì)性,不再是寬泛的“為算法輸入領(lǐng)域知識(shí)”,并為如何高效展示這類知識(shí)提供了指導(dǎo)性步驟。
2.3.4 "分隔符指定
算法從詞的模式角度對(duì)日志進(jìn)行常/變量判別。因此,需要更加深入地探究分詞技術(shù)的優(yōu)化,以提高日志解析的準(zhǔn)確性和效率。分詞對(duì)解析的影響如下:
StackScroll: overlapAmount:220.0
StackScroll: state.clipTopAmount:204
如上兩類日志,若不使用冒號(hào)作為分詞符號(hào),則每條日志將會(huì)被分隔成兩個(gè)詞。然而,由于后兩個(gè)詞中都包含數(shù)字,基礎(chǔ)策略無(wú)法考慮這些詞,兩類日志將被映射到同一組“StackScroll”,無(wú)法被區(qū)分。相反,如果使用冒號(hào)作為分詞符號(hào),兩類日志能夠分別映射到“StackScrolloverlapAmount”和“StackScrollstate.clipTopAmount”,算法可以準(zhǔn)確區(qū)分這兩類日志。
代表性日志抽樣算法中設(shè)計(jì)了基于日志包含符號(hào)集的自適應(yīng)隨機(jī)抽樣,能夠多樣化地抽取特殊符號(hào)樣例,為規(guī)則產(chǎn)生模塊識(shí)別上下文并選取分詞符提供線索。
因不同系統(tǒng)日志格式差異大,即使是基于大量多種日志數(shù)據(jù)集訓(xùn)練的神經(jīng)網(wǎng)絡(luò)模型,也難以保證在新數(shù)據(jù)集上不進(jìn)行微調(diào)即可使用[16]。采用以上三類額外策略,旨在將原始日志盡可能地轉(zhuǎn)化為更具格式化的形式。詞模式規(guī)則處理示例如圖3所示。
圖3中:①分詞算法應(yīng)當(dāng)認(rèn)識(shí)到在tty.NODEVssh中和在25.4.0.6中,“.”的概念并不同;②變量處理算法通過(guò)獲取其上下文特征判別NODEVssh這類變量;③盡管alt0具有明顯的變量特征,有時(shí)出于實(shí)際的業(yè)務(wù)需求要將其視為常量,算法提供了這樣的機(jī)制;④與Drain那樣在一棵樹(shù)上查找目標(biāo)日志所在聚類的方法不同,規(guī)則處理模塊直接使用日志模板作為鍵值,將目標(biāo)日志映射至其在散列表中的聚類。
2.4 "啟發(fā)式規(guī)則反饋
規(guī)則處理模塊根據(jù)詞模式規(guī)則集處理日志數(shù)據(jù),生成日志模板及其聚類,所有出現(xiàn)在日志模板中的詞構(gòu)成了日志數(shù)據(jù)的常量集,其他未出現(xiàn)的詞構(gòu)成日志數(shù)據(jù)的變量集。算法針對(duì)生成的日志模板進(jìn)行潛在錯(cuò)誤分類樣本的發(fā)現(xiàn)及反饋,分為兩個(gè)方面。
1) 基于詞頻統(tǒng)計(jì)的潛在常量識(shí)別:算法統(tǒng)計(jì)全體日志集[L]中每個(gè)詞的出現(xiàn)頻率。當(dāng)發(fā)現(xiàn)某個(gè)詞的出現(xiàn)頻率過(guò)高且不出現(xiàn)在常量集中時(shí),算法會(huì)重新抽樣其所在聚類,并形成新的代表性日志集。這些新的代表性日志會(huì)重新輸入至規(guī)則產(chǎn)生模塊,產(chǎn)生新的數(shù)字常量識(shí)別規(guī)則,在新一輪的迭代中發(fā)現(xiàn)潛在的欠分類樣本。
2) 基于最長(zhǎng)公共子序列(Longest Common Sequence, LCS)的潛在變量識(shí)別:若歸屬于某一日志模板的變量被錯(cuò)誤地劃分為常量,則可能產(chǎn)生數(shù)個(gè)高度相似的日志模板。算法利用最長(zhǎng)公共子序列計(jì)算生成的日志模板之間的相似度,當(dāng)相似度超過(guò)設(shè)定閾值時(shí),算法標(biāo)記這些模板為潛在的過(guò)分類樣本。對(duì)于這些相似的模板,算法分別在它們所在的聚類中重新抽樣形成代表性日志集,由規(guī)則產(chǎn)生模塊生成新的非數(shù)字變量識(shí)別規(guī)則。
規(guī)則反饋模塊通過(guò)循環(huán)迭代方式來(lái)優(yōu)化規(guī)則集,使其能夠更好地適應(yīng)系統(tǒng)的變化和日志數(shù)據(jù)的演化,從而提升運(yùn)維人員在日志分析和故障排查方面的效率和準(zhǔn)確性。
3 "實(shí) "驗(yàn)
3.1 "數(shù)據(jù)集及實(shí)驗(yàn)環(huán)境
在LogPai團(tuán)隊(duì)[19]提供的16個(gè)日志數(shù)據(jù)集上開(kāi)展實(shí)驗(yàn),評(píng)估算法的有效性和效率。數(shù)據(jù)集涵蓋分布式系統(tǒng)(HDFS、Hadoop、Zookeeper、OpenStack、Spark),超級(jí)計(jì)算機(jī)(BGL、HPC),客戶端應(yīng)用(Proxifier、Thunderbird),服務(wù)器應(yīng)用(Apache、OpenSSH),移動(dòng)應(yīng)用(HealthApp),操作系統(tǒng)(Windows、Linux、Mac、Andriod)。對(duì)于每類數(shù)據(jù),LogPai團(tuán)隊(duì)采樣了2 000條具有代表性的日志并進(jìn)行了人工標(biāo)注。
實(shí)驗(yàn)在一臺(tái)AMD Ryzen? 7 5800H 3.2 GHz處理器的PC機(jī)和一臺(tái)搭載兩塊Intel? Xeon? Silver 4210R 2.40 GHz處理器的服務(wù)器上進(jìn)行。Ryzen 7 5800H處理器擁有8顆物理核心,每塊Silver 4210R處理器擁有10顆物理核心。
3.2 "評(píng)價(jià)指標(biāo)
在日志解析領(lǐng)域,常用組準(zhǔn)確率(Group Accuracy, GA)來(lái)評(píng)估解析結(jié)果的質(zhì)量,GA是日志解析領(lǐng)域被廣泛采用的評(píng)價(jià)指標(biāo),它是指有多大比例的日志被正確解析了。GA定義為:
[GA=i=0nI(Gi)*Count(T1i)L] (2)
式中:[L]為數(shù)據(jù)集中日志的總數(shù);[T1i]表示[Ti]的首元素,在公式所限定的條件下也是[Ti]唯一的元素;示性函數(shù)[I(Gi)]指示[G]的某一最大連通子集是否代表一類正確分類情況。
[I(Gi)=1, " " Pi=1且Ti=10, " " 其他] (3)
組準(zhǔn)確率認(rèn)為一個(gè)聚類是被正確分類的,要滿足以下兩個(gè)條件:
1) 該聚類中的所有日志屬于且只屬于實(shí)際數(shù)據(jù)中的一個(gè)類別;
2) 該聚類和實(shí)際數(shù)據(jù)中對(duì)應(yīng)的類別具有相同數(shù)量的日志。
換言之,該聚類和實(shí)際數(shù)據(jù)中的某一類別在集合意義上完全相等。根據(jù)這一定義,同一實(shí)際類別中的所有日志共享正確性,因此被稱為組準(zhǔn)確率。
在運(yùn)行效率測(cè)試階段,使用百萬(wàn)行量級(jí)的HDFS日志數(shù)據(jù)對(duì)算法進(jìn)行速度測(cè)試。通過(guò)這個(gè)大規(guī)模數(shù)據(jù)集的測(cè)試,全面評(píng)估算法在處理大型日志數(shù)據(jù)時(shí)的運(yùn)行效率和性能表現(xiàn)。五種日志解析方法在不同數(shù)據(jù)集上的組準(zhǔn)確率比較如表1所示。
3.3 "解析精度對(duì)比實(shí)驗(yàn)
在所有16個(gè)數(shù)據(jù)集上比較了本文算法與下述4種先進(jìn)日志解析算法的解析精度。
1) Drain[14]:基于前綴樹(shù)對(duì)日志進(jìn)行解析,是當(dāng)前熱門(mén)的被廣泛應(yīng)用的解析算法,準(zhǔn)確率、速度、穩(wěn)健性各個(gè)方面的性能都備受認(rèn)可。
2) PosParser[16]:來(lái)源于自然語(yǔ)言處理領(lǐng)域的觸發(fā)詞概念,以日志中詞的詞性為線索提取功能詞序列作為特征表示,克服了Drain在處理變長(zhǎng)日志問(wèn)題上的不足。
3) UniParser[17]:采用了基于對(duì)比學(xué)習(xí)策略的LSTM網(wǎng)絡(luò),學(xué)習(xí)日志中常量與變量不同的上下文特征;與一般的NLP問(wèn)題做法不同,UniParser使用了字符級(jí)的分隔符嵌入,這種技術(shù)更貼合日志數(shù)據(jù)的特點(diǎn)。UniParser是一種預(yù)訓(xùn)練模型,期望能夠在一部分有標(biāo)注的日志數(shù)據(jù)集上訓(xùn)練,并將經(jīng)驗(yàn)遷移至未知數(shù)據(jù)集。
4) LogPPT[18]:LogPPT使用RoBERTa模型作為網(wǎng)絡(luò)的主干。與UniParser不同,LogPPT提出了基于預(yù)訓(xùn)練的小樣本學(xué)習(xí)策略,將注意力集中在當(dāng)獲得未知數(shù)據(jù)集時(shí),如何有針對(duì)性地從數(shù)據(jù)集中采樣并標(biāo)注少量具有代表性的日志數(shù)據(jù),對(duì)網(wǎng)絡(luò)進(jìn)行重訓(xùn)練以提高在新數(shù)據(jù)集上的性能。
UniParser在公開(kāi)日志數(shù)據(jù)集上做預(yù)訓(xùn)練,并直接應(yīng)用于目標(biāo)日志;LogPPT利用預(yù)訓(xùn)練的自然語(yǔ)言模型,并在目標(biāo)日志數(shù)據(jù)集上做少量標(biāo)注,做小樣本的重訓(xùn)練;而本文算法沒(méi)有預(yù)訓(xùn)練過(guò)程,但需要人工在目標(biāo)日志上給出更高程度抽象的“標(biāo)注”。
表1中的實(shí)驗(yàn)結(jié)果表明,本文方法能夠達(dá)到與基于現(xiàn)代神經(jīng)網(wǎng)絡(luò)的日志解析方法相近的解析精度,這一結(jié)果證明了通過(guò)人工給出少量預(yù)處理規(guī)則來(lái)提高日志解析性能這一策略的有效性。與啟發(fā)式日志解析方法PosParser對(duì)比,在Mac數(shù)據(jù)集和OpenSSH數(shù)據(jù)集上的性能提升也證明了本文所提出的使用少量預(yù)設(shè)規(guī)則來(lái)補(bǔ)充啟發(fā)式算法的必要性。
需要注意的是,本文算法在Linux數(shù)據(jù)集上表現(xiàn)不佳。這是因?yàn)樵跀?shù)據(jù)集中,工具包提供的真實(shí)情況(ground truth)存在標(biāo)注錯(cuò)誤。為了與其他方法公平對(duì)比,沒(méi)有直接進(jìn)行修正。但值得一提的是,通過(guò)特殊常量指定機(jī)制,能夠獲得與真實(shí)情況相符的結(jié)果,但在上述實(shí)驗(yàn)中并沒(méi)有使用。
3.4 "運(yùn)行效率對(duì)比實(shí)驗(yàn)
本文算法在進(jìn)行日志解析時(shí),并不需要過(guò)多依賴其他數(shù)據(jù)或者上下文信息,因此具有良好的并行特性,能夠充分發(fā)揮現(xiàn)代多處理器技術(shù)的優(yōu)勢(shì)。這些特征使得執(zhí)行效率方面相較于其他日志解析算法具有顯著的優(yōu)勢(shì)。
圖4展示了本文算法使用不同數(shù)量的計(jì)算核心在一千萬(wàn)量級(jí)的日志數(shù)據(jù)下的性能表現(xiàn),隨著計(jì)算核心數(shù)量的增加,算法的處理速度得到了提升。
在實(shí)驗(yàn)所涉及的兩類現(xiàn)代處理器上,每顆物理核心可以擁有兩個(gè)超線程,但由于實(shí)驗(yàn)是基于Python語(yǔ)言的簡(jiǎn)單驗(yàn)證,全局解釋器鎖的限制導(dǎo)致Python解釋器無(wú)法充分利用超線程,造成Ryzen 7 5800H處理器在核心數(shù)量8~16、Silver 4210R處理器在核心數(shù)量20~40處,算法性能沒(méi)有展現(xiàn)出應(yīng)有的線性提升。如果只考慮物理核心,算法表現(xiàn)出近似線性加速比的并行性能。
算法的運(yùn)行時(shí)間由目標(biāo)日志數(shù)據(jù)集中日志的平均長(zhǎng)度和使用正則表達(dá)式的數(shù)量共同決定。日志平均長(zhǎng)度決定運(yùn)行時(shí)間的基準(zhǔn),每條額外的正則表達(dá)式使算法對(duì)日志多遍歷一次,運(yùn)行時(shí)間與兩者的乘積成線性關(guān)系,如圖5所示。
由于算法結(jié)構(gòu)上的輕量性和并行性,本文算法在運(yùn)行效率上遠(yuǎn)優(yōu)于其他方法。表2展示了在百萬(wàn)量級(jí)的HDFS日志數(shù)據(jù)集上與其他算法的運(yùn)行效率對(duì)比,其中OurMethod?[n]([n]=1、20)指算法使用[n]個(gè)線程并行。實(shí)驗(yàn)在Silver 4210R處理器上進(jìn)行。
幾種解析算法在百萬(wàn)條日志數(shù)據(jù)集上的運(yùn)行時(shí)間對(duì)比實(shí)驗(yàn)結(jié)果如表2所示。
3.5 "消融實(shí)驗(yàn)
由于Linux數(shù)據(jù)集存在一些標(biāo)簽標(biāo)注錯(cuò)誤的問(wèn)題,實(shí)驗(yàn)在剩余15個(gè)日志數(shù)據(jù)集上進(jìn)行;使用組準(zhǔn)確率作為評(píng)價(jià)指標(biāo)。為了更清楚地說(shuō)明,下面重新列舉本文算法的幾個(gè)步驟。
1) 基礎(chǔ)方法:類似于Drain的做法,基于日志開(kāi)頭處出現(xiàn)常量的概率高于其他位置的粗略假設(shè),認(rèn)為日志的前兩個(gè)詞一定是常量,并基于這兩個(gè)詞對(duì)日志進(jìn)行分類。
2) 數(shù)字過(guò)濾:在日志中去除所有包含數(shù)字的詞,實(shí)驗(yàn)證明這樣的策略可以極大提高所挑選詞是常量的概率。
3) 使用全部常量進(jìn)行分類:數(shù)字過(guò)濾使得對(duì)常/變量的判斷更加自信,因此不再使用前兩個(gè)詞而是使用所有常量進(jìn)行分類。
4) 非數(shù)字變量判別:這一步是數(shù)字過(guò)濾的補(bǔ)充,在此階段專注于處理“不包含數(shù)字的變量”。
5) 含數(shù)字常量判別:這一步驟是數(shù)字過(guò)濾的另一項(xiàng)補(bǔ)充,在這一階段專注于處理“包含數(shù)字的常量”。
6) 可變分隔符分詞策略:在這一步中,會(huì)使用比“按空格分開(kāi)的詞”更復(fù)雜的分詞策略。實(shí)驗(yàn)證明這種策略對(duì)于部分?jǐn)?shù)據(jù)集是必須的。
從最簡(jiǎn)單的只使用前兩個(gè)詞對(duì)日志進(jìn)行分類到使用全部機(jī)制,每個(gè)步驟對(duì)最終實(shí)驗(yàn)結(jié)果的貢獻(xiàn)如圖6所示。實(shí)驗(yàn)表明每種策略對(duì)應(yīng)了日志解析中的一類特定問(wèn)題,對(duì)完整的日志解析都有著不可或缺的作用,在所有步驟的共同作用下,日志解析的準(zhǔn)確率最終可以達(dá)到接近100%的水平。
過(guò)去的研究已經(jīng)證明,高精度的日志解析需要算法通過(guò)某種方式增加對(duì)系統(tǒng)知識(shí)的了解。Drain使用粗略的正則替換預(yù)處理;UniParser從訓(xùn)練集中學(xué)習(xí)日志的一般性特征;LogPPT對(duì)目標(biāo)日志系統(tǒng)中的少量代表性日志做人工標(biāo)注。實(shí)現(xiàn)高精度日志解析所需的系統(tǒng)知識(shí)輸入的界限未知,為了更好地解決這個(gè)問(wèn)題,本文提出了基于詞模式規(guī)則的日志解析方法,它盡可能地縮減了復(fù)雜的算法結(jié)構(gòu),突出先驗(yàn)知識(shí)輸入對(duì)算法性能的影響。由“不包含數(shù)字的詞就是常量”的假設(shè)作為日志的一般性特征,通過(guò)非數(shù)字變量判別、含數(shù)字常量判別和可變分隔符分詞三個(gè)步驟允許運(yùn)維人員向算法輸入領(lǐng)域知識(shí)。圖6顯示了在不同數(shù)據(jù)集上三個(gè)步驟對(duì)最終解析結(jié)果的影響力。實(shí)驗(yàn)結(jié)果表明,完全通過(guò)啟發(fā)式規(guī)則向算法輸入領(lǐng)域知識(shí)的代價(jià)是可以接受的。
4 "結(jié) "語(yǔ)
相較于傳統(tǒng)的啟發(fā)式日志解析算法,本文算法需要運(yùn)維人員提供更多的正則預(yù)處理策略,這種投入所帶來(lái)的回報(bào)是更高的準(zhǔn)確率和更快的運(yùn)行速度。實(shí)驗(yàn)結(jié)果證明,給出額外的正則表達(dá)式作為系統(tǒng)知識(shí)的代價(jià)是可控且可以接受的。相較于使用龐大的神經(jīng)網(wǎng)絡(luò)在日志中學(xué)習(xí)常量/變量的特征,算法對(duì)運(yùn)維人員提出了額外的要求,但這也使得在運(yùn)行效率上具有明顯優(yōu)勢(shì),在面對(duì)格式與過(guò)往經(jīng)驗(yàn)完全不同的新數(shù)據(jù)集時(shí),算法的調(diào)整更加靈活。本文算法在性能方面表現(xiàn)優(yōu)秀,且實(shí)現(xiàn)簡(jiǎn)單,是一種高效、可靠的日志解析工具。在不對(duì)現(xiàn)有系統(tǒng)設(shè)備增加過(guò)多負(fù)擔(dān)的場(chǎng)景下,其優(yōu)勢(shì)更加突出。后續(xù)研究將考慮采用大語(yǔ)言模型等高精度但低效率的工具,對(duì)少量日志進(jìn)行預(yù)訓(xùn)練,輔助運(yùn)維人員提取系統(tǒng)知識(shí)。
注:本文通訊作者為顧兆軍。
參考文獻(xiàn)
[1] DANG Y N, LIN Q W, HUANG P. AIOps: Real?world challenges and research innovations [C]// Proceedings of the 2019 IEEE/ACM 41st International Conference on Software Engineering. New York: IEEE, 2019: 4?5.
[2] HE S L, HE P J, CHEN Z B, et al. A survey on automated log analysis for reliability engineering [J]. ACM computing surveys, 2022, 54(6): 1?37.
[3] WANG X H, ZHANG X, LI L Q, et al. SPINE: A scalable log parser with feedback guidance [C]// Proceedings of the 30th ACM Joint European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM, 2022: 1198?1208.
[4] ZHANG X, XU Y, LIN Q W, et al. Robust log?based anomaly detection on unstable log data [C]// Proceedings of the 2019 27th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering. New York: ACM, 2019: 807?817.
[5] DU M, LI F F, ZHENG G N, et al. DeepLog: Anomaly detection and diagnosis from system logs through deep learning [C]// Proceedings of the ACM SIGSAC Conference on Computer amp; Communications Security. New York: ACM, 2017: 1285?1298.
[6] FU Q, LOU J G, WANG Y, et al. Execution anomaly detection in distributed systems through unstructured log analysis [C]// The 2009 Ninth IEEE International Conference on Data Mining. New York: IEEE, 2009: 149?158.
[7] HUANG S, LIU Y, FUNG C, et al. HitAnomaly: Hierarchical transformers for anomaly detection in system log [J]. IEEE transactions on network and service management, 2020, 17(4): 2064?2076.
[8] Elastic N.V. Grok filter plugin [EB/OL]. [2023?10?05]. https://www.elastic.co/guide/en/logstash/current/plugins?filters?grok.html.
[9] VAARANDI R. A data clustering algorithm for mining patterns from event logs [C]// Proceedings of 3rd IEEE Workshop on the IP Operations amp; Management. New York: IEEE, 2003: 119?126.
[10] NAGAPPAN M, VOUK M A. Abstracting log lines to log event types for mining software system logs [C]// 2017 7th IEEE International Working Conference on Mining Software Repositories. New York: IEEE, 2010: 114?117.
[11] DAI H T, LI H, CHEN C S, et al. Logram: Efficient log parsing using n?gram dictionaries [J]. IEEE transactions on software engineering, 2022, 48(3): 879?892.
[12] MAKKANJU A A O, ZINCIR?HEYWOOD A N, MILIOS E E. Clustering event logs using iterative partitioning [C]// Procee?dings of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. New York: IEEE, 2009: 1255?1264.
[13] HE P J, ZHU J M, ZHENG Z B, et al. Drain: An online log parsing approach with fixed depth tree [C]// Proceedings of the 2017 IEEE International Conference on Web Services. New York: IEEE, 2017: 33?40.
[14] CHU G J, WANG J Y, QI Q, et al. Prefix?Graph: A versatile log parsing approach merging prefix tree with probabilistic graph [C]// Proceedings of the 2021 IEEE 37th International Conference on Data Engineering. New York: IEEE, 2021: 2411?2422.
[15] 蔣金釗,傅媛媛,徐建.基于詞性標(biāo)注的啟發(fā)式在線日志解析方法[J].計(jì)算機(jī)應(yīng)用研究,2024,41(1):217?221.
[16] LIU Y D, ZHANG X, HE S L, et al. UniParser: A unified log parser for heterogeneous log data [C]// Proceedings of the ACM Web Conference. New York: ACM, 2022: 1893?1901.
[17] VAN HOANG L, ZHANG H Y. Log parsing with prompt?based few?shot learning [C]// IEEE/ACM 45th International Conference on Software Engineering. New York: IEEE, 2023: 2438?2449.
[18] XU W, HUANG L, FOX A, et al. Detecting large?scale system problems by mining console logs [C]// Proceedings of the ACM SIGOPS 22nd Symposium on Operating Systems Principles. New York: ACM, 2009: 117?132.
[19] ZHU J M, HE S L, LIU J Y, et al. Tools and benchmarks for automated log parsing [C]// 2019 IEEE/ACM 41st International Conference on Software Engineering: Software Engineering in Practice. New York: IEEE, 2019: 121?130.
[20] HE P J, ZHU J M, XU P C, et al. A directed acyclic graph approach to online log parsing [EB/OL]. [2018?08?13]. http://arxiv.org/abs/1806.04356.
作者簡(jiǎn)介:顧兆軍(1966—),男,山東蓬萊人,博士研究生,教授,主要研究方向?yàn)榫W(wǎng)絡(luò)與信息安全、民航信息系統(tǒng)。
張智凱(1997—),男,遼寧朝陽(yáng)人,碩士研究生,主要研究方向?yàn)槿罩窘馕?、日志異常檢測(cè)。
劉春波(1976—),男,天津人,碩士研究生,副教授,主要研究方向?yàn)榫W(wǎng)絡(luò)安全智能檢測(cè)。
葉經(jīng)緯(1998—),男,湖北孝感人,碩士研究生,主要研究方向?yàn)槿罩井惓z測(cè)。