徐潔
(山西金融職業(yè)學(xué)院 山西省太原市 030008)
在數(shù)據(jù)時代,各種數(shù)據(jù)系統(tǒng)在運(yùn)行的過程中會產(chǎn)生海量的日志,比如系統(tǒng)日志、應(yīng)用日志、網(wǎng)絡(luò)日志、設(shè)備日志等。對日志進(jìn)行分析發(fā)現(xiàn)即使是同一個日志其也有不同的運(yùn)行模式,所以運(yùn)維人員在工作實(shí)踐中很難掌握各類日志的格式,并對其做相應(yīng)的解析原則開發(fā),因此在一般情況下主要是進(jìn)行核心日志的解析[1]。面對日志量大、格式繁多等現(xiàn)狀,通過機(jī)器學(xué)習(xí)進(jìn)行日志異常檢測,這可以迅速的發(fā)現(xiàn)其中的故障并對故障進(jìn)行定位,這對于傳統(tǒng)運(yùn)維方法改進(jìn)和補(bǔ)充等有積極意義,對促進(jìn)系統(tǒng)的職能、穩(wěn)定、全面、安全運(yùn)行等也有顯著價值。
為了更加高效率的定位故障,進(jìn)而實(shí)現(xiàn)對故障的處理,結(jié)合日志的特點(diǎn)基于機(jī)器學(xué)習(xí)對日志異常檢測工作的開展進(jìn)行設(shè)計,這能夠?yàn)楝F(xiàn)階段的工作實(shí)踐提供參考。
對目前各個行業(yè)的數(shù)據(jù)系統(tǒng)應(yīng)用做分析可知各行各業(yè)使用的系統(tǒng)是比較多的,而且由于系統(tǒng)來自于不同的開發(fā)商,所以各個系統(tǒng)在開發(fā)的過程中,日志的定義是難以做到一致性和標(biāo)準(zhǔn)性的,這種情況導(dǎo)致的結(jié)果就是日志呈現(xiàn)出多種多樣的狀態(tài)。對傳統(tǒng)的日志處理方式進(jìn)行分析,其主要是利用關(guān)鍵字和解析規(guī)則兩種方式實(shí)現(xiàn)對日志的監(jiān)控和問題監(jiān)測,不過這兩種方法存在著明顯的不足。
首先是基于關(guān)鍵字匹配對日志進(jìn)行監(jiān)控?;陉P(guān)鍵字匹配存在日志中不一定有關(guān)鍵字異常,比如ORACLE RAC 在啟動的過程中會有一些預(yù)期的Error 等字段,不過這種情況是正常的。簡言之,在不同類型的日志針對過程中,很難標(biāo)注出所有的關(guān)鍵字,而事實(shí)上甚至有些程序日志中根本不會存在類似的關(guān)鍵字,圖1 是常規(guī)方法的日志處理流程。
圖1:常規(guī)方法的日志處理流程
其次是基于配置解析規(guī)則的日志處理[2]?;谂渲媒馕鲆?guī)則可以實(shí)現(xiàn)對日志的字段監(jiān)控,如正則表達(dá)式的方法雖然比基于關(guān)鍵字的一日志監(jiān)控有了一些改進(jìn),但是依然存在著兩方面的顯著缺陷:
(1)規(guī)則存在著復(fù)雜性。一些日志存在著大量的格式,解析工作是非常復(fù)雜的,往往需要花費(fèi)大量的時間來進(jìn)行調(diào)試。
(2)性能差。需要實(shí)時對來自多個系統(tǒng)的海量日志進(jìn)行多個規(guī)則解析,性能表現(xiàn)比較差。
傳統(tǒng)的日志處理方法存在著諸多缺陷,所以為了提高日志處理的實(shí)際效果,需要對傳統(tǒng)方法進(jìn)行改造。立足于日志系統(tǒng)的基本架構(gòu)(圖2)對系統(tǒng)日志的故障診斷或者是主動檢測引入機(jī)器學(xué)習(xí)方法,這樣可以實(shí)現(xiàn)日志模板的自動提取,而且可以通過分析從歷史故障當(dāng)中發(fā)現(xiàn)與之相關(guān)的模式,這樣可以準(zhǔn)確的檢測出異常。就日志模板而言,支持增量式學(xué)習(xí)是一個重要且必備的能力[3]。在工作實(shí)踐中,運(yùn)維人員經(jīng)常部署軟件或者是硬件升級以引入新的特征,或者是解決以往版本的程序錯誤,這些更新工作可能會產(chǎn)生新的系統(tǒng)日志消息,而這些新的系統(tǒng)日志是難以映射到任何現(xiàn)有模板上的,所以需要從新的系統(tǒng)日志消息當(dāng)中做新的模板提取,并且將其加入到模板集合當(dāng)中。
圖2:日志系統(tǒng)的基本架構(gòu)
結(jié)合現(xiàn)階段的具體實(shí)踐需要并基于機(jī)器學(xué)習(xí)對日志智能異常檢測進(jìn)行設(shè)計,具體的設(shè)計思路如下:
(1)日志分詞。分詞的作用是進(jìn)行完整日志分割,這樣便可以得到若干詞語構(gòu)成序列。文本日志當(dāng)中會有大量關(guān)鍵詞存在,且這些關(guān)鍵詞并不會在一般的文本中出現(xiàn)。就關(guān)鍵詞的研究來看,其會提供一些與系統(tǒng)存在關(guān)系的內(nèi)容,而且這些內(nèi)容的特征是非常顯著的,圖3 是日志檢測示意圖[4]。
圖3:基于深度模型的日志檢測示意圖
(2)提取模板。在海量日志的基礎(chǔ)上進(jìn)行模板的自動提取,并進(jìn)行變量,同時利用自然語言處理技術(shù)可以對日志當(dāng)中存在的共性進(jìn)行分析,而且還可以在分析中發(fā)現(xiàn)常見模式,這可以保證日志模板提取的有效性。在日志提取模板工作結(jié)束之后進(jìn)行日志文本結(jié)構(gòu)化,這樣可以將冗余的數(shù)據(jù)進(jìn)行清理。在日志智能異常檢測的過程中,使用到的關(guān)鍵技術(shù)之一便是提取日志模板以及變量。
(3)檢測異常。結(jié)合獲取的模板計數(shù)和變量對做日志的異常檢測,根據(jù)之前提取的日志模板來做流動式日志處理以及數(shù)據(jù)分析,這樣可以抽取出特定類型的變量分布情況,比如文件路徑的長度、文件的傳輸速度等等。之后利用單指標(biāo)異常檢測方法和變量相關(guān)度分布度量可以實(shí)現(xiàn)日志當(dāng)中數(shù)據(jù)的異常檢測[5]。
(4)數(shù)據(jù)集成。在經(jīng)過了異常檢測之后需要將數(shù)據(jù)和數(shù)據(jù)展示平臺進(jìn)行整合,從而產(chǎn)生生產(chǎn)實(shí)際價值。其中,智能運(yùn)維數(shù)據(jù)分析平臺從數(shù)據(jù)采集源或者是第三方提供的數(shù)據(jù)庫當(dāng)中進(jìn)行數(shù)據(jù)來源的獲取,在經(jīng)過分類提取、整合與入庫之后,可以分別按照流式在線和批式兩種方法進(jìn)行消費(fèi)。產(chǎn)生的分析結(jié)合和告警信息會分別通過數(shù)據(jù)接口和告警信息列隊提供給前端和第三方平臺。用戶和第三方平臺能夠通過前端或者是接口到進(jìn)行數(shù)據(jù)的獲取、散發(fā)分析和告警推送流程配置。就整個過程而言,具體的運(yùn)行機(jī)制為:數(shù)據(jù)隊列,由采集平臺主動寫入數(shù)據(jù)或者是由訂閱系統(tǒng)從第三方系統(tǒng)當(dāng)中定時獲取數(shù)據(jù),并會通過隊列的方式來為智能運(yùn)維數(shù)據(jù)平臺系統(tǒng)消費(fèi)提供保障。數(shù)據(jù)庫,數(shù)據(jù)庫主要是備份獲取的數(shù)據(jù),并生成、存儲智能分析模型元數(shù)據(jù),同時存儲分析結(jié)果實(shí)時數(shù)據(jù)。告警信息隊列,流失計算產(chǎn)生的異常和告警信息均會通過該信息隊列由第三方進(jìn)行訂閱[6]。RestAPI 接口,既可以用于采集平臺主動推送數(shù)據(jù),也可以對接北向接口,由應(yīng)用系統(tǒng)或其他三方系統(tǒng)獲取分析數(shù)據(jù)并進(jìn)行調(diào)整,圖4 是數(shù)據(jù)集成的具體圖示。
圖4:數(shù)據(jù)集成圖示
在日志智能異常檢測工作的具體開展中,對檢測的核心算法技術(shù)進(jìn)行分析,并明確核心算法技術(shù)的應(yīng)用價值和應(yīng)用規(guī)律,這對于更好的發(fā)揮算法技術(shù)優(yōu)勢有顯著意義。以下是在此次日志異常檢測設(shè)計中使用到的核心算法技術(shù)。
通過系統(tǒng)日志預(yù)處理方法從歷史系統(tǒng)日志當(dāng)中進(jìn)行模板提取,然后將日志的消息在模板上進(jìn)行映射,模板提取準(zhǔn)確率以及支持增量學(xué)習(xí)是處理海量日志過程中需要考慮的關(guān)鍵性要素。
對日志的異常識別算法進(jìn)行分析,數(shù)據(jù)表現(xiàn)場景的異常識別主要使用的是LogClass 算法,無監(jiān)督的異常識別使用的是DeepLog 算法,對這種算法的具體使用做分析,提前準(zhǔn)備數(shù)據(jù)標(biāo)簽的行為可以省略[7]。對日志根因定位進(jìn)行分析,為了保證定位的準(zhǔn)確性,在實(shí)踐中主要是利用FOCUS 算法,其能夠基于系統(tǒng)日志做快速的分析,進(jìn)而確定導(dǎo)致響應(yīng)延時增加的條件。除了上述的算法之外,在日志智能異常檢測的過程中還會利用到SyslogDigest 算法,這種算法針對的是網(wǎng)絡(luò)設(shè)備的syslog,利用這種算法可以將網(wǎng)絡(luò)事件按照優(yōu)先級進(jìn)行排序。對日志模板的生成方法進(jìn)行分析,主要利用的是FT-tree 法,利用該方法生成日志模板之后能夠?qū)δ0宓念悇e等進(jìn)行統(tǒng)計,還能夠在異常檢測中發(fā)揮作用,這樣,分析人員的工作效率可以獲得顯著提升。圖5 為某企業(yè)的添加搜索任務(wù)的日志模板提取示意圖。
圖5:某企業(yè)的日志模板提取示意圖
對以上的幾種算法進(jìn)行深入調(diào)研,可以結(jié)合行業(yè)的特點(diǎn)或者是企業(yè)的具體特點(diǎn)來對具體的方法利用進(jìn)行選擇。比如某證券企業(yè)在日志異常檢測的過程中,從企業(yè)自身的特點(diǎn)出發(fā)選擇了FT-tree 作為日志模板提取和異常檢測算法,同時還結(jié)合了KPI 異常檢測法,兩種方法的結(jié)合實(shí)現(xiàn)了日志的智能異常檢測。
對目前實(shí)踐中使用的分詞算法進(jìn)行統(tǒng)計,其主要分為基于字符串匹配的分詞方法、基于理解的分詞方法和基于統(tǒng)計的分詞方法三大類。在分詞算法的具體分類中,基于詞性標(biāo)注過程的結(jié)合標(biāo)準(zhǔn)又可以進(jìn)行劃分,即為單純分詞算法、分詞與標(biāo)注結(jié)合算法。對海量的日志進(jìn)行分析,其格式存在著變化特征,所以不可使用通標(biāo)標(biāo)準(zhǔn)的方法對其進(jìn)行有效分析,這種情況下,將單純分詞方法與FT-tree 進(jìn)行結(jié)合,這樣,模板以及特征變量的提取效果會顯著好轉(zhuǎn)。
就實(shí)踐中的FT-tree 應(yīng)用分析來看,其是一種具有拓展特性的前綴樹結(jié)果,主要作用是表示日志消息模板。結(jié)合目前的應(yīng)用實(shí)踐做分析可知FT-tree 的使用準(zhǔn)確率是比較突出的,而且在應(yīng)用的過程中其能夠支持增量學(xué)習(xí)[8]。立足于FT-tree 算法對日志智能異常檢測模型進(jìn)行構(gòu)建,并強(qiáng)調(diào)模型基礎(chǔ)上的日志數(shù)量完善以及更新,這樣可以將日志模板進(jìn)行轉(zhuǎn)變,使其成為模板序列,這對于完成異常檢測目的有積極意義。
對基于FT-tree 的日志模板提取算法進(jìn)行分析,其流程主要分為三個部分,分別是分詞、模板的提取和修正統(tǒng)計。分詞部分主要是對通用文本分詞和變量進(jìn)行提取,這項工作的完成可以制作專門的編譯器來進(jìn)行,這樣,只需要對日志進(jìn)行一次遍歷即可以提取指定的所有類型變量和詞語[9]。在工作過程中,基于實(shí)際需要,可以預(yù)留接口其主要針對的是自定義特別大的時間戳進(jìn)行運(yùn)維人員定制提取,這部分采用正則表達(dá)式匹配的方式實(shí)現(xiàn)。兩種方式結(jié)合整體提取效率能夠達(dá)單核每秒處理上萬條文本日志。
FT-tree 是實(shí)踐中使用的核心模板提取算法,這種算法本質(zhì)上是一種基于詞頻統(tǒng)計的詞典樹構(gòu)造-檢索算法。相對于絕大多數(shù)傳統(tǒng)模板提取方法(例如常見的聚類方法),F(xiàn)TTree 可以以線性時間完成更高精度的提取,在訓(xùn)練樣本數(shù)據(jù)量較大(千萬級別)時優(yōu)勢更加明顯。
日志模版和關(guān)鍵值完成提取后,采用KPI 異常檢測算法進(jìn)行分析和檢測,根據(jù)時間序列的特征,計算資源的分配以及數(shù)據(jù)的時間來合理選用不同的模型組合來訓(xùn)練并生成對應(yīng)的模型,其中所采用的技術(shù)和算法包括:變分自編碼器、漸進(jìn)梯度回歸樹、差分指數(shù)滑動平均、極值理論、周期性中值檢測[10]。數(shù)據(jù)積累到一定程度即可開始在實(shí)際環(huán)境中在線檢測,在線檢測使用已訓(xùn)練好的模型對應(yīng)的關(guān)鍵特征生成算法來生成新的時間點(diǎn)的特征,并用已訓(xùn)練好的模型對新的時間點(diǎn)的異常程度打分,從而來判斷異常。
綜上所述,在數(shù)據(jù)時代,數(shù)據(jù)信息的重要性表現(xiàn)越來越明顯,所以在社會實(shí)踐中需要關(guān)注數(shù)據(jù)的利用,同時要強(qiáng)調(diào)數(shù)據(jù)信息的準(zhǔn)確性和有效性。各行各業(yè)在工作實(shí)踐中會利用大量的系統(tǒng),這些系統(tǒng)在運(yùn)行的過程中會產(chǎn)生海量日志,而這些日志其實(shí)就是系統(tǒng)運(yùn)行數(shù)據(jù)。通過日志的分析與檢測發(fā)現(xiàn)其中存在的問題,重要是找到異常日志,并結(jié)合異常日志的分析確定系統(tǒng)運(yùn)行的故障等問題,這對于文維護(hù)系統(tǒng)運(yùn)行穩(wěn)定等有積極的意義。傳統(tǒng)的日志處理方法存在著諸多缺陷,不符合日志智能異常檢測的具體需要,所以基于機(jī)器學(xué)習(xí)對日志智能異常檢測進(jìn)行研究,明確智能異常檢測的具體思路,同時對檢測工作中的關(guān)鍵性技術(shù),主要是利用的算法等進(jìn)行明確,這于實(shí)踐有顯著價值。