蔣金釗 傅媛媛 徐建
摘 要:為了解決現(xiàn)有啟發(fā)式日志解析方法中日志特征表示區(qū)分能力不足導(dǎo)致解析精度低、泛化差的問題,提出了一種啟發(fā)式在線日志解析方法PosParser。該方法使用來源于觸發(fā)詞概念的功能詞序列作為特征表示,包含解決復(fù)雜日志易過度解析問題的兩階段檢測方法和處理變長參數(shù)日志的后處理流程。PosParser在16個真實日志數(shù)據(jù)集上取得了0.952的平均解析準(zhǔn)確率,證明了功能詞序列具有良好區(qū)分性、PosParser有良好的解析效果和魯棒性。
關(guān)鍵詞:日志分析;日志解析;觸發(fā)詞提?。辉~性標(biāo)注;系統(tǒng)運維
中圖分類號:TP391?? 文獻(xiàn)標(biāo)志碼:A?? 文章編號:1001-3695(2024)01-033-0217-05
doi:10.19734/j.issn.1001-3695.2023.05.0212
Heuristic online log parsing method based on part-of-speech tagging
Abstract:To solve the problems of low parsing accuracy and poor generalization caused by the insufficient distinguishing abi-lity of log feature representations for logs used in existing heuristic log parsing methods,this paper proposed PosParser,a heuristic online log parsing method.The method used function token sequence(FTS) derived from the concept of trigger words as feature representations,and consisted of the two-stage detection method for solving the problem of complex logs that were prone to over-parsing,and the post-processing for dealing with variable-length parameter logs.PosParser achieved an average parsing accuracy of 0.952 on 16 real-life log datasets.The results demonstrate that FTS has adequate distinguishing ability for logs and PosParser is effective and robust.
Key words:log analysis;log parsing;trigger word extraction;part-of-speech tagging;system maintenance
0 引言
現(xiàn)代計算機系統(tǒng)往往被期望能夠提供7×24小時的無間斷服務(wù),但隨著計算機系統(tǒng)復(fù)雜程度的不斷增加,即使技術(shù)人員花費大量的努力來維持系統(tǒng)的穩(wěn)定和可用,各種軟硬件的故障仍然難以避免。計算機系統(tǒng)的復(fù)雜性也導(dǎo)致了通過人力檢測和修復(fù)故障的困難程度在不斷提高。在此背景下,基于機器學(xué)習(xí)或深度學(xué)習(xí)的自動化智能故障發(fā)現(xiàn)與根因診斷技術(shù)具有很高的研究價值,受到了廣泛關(guān)注。日志作為系統(tǒng)運行的重要產(chǎn)物,由系統(tǒng)中的日志輸出語句產(chǎn)生,能夠反映系統(tǒng)的動態(tài)特征及系統(tǒng)發(fā)生故障時的上下文信息[1]。日志既包含重要的系統(tǒng)運行時信息,也在各個系統(tǒng)中常常使用,使之成為了多種智能運維任務(wù)的數(shù)據(jù)支持,如異常檢測[2,3]、故障診斷[4]、故障預(yù)測[5]。日志是典型的非結(jié)構(gòu)化數(shù)據(jù),但上述各種基于學(xué)習(xí)的智能運維方法需要結(jié)構(gòu)化數(shù)據(jù)作為輸入。因此,日志解析,即將非結(jié)構(gòu)化日志文本轉(zhuǎn)換為結(jié)構(gòu)化日志事件的過程,是這些方法中重要的第一步。一條結(jié)構(gòu)化日志由日志事件模板和動態(tài)參數(shù)組成,可以通過獲取日志事件模板或者識別動態(tài)參數(shù)完成日志解析。現(xiàn)有的日志解析方法大致可以分為基于規(guī)則的、基于靜態(tài)代碼分析的[6]和基于數(shù)據(jù)驅(qū)動的自動化日志解析方法三類?;谝?guī)則的日志解析方法需要針對不同的日志數(shù)據(jù)人工設(shè)計規(guī)則,即預(yù)先定義日志事件模板,然后與每條日志消息進(jìn)行匹配;基于靜態(tài)代碼分析的日志解析方法考慮到源代碼中的日志輸出語句包含了日志事件信息,期望通過分析程序源代碼,從日志輸出語句中獲取日志事件模板。由于日志數(shù)據(jù)的特點,上述兩類方法的泛用性通常很差。為了提高日志解析方法的適用性和降低人力開銷,以數(shù)據(jù)驅(qū)動的自動化日志解析方法受到了廣泛關(guān)注,這類方法期望從日志數(shù)據(jù)中學(xué)習(xí)到日志事件模板或完成動態(tài)參數(shù)識別。現(xiàn)有的基于數(shù)據(jù)驅(qū)動的日志解析方法使用的技術(shù)可分為如下幾類[7]:頻繁項目挖掘、聚類、啟發(fā)式和其他。根據(jù)工作模式的不同還可以將日志解析方法分為離線和在線方法。由于在線解析模式更能夠滿足現(xiàn)代計算機系統(tǒng)實時的日志分析需求,近年來的日志解析器多支持在線模式或者在線與離線混合模式。
啟發(fā)式的日志解析方法與其他方法相比具有輕量級的特點,同時其流式的處理過程符合在線工作模式,具有較高的研究價值。但現(xiàn)有的多數(shù)啟發(fā)式日志解析方法存在解析準(zhǔn)確率不高和泛用性不強的問題,產(chǎn)生這些缺陷的主要原因是這些方法使用的日志特征表示以及設(shè)計的日志解析流程區(qū)分性不足,無法很好地處理由不同系統(tǒng)產(chǎn)生的異構(gòu)且結(jié)構(gòu)復(fù)雜的日志。日志事件涉及一個或多個參與者,即計算機系統(tǒng)組件,描述了在特定時間系統(tǒng)狀態(tài)的變化和系統(tǒng)事件的發(fā)生。在自然語言處理領(lǐng)域的事件檢測任務(wù)[8]中,觸發(fā)詞是區(qū)分不同事件的重要標(biāo)準(zhǔn)。受到這一概念的啟發(fā),本文認(rèn)為日志事件同樣存在觸發(fā)詞,在不同事件產(chǎn)生的日志中大概率不同,但在由同一事件產(chǎn)生的日志中相同,可以作為一種具有良好區(qū)分性的日志特征表示。由于日志文本中通常存在大量的非字典詞以及不具備完整句子結(jié)構(gòu),針對自然語言的觸發(fā)詞提取方法無法直接應(yīng)用于日志文本??紤]到觸發(fā)詞多為動詞和名詞,本文基于詞性標(biāo)注,提取出日志中動詞和部分名詞,構(gòu)建日志特征表示,稱做功能詞序列(function token sequence,F(xiàn)TS),并在此基礎(chǔ)上提出了一種啟發(fā)式日志解析方法PosParser。為了評估FTS的區(qū)分性和PosParser的有效性和泛用性,本文使用16個真實日志數(shù)據(jù)集進(jìn)行了充分的實驗。實驗結(jié)果表明:FTS具有很好的區(qū)分性。PosParser在取得優(yōu)于以往方法的解析效果時還具有較好的魯棒性。本文的貢獻(xiàn)總結(jié)如下:a)將事件抽取任務(wù)中的觸發(fā)詞概念運用到日志解析任務(wù)中,提出了FTS作為啟發(fā)式在線日志解析方法中的日志特征表示;b)基于FTS,提出了一種啟發(fā)式在線日志解析方法PosParser,包含用于解決長日志易于出現(xiàn)過度解析的問題的兩階段檢查方法以及處理變長參數(shù)日志的基于最長公共序列(longest common sequence,LCS)的后處理流程。
1 相關(guān)工作
圖1展示了一個日志解析過程的示例,原始日志經(jīng)過日志解析后產(chǎn)生日志事件模板和結(jié)構(gòu)化日志兩部分?jǐn)?shù)據(jù)。一條原始日志消息通常包括日志頭和日志內(nèi)容兩部分。日志頭中會含有時間戳、嚴(yán)重等級等表明日志產(chǎn)生時間、產(chǎn)生來源和重要性的信息,這些信息一般無法作為判斷日志事件歸屬的依據(jù);日志內(nèi)容則可以分為靜態(tài)常量和動態(tài)參數(shù)兩部分,常量是系統(tǒng)編程人員在日志輸出語句中固定的字符部分,參數(shù)是在系統(tǒng)中變量的值,是在運行時才能確定的狀態(tài)信息。日志中的常量和通配符“〈*〉”構(gòu)成了日志事件模板,通配符替代了參數(shù)在日志中的位置。日志解析的目標(biāo)是在原始的日志消息中識別出日志事件模板和動態(tài)參數(shù),形成結(jié)構(gòu)化日志數(shù)據(jù)。
現(xiàn)代計算機系統(tǒng)產(chǎn)生的日志數(shù)據(jù)通常具有數(shù)量龐大、異構(gòu)與組成復(fù)雜以及處于演化狀態(tài)的特點,使得基于規(guī)則的和基于靜態(tài)代碼分析的日志解析方法在實踐中通常難以使用?;跀?shù)據(jù)驅(qū)動的自動化日志解析方法期望從原始日志數(shù)據(jù)中學(xué)習(xí)到日志事件模板或者完成動態(tài)參數(shù)的識別。各種基于數(shù)據(jù)驅(qū)動的日志解析方法使用的技術(shù)大致可分為頻繁項目挖掘[9,10]、聚類[11,12]、啟發(fā)式和其他,例如基于LCS的流式在線日志解析方法Sepll[13];將日志解析視做多目標(biāo)優(yōu)化問題,基于遺傳算法的MoLFI[14]以及基于深度學(xué)習(xí)的日志解析方法NuLog[15]。
基于頻繁項目挖掘的日志解析需要多次掃描數(shù)據(jù)集,在處理大容量日志數(shù)據(jù)時會出現(xiàn)性能問題,基于聚類的日志解析方法的解析準(zhǔn)確率受參數(shù)設(shè)置影響較大。相較之下,啟發(fā)式日志解析方法設(shè)計不同的日志特征表示逐步將日志劃分到不同的簇,具有輕量級的特點,同時其處理流程符合在線工作模式,更能滿足日志的實時處理需求。例如AEL[16]首先提出了兩條啟發(fā)式規(guī)則識別日志中的動態(tài)參數(shù),然后根據(jù)每條日志中單詞和參數(shù)個數(shù)的不同將日志劃分到不同的組,最后在每一組中產(chǎn)生最后的日志事件模板。IPLoM[17]則定義了三種啟發(fā)式規(guī)則來逐步劃分日志數(shù)據(jù),它們分別是按日志的令牌數(shù)劃分、按單詞出現(xiàn)數(shù)最少的列位置上的令牌劃分和通過搜索滿足雙射關(guān)系的單詞位置劃分日志。Drain[18]首先將日志中的令牌數(shù)目作為劃分依據(jù),然后使用了前綴樹的方式檢查日志的前幾個令牌進(jìn)一步劃分日志,同時定義了日志之間的相似度計算模型作為最終的劃分標(biāo)準(zhǔn)。ML-Parser[19]構(gòu)建了一個具有兩層框架的在線日志解析方法,其第一部分使用與Drain類似的前綴樹技術(shù),用于初步劃分日志;第二部分則基于LCS進(jìn)行更細(xì)粒度的處理。
2 PosParser
2.1 工作流程
PosParser的基本工作流程如圖2所示,它由預(yù)處理、日志表示、日志集合組織和后處理四個部分組成。當(dāng)一條日志消息進(jìn)入解析器后,首先進(jìn)行預(yù)處理流程,提取出日志內(nèi)容部分,并使用簡單的正則匹配識別日志內(nèi)容中的常見參數(shù);然后在日志表示流程中提取日志的FTS,或者經(jīng)由緩存結(jié)構(gòu)跳過FTS提取。在日志集合組織流程中,PosParser利用FTS和Hashmap結(jié)構(gòu)管理日志集合的生成、搜索與更新,在輸出之前的后處理流程中將處理具有變長參數(shù)的日志。
2.2 預(yù)處理
PosParser的預(yù)處理流程由兩部分工作構(gòu)成:a)日志內(nèi)容的提取,一條日志消息由日志頭和日志內(nèi)容兩部分組成,日志頭部包含時間戳、嚴(yán)重性等級等信息,與日志的事件歸屬無關(guān),因此需要使用正則表達(dá)式獲取日志內(nèi)容部分;b)常見變量替換,已有的工作已經(jīng)證明[20],即使只設(shè)計少量的正則表達(dá)式來替換日志內(nèi)容中的變量,也可極大提高日志解析的效果。預(yù)處理階段消除的變量應(yīng)該是如IP地址、URL和數(shù)字等,常見而明確的變量。PosParser默認(rèn)設(shè)計了正則表達(dá)式識別日志內(nèi)容中的IP地址、內(nèi)存地址、文件地址和時間四類變量,并使用通配符“〈*〉”替換。用戶可以自行設(shè)計針對不同日志的正則表達(dá)式。
2.3 日志表示
PosParser在日志表示流程中會先通過緩存結(jié)構(gòu)確定當(dāng)前處理日志是否可以直接并入某個日志集合,若不能則轉(zhuǎn)入日志FTS的提取。算法1展示了FTS的提取方法。算法1中a)使用空格、等號和冒號對日志內(nèi)容分詞;b)清洗掉分詞后的令牌序列中疑似參數(shù)的部分,主要有如下幾類:含有數(shù)字的令牌;位于等號和冒號后的一個令牌;在只含有字母和特殊字符的令牌中需要清洗的字符串和程序錯誤信息。這些疑似參數(shù)的部分會影響后續(xù)無空格英文分詞和詞性標(biāo)注。獲取清洗后的令牌序列后,算法中的c)對該序列做進(jìn)一步的無空格英文分詞,這一步驟主要有兩個目的:一是去除部分令牌中的特殊字符,避免影響后續(xù)詞性標(biāo)注工作;二是更好地暴露日志中的觸發(fā)詞信息。算法中d)使用詞性標(biāo)注工具獲取經(jīng)過兩次分詞后令牌的詞性,e)獲取日志的FTS。具體地,提取出其中的所有動詞和第一個名詞,如果一條日志經(jīng)過兩次分詞后的令牌序列長度大于3,算法將其視做長日志,將提取出的內(nèi)容組合作為該日志的FTS;否則視做短日志,單獨將動詞序列作為FTS,這是由于短日志的信息量少,其中的名詞很可能是變量。為了保證FTS的區(qū)分性,如果無法提取出動詞,使用名詞和經(jīng)過兩次分詞后的第一個令牌的組合作為FTS;如果無法提取出任何動詞或名詞信息,將第一次分詞后的令牌序列中的第一個令牌作為FTS。
算法1 提取FTS
輸入:一條日志內(nèi)容cnt。
輸出:日志內(nèi)容的FTS,fts。
a) wordTokens=split(cnt);
b) cleanedTokens=cleanMayParameters(wordTokens);
c) pieceTokens=splitWithoutSpace(cleanedTokens);
d) partOfSpeechs=posTag(pieceTokens);
e) fts=extractFTS(wordTokens,cleanedTokens,partOfSpeechs);
f) return fts;
FTS的提取流程要經(jīng)過兩次分詞、一次清洗、詞性標(biāo)注和最終的組合,其中詞性標(biāo)注是一件相對耗時的事情。由于相同或者來源同一事件的日志具有很大概率相鄰出現(xiàn),PosParser加入了緩存機制,以提高解析效率。具體地,緩存結(jié)構(gòu)中常有最近日志并入或新增的日志集合,當(dāng)一條日志進(jìn)入日志表示流程時,會首先與緩存中的日志集合進(jìn)行相似度計算,如果相似度為1,則直接并入該日志集合,否則轉(zhuǎn)入提取FTS。這樣可以避免非必要的FTS提取和日志集合搜索。
2.4 日志集合組織
日志集合組織流程中涉及三種對象:FTSMap、事件集合和日志集合。每條日志最終將流入某一個日志集合。日志集合管理日志編號集、相似度閾值和事件模板。事件集合管理其下的日志集合,這些日志集合中的日志具有相同的FTS。FTSMap以HashMap為結(jié)構(gòu),使用FTS作為鍵,事件集合作為值。當(dāng)一條日志經(jīng)過日志表示流程后,將進(jìn)入FTSMap,使用日志的FTS查找事件集合。如果沒有找到,PosParser將使用這條日志新建事件集合和日志集合,放入FTSMap中;如果找到,將使用兩階段檢查的方法搜索該事件集合,決定是否能夠并入某一日志集合。并入日志集合將引起日志集合的更新,否則在該事件集合下新建日志集合。
1)日志集合的搜索 日志能否并入事件集合下的某個日志集合需要進(jìn)行兩階段檢查,一是閾值檢查。每一個日志集合會具有不同的相似度閾值,日志與事件模板的相似度需要大于日志集合目前的相似度閾值。使用T表示當(dāng)前日志集合的事件模板,seq表示當(dāng)前日志的令牌序列,相似度的計算方式表示如下:
其中:len表示模板和日志的令牌長度;simTokens表示T與seq對應(yīng)位置上相同且不含有通配符的令牌個數(shù);wildcard表示在模板T中的令牌含有通配符“〈*〉”的個數(shù)。如果計算得到的simTokens大于當(dāng)前日志集合的相似度閾值,將嘗試合并當(dāng)前日志和日志模板,生成新的日志模板Tn,比較Tn與T,如果產(chǎn)生了新的參數(shù)位置,將開始第二階段的參數(shù)位置檢查。檢查Tn和T對應(yīng)位置的令牌,找到新增的參數(shù)位置索引。依次檢查序列T和序列seq中索引位置上的令牌,使用arg1和arg2表示,判斷該位置是否為變量,主要有如下幾種情況:a)arg1和arg2中同時存在字母、數(shù)字和特殊字符,認(rèn)為該位置為變量;b)arg1和arg2中含有數(shù)字和字母時,檢查arg1和arg2的字母組成是否相同。相同判斷該位置為變量,反之為常量;c)arg1和arg2中含有特殊字符和字母或全由字母組成。這種情況下,取模板Tn中目前檢查位置的令牌、前一位置的令牌和后一位置的令牌構(gòu)成序列進(jìn)行詞性標(biāo)注,若前一位置為一般名詞或者動詞,判斷該參數(shù)位置為變量;若前一位置為介詞,判斷arg1和arg2的詞性,若為一般名詞,判斷該位置為變量,否則為常量。
參數(shù)位置檢查的目的是通過檢查參數(shù)構(gòu)成的相似性或語義的相似性來解決長日志由于相似度過高易出現(xiàn)過度解析的問題。以圖1中的日志6、7為例,這兩條日志被定義于不同的日志模板,模板之間只有一個令牌不同,閾值檢查時計算相似度為0.89。若只考慮相似度,這兩條日志將被合并;在參數(shù)位置檢查中,兩條日志在新產(chǎn)生的參數(shù)位置上的值分別為“va-lues”和“bytes”,不具有結(jié)構(gòu)上的相似性,都不是一般名詞,且前一個令牌為介詞“for”,判定該位置為常量,不應(yīng)該合并。
一次檢查中可能有多個參數(shù)位置,當(dāng)每個參數(shù)位置都被判定為變量,則認(rèn)為通過檢查。如果在搜索日志集合的過程中有多個日志集合滿足要求,日志應(yīng)該并入相似度值最大的日志集合;若沒有一個日志集合通過檢查,PosParser會使用當(dāng)前的日志令牌序列生成新的日志集合。
2)日志集合的新增 存在兩種情況:a)在日志集合搜索中無法找到通過兩次檢查的日志集合,PosParser會在當(dāng)前事件集合中生成新的日志集合;b)使用日志的FTS在FTSMap無法找到對應(yīng)的事件集合,此時PosParser新增日志集合并放入新建的事件集合,然后將事件集合放入FTSMap。新的日志集合使用當(dāng)前待處理的令牌序列作為日志集合的事件模板,同時設(shè)置日志集合的初始相似度閾值。日志集合的初始相似度閾值stinit使用了文獻(xiàn)[20]提出的動態(tài)設(shè)置方法,表示如下:
其中:st是解析器的輸入?yún)?shù),tokenLen為事件模板的長度,digNum是序列中含有數(shù)字的令牌個數(shù)。
3)日志集合的更新 新的日志序列并入日志集合會引起日志集合的更新:a)將當(dāng)前日志的編號加入日志集合管理的日志編號集;b)事件模板的更新。將事件模板與并入的日志對應(yīng)位置上不同的令牌使用通配符“〈*〉”替換;c)相似度閾值的更新。PosParser同樣使用了文獻(xiàn)[20]提出的相似度閾值更新規(guī)則,表示如下:
stn=min{1,stn-1+0.5* logbase(η+1)}(5)
其中:η初始設(shè)置為0,每當(dāng)事件模板中有令牌被替換為通配符“〈*〉”,將導(dǎo)致η的值增加1。base定義如下:
base=max{2,digNum+1}(6)
其中:base和digNum只在生成日志集合時計算一次。
2.5 后處理
大部分事件集合下只有一個日志集合,這部分日志集合的事件模板可以直接輸出,但有少部分事件集合下有多個日志集合。引起這一情況的原因主要有兩個:a)變長日志的存在,變長日志是指來源于同一事件但參數(shù)部分長度不同的日志,這部分日志需要合并;b)由于詞性標(biāo)注工具的精度問題導(dǎo)致FTS在極少部分日志上的區(qū)分性不足,將不屬于同一事件的日志劃分到了同一事件集合下,這部分日志不需要合并。PosParser在后處理階段中只合并由于變長日志存在而產(chǎn)生的多個日志集合,具體地,解析器會依次檢查事件集合,事件集合下的日志集合數(shù)目如果大于3,考慮合并操作。首先識別哪些事件模板來源于同一事件。由于變量已經(jīng)在先前的處理中被替換為了“〈*〉”,來源于同一事件的事件模板應(yīng)當(dāng)具有相同的常量令牌序列。因此按照事件模板的常量令牌序列對日志集合進(jìn)行分組,在具有多個日志集合的組中使用最長公共子序列算法以及其回溯算法,提取出最終的事件模板。
3 實驗及分析
3.1 數(shù)據(jù)集
參照以往的工作,本文使用了Zhu等人[7]收集的開源日志數(shù)據(jù)集LogHub,LogHub包含總數(shù)據(jù)量為77 GB的來源于16個不同系統(tǒng)的日志數(shù)據(jù),這些系統(tǒng)分別為分布式系統(tǒng)、超級計算集群、操作系統(tǒng)、移動設(shè)備、應(yīng)用服務(wù)器以及獨立軟件。LogHub在每個系統(tǒng)的日志數(shù)據(jù)集中選取出了大小為2 KB的子數(shù)據(jù)集,并標(biāo)注了日志對應(yīng)的事件模板。同時,本文在HDFS和BGL上抽取了大小從300 KB至100 MB的日志數(shù)據(jù)集,并使用LogHub提供的事件模板進(jìn)行標(biāo)注。
3.2 評價指標(biāo)
本文采用解析準(zhǔn)確率(parsing accuracy,PA)[7]來評價方法的有效性。PA定義為正確解析的日志與日志總數(shù)的比值。日志經(jīng)過解析后會形成日志簇,每一簇的日志具有相同的事件模板,當(dāng)且僅當(dāng)解析后形成的日志簇與標(biāo)注數(shù)據(jù)中對應(yīng)事件模板的日志簇完全相同時才認(rèn)為這些日志被正確解析。例如,如果日志序列[E1,E2,E3,E4]被解析為[E1,E2,E2,E3],則PA為0.5,因為第二和第三條日志被錯誤解析到同一日志簇中。相較于精確率、召回率和F1值,PA在評價方法有效性時更加嚴(yán)格。
3.3 實驗設(shè)置
本文基于PyCharm,使用Python實現(xiàn)了PosParser。在預(yù)處理流程中,為與其他基線方法保持一致,采用LogPai[7]中預(yù)設(shè)的正則表達(dá)式提取日志內(nèi)容并消除常用變量。方法的后續(xù)流程中,使用了wordninja作為無空格英文分詞工具,NLTK作為詞性標(biāo)注工具。除敏感性實驗外,解析器輸入?yún)?shù)st的取值均為0.5。實驗環(huán)境為Windows 10 64位操作系統(tǒng),處理器為Intel CoreTM i7-10700K CPU @ 3.80 GHz。
3.4 FTS的區(qū)分性
在啟發(fā)式的日志解析方法中,使用的啟發(fā)式規(guī)則或者日志的特征表示是方法中的重要一環(huán)。為證明本文提出的FTS具有良好的區(qū)分性,可以有效地作為啟發(fā)式日志方法中日志消息劃分的指導(dǎo)依據(jù),本節(jié)進(jìn)行了兩方面的相關(guān)實驗。
a)有關(guān)日志解析過程中涉及參數(shù),即式(4)中的解析器輸入?yún)?shù)st的敏感性實驗。st決定了日志集合的初始相似度閾值,當(dāng)st的取值較小時,容易導(dǎo)致日志的異常合并;當(dāng)st取中間值時,容易出現(xiàn)長日志的過度解析問題;當(dāng)st的取值過大時,日志易于被過度解析。st的值過大或者過小都會導(dǎo)致解析效果不佳,其值的確定是一項煩瑣的工作。該組實驗設(shè)置st的取值為[0.1,0.9],步長為0.05。實驗結(jié)果如圖3所示。
當(dāng)st的取值小于0.5時,在所有的日志集上的解析效果都對st取值的變化不敏感;當(dāng)st取值在0.5~0.7時,在13個日志集上的解析效果同時保持了穩(wěn)定,在三個數(shù)據(jù)集上具有小幅度的變化;當(dāng)st取值大于0.7后,在八個日志集上的解析效果仍然相對穩(wěn)定,在六個數(shù)據(jù)集上的解析效果有明顯下降,在Android和Mac日志數(shù)據(jù)上的解析效果呈現(xiàn)上升趨勢。這初步證明了FTS具有良好的區(qū)分性,大部分不屬于同一事件模板的日志不會流入同一事件集合,不需要進(jìn)行日志集合的搜索,st取值的變化無法影響這部分日志的解析,使得在低st取值時的解析效果呈現(xiàn)相對穩(wěn)定的狀態(tài);同時,st取0.5時能夠在大部分日志集上獲得較優(yōu)的解析效果,在少部分日志集上也只需要考慮高st值的調(diào)參工作,降低了參數(shù)設(shè)置的復(fù)雜性,提高了日志解析工作的自動化程度。
b)統(tǒng)計后處理流程之前的事件集合中的日志集合數(shù)目,進(jìn)一步討論FTS的區(qū)分性。統(tǒng)計結(jié)果如表1所示。表中展示了在FTSMap中含有一個日志集合、兩個日志集合和大于兩個日志集合的事件集合數(shù)目占FTSMap中所有事件集合數(shù)目的比值。從表1可以看到,在16個數(shù)據(jù)集中,含有一個日志集合的事件集合數(shù)量占比在所有數(shù)據(jù)集上都大于80%,同時該項數(shù)值在9個數(shù)據(jù)集上大于90%。含有兩個日志集合的事件集合數(shù)量占比在13個數(shù)據(jù)集上小于10%;而含有大于兩個日志集合的事件集合數(shù)量占比在12個數(shù)據(jù)集上小于5%,且該項數(shù)值在4個數(shù)據(jù)集上為0%。平均來看,90.32%的事件集合中只含有一個日志集合,只有3%的事件集合中含有超過兩個的日志集合。這說明日志的FTS能夠決定絕大部分日志的事件歸屬,只有小部分的日志需要參與日志集合搜索流程,進(jìn)一步證明了FTS具有良好的區(qū)分性。
3.5 解析準(zhǔn)確率對比
本節(jié)通過對比實驗來證明PosParser方法的有效性,選取了經(jīng)典的啟發(fā)式方法作為對比方法,包括AEL[17]、IPLoM[18]和Drain[19]。各方法在16個大小為2 KB的數(shù)據(jù)集上的解析準(zhǔn)確率結(jié)果如表2所示。表中的每一行對比了不同方法在同一數(shù)據(jù)集上的解析準(zhǔn)確率,表中的每一列展示了某一方法在不同數(shù)據(jù)集上的解析準(zhǔn)確率。為了使結(jié)果展示更清晰,表中的最后一行展示了不同方法的平均解析準(zhǔn)確率,在某一數(shù)據(jù)集上的最優(yōu)解析準(zhǔn)確率使用了粗體標(biāo)注。
從表2的結(jié)果可以看到,在16個數(shù)據(jù)集中,PosParser一共在15個數(shù)據(jù)集上取得了最優(yōu)的解析準(zhǔn)確率,同時取得了最優(yōu)的平均解析準(zhǔn)確率。若考慮所有的數(shù)據(jù)集,Drain的平均解析準(zhǔn)確率為0.865,是對比方法中最優(yōu)的。與Drain相比,PosParser的平均解析準(zhǔn)確率提升了10.06%,證明了本文提出的方法是有效的,在絕大多數(shù)系統(tǒng)的日志數(shù)據(jù)集上都能夠獲取優(yōu)于以往方法的解析準(zhǔn)確率。
PosParser能夠取得優(yōu)于以往啟發(fā)式日志解析方法的原因主要如下:a)采用了具有良好區(qū)分性的日志特征FTS表示作為日志的劃分依據(jù);b)針對具有復(fù)雜結(jié)構(gòu)的日志提出了兩階段檢查的方法緩解其容易出現(xiàn)過度解析的問題,使得在如Linux、Andriod和 OpenStack等數(shù)據(jù)集上的解析準(zhǔn)確率有較為明顯的提升;c)設(shè)計了后處理流程處理具有變長參數(shù)的日志,在含有典型的具有變長參數(shù)的日志的數(shù)據(jù)集,如HDFS、HPC和Proxifier,也獲得了明顯提升。
3.6 魯棒性對比
為了探究面對不同體積日志時,日志解析方法能否保持穩(wěn)定的解析準(zhǔn)確率。本節(jié)使用了從HDFS和BGL中抽取的,大小從300 KB到100 MB的標(biāo)注日志數(shù)據(jù)進(jìn)行對比實驗。實驗設(shè)置與3.3節(jié)相同。實驗結(jié)果如圖4所示。其中圖(a)是在HDFS數(shù)據(jù)集上的實驗結(jié)果,當(dāng)數(shù)據(jù)集大小為300 KB時所有方法都獲得了較好的準(zhǔn)確率,當(dāng)數(shù)據(jù)集大小達(dá)到100 MB后,只有PosParser、AEL保持了較好的準(zhǔn)確率,Drain和IPLoM的解析準(zhǔn)確率明顯下降;圖(b)展示了在BGL數(shù)據(jù)集上的實驗結(jié)果,當(dāng)數(shù)據(jù)集體積大于300 KB后,所有方法的解析效果都有一定的下降,其中IPLoM準(zhǔn)確率下降明顯,但PosParser在大于300 KB的所有數(shù)據(jù)集上保持了相對穩(wěn)定的解析準(zhǔn)確率。這證明了PosParser在面對日志數(shù)據(jù)大小變化時能夠保持穩(wěn)定的解析效果,具有較好的魯棒性。同時可以看到,相較其他方法,PosParser在所有數(shù)據(jù)集上都獲得了很好的解析效果,進(jìn)一步證明了PosParser的有效性。
4 結(jié)束語
日志解析是一項具有挑戰(zhàn)性工作,受到自然語言處理領(lǐng)域事件抽取任務(wù)的啟發(fā),本文提出了一種基于詞性標(biāo)注的在線日志解析方法PosParser。PosParser的工作流程由預(yù)處理、日志表示、日志集合組織和后處理四個部分組成。在預(yù)處理中,使用正則表達(dá)式提取、日志內(nèi)容并消除常見變量;在日志表示中,設(shè)計了FTS的提取流程;在日志集合組織中,提出了兩階段檢查方法處理過度解析問題;在后處理流程中,使用最長公共子序列算法以及其回溯算法合并具有變長參數(shù)的日志。最后,本文在16個真實日志數(shù)據(jù)集上進(jìn)行了充分的實驗,證明了本文提出的功能詞序列具有良好的區(qū)分性,設(shè)計的啟發(fā)式日志解析方法不僅能獲得優(yōu)于以往啟發(fā)式日志解析方法的解析準(zhǔn)確性,還具有良好的魯棒性。FTS的區(qū)分性依賴于詞性標(biāo)注工具的精度,本文設(shè)計的FTS提取流程中的很多操作正是為了減少詞性標(biāo)注不精確帶來的影響。在未來工作中,將考慮如何優(yōu)化日志特征表示的提取流程并進(jìn)一步提高區(qū)分性。
參考文獻(xiàn):
[1]賈統(tǒng),李影,吳中海.基于日志數(shù)據(jù)的分布式軟件系統(tǒng)故障診斷綜述[J].軟件學(xué)報,2020,31(7):1997-2018.(Jia Tong,Li Ying,Wu Zhonghai.Survey of state-of-the-art log-based failure diagnosis[J].Journal of Software,2020,31(7):1997-2018.)
[2]Li Xiaoyun,Chen Pengfei,Jing Linxiao,et al.SwissLog:robust and unified deep learning based log anomaly detection for diverse faults[C]//Proc of the 31st IEEE International Symposium on Software Reliability Engineering.Piscataway,NJ:IEEE Press,2020:92-103.
[3]Huang Shaohan,Liu Yi,F(xiàn)ung C,et al.HitAnomaly:hierarchical transformers for anomaly detection in system log[J].IEEE Trans on Network and Service Management,2020,17(4):2064-2076.
[4]Yuan Ding,Mai Haohui,Xiong Weiwei,et al.SherLog:error diagnosis by connecting clues from run-time logs[J].ACM SIGPLAN Notices,2010,45(3):143-154.
[5]Li Longhao,Znati T.AtFP:attention-based failure predictor for extreme-scale computing[C]//Proc of the 13th International Conference on Reliability,Maintainability,and Safety.Piscataway,NJ:IEEE Press,2022:23-27.
[6]Nagappan M,Wu Kesheng,Vouk A M.Efficiently extracting operational profiles from execution logs using suffix arrays[C]//Proc of the 20th IEEE International Conference on Software Reliability Enginee-ring.Piscataway,NJ:IEEE Press,2009:41-50.
[7]Zhu Jieming,He Shilin,Liu Jinyang,et al.Tools and benchmarks for automated log parsing[C]//Proc of the 41st IEEE/ACM International Conference on Software Engineering:Software Engineering in Practice.Piscataway,NJ:IEEE Press,2019:121-130.
[8]馬春明,李秀紅,李哲,等.事件抽取綜述[J].計算機應(yīng)用,2022,42(10):2975-2989.(Ma Chunming,Li Xiuhong,Li Zhe,et al.Survey of event extraction[J].Journal of Computer Applications,2022,42(10):2975-2989.)
[9]Vaarandi R,Pihelgas M.LogCluster:a data clustering and pattern mi-ning algorithm for event logs[C]//Proc of the 11th International Conference on Network and Service Management.Piscataway,NJ:IEEE Press,2015:1-7.
[10]Dai Hetong,Li Heng,Chen Cheshao,et al.Logram:efficient log parsing using n-gram dictionaries[J].IEEE Trans on Software Engineering,2022,48(3):879-892.
[11]Xiao Tong,Quan Zhe,Wang Zhijie,et al.LPV:a log parser based on vectorization for offline and online log parsing[C]//Proc of IEEE International Conference on Data Mining.Piscataway,NJ:IEEE Press,2020:1346-1351.
[12]Hamooni H,Debnath B,Xu Jianwu,et al.LogMine:fast pattern recognition for log analytics[C]//Proc of the 25th ACM International on Conference on Information and Knowledge Management.New York:ACM Press,2016:1573-1582.
[13]Du Min,Li Feifei.Spell:online streaming parsing of large unstructured system logs[J].IEEE Trans on Knowledge and Data Enginee-ring,2019,31(11):2213-2227.
[14]Messaoudi S,Panichella A,Bianculli D,et al.A search-based approach for accurate identification of log message formats[C]//Proc of the 26th Conference on Program Comprehension.New York:ACM Press,2018:167-177.
[15]Nedelkoski S,Bogatinovski J,Acker A,et al.Self-supervised log parsing[M]//Machine Learning and Knowledge Discovery in Databases:Applied Data Science Track.Berlin:Springer-Verlag,2021:122-138.
[16]Jiang Zhenming,Hassan A E,F(xiàn)lora P,et al.Abstracting execution logs to execution events for enterprise applications(short paper)[C]//Proc of the 8th International Conference on Quality Software.Washington DC:IEEE Computer Society,2008:181-186.
[17]Makanju A A O,Zincir-Heywood A N,Milios E E.Clustering event logs using iterative partitioning[C]//Proc of the 15th ACM SIGKDD International Conference on Knowledge Discovery and Data Mining.New York:ACM Press,2009:1255-1264.
[18]He Pinjia,Zhu Jieming,Zheng Zibin,et al.Drain:an online log parsing approach with fixed depth tree[C]//Proc of IEEE International Confe-rence on Web Services.Piscataway,NJ:IEEE Press,2017:33-40.
[19]蒲嘉宸,王鵬,汪衛(wèi).ML-Parser:一種高效的在線日志解析方法[J].計算機應(yīng)用與軟件,2022,39(1):45-52.(Pu Jiachen,Wang Peng,Wang Wei.ML-Parser:an efficient and accurate online log parser[J].Computer Applications and Software,2022,39(1):45-52.)
[20]He Pinjia,Zhu Jieming,Xu Pengcheng,et al.A directed acyclic graph approach to online log parsing[EB/OL].(2018-06-12)[2022-06-30].https://arxiv.org/pdf/1806.04356.pdf.