樊建昌 余粟
摘 要:為了解決服務器運行過程中由于性能故障造成服務質(zhì)量下降的問題,提出一種基于決策樹的日志分析方法,以服務器日志文件中記錄服務器關(guān)鍵性能指標的數(shù)據(jù)為研究對象,利用決策樹中常用的ID3、C4.5和CART 3種算法預測服務器未來性能指標發(fā)展趨勢。實驗結(jié)果表明,在實際運行過程中,C4.5算法對服務器性能指標數(shù)據(jù)預測的準確率和召回率最好,分別達到了92.23%和95.37%,在3種決策樹算法中擁有最高的準確率與召回率,且相比傳統(tǒng)開發(fā)人員從日志文件中尋找故障的方法,準確率提高了20%左右,因此能夠更好地預測服務器系統(tǒng)性能指標發(fā)展趨勢。通過該方法可提前感知系統(tǒng)運行狀況,并及時作出調(diào)整,從而有效降低實際生產(chǎn)過程中服務器故障發(fā)生概率,提高服務質(zhì)量。
關(guān)鍵詞:決策樹算法;日志分析;Spark;大數(shù)據(jù)
DOI: 10. 11907/rjdk.191343
開放科學(資源服務)標識碼(OSID):
中圖分類號:TP301
文獻標識碼:A
文章編號:1672-7800(2020)001-0099-04
0 引言
隨著互聯(lián)網(wǎng)的快速發(fā)展,信息系統(tǒng)在人們?nèi)粘I钪邪l(fā)揮著越來越重要的作用。信息系統(tǒng)服務器一旦發(fā)生故障,將會嚴重影響公司日常業(yè)務的開展。因此,對運行中的服務器定期進行安全檢查,確定服務器當前運行狀況以及可能存在的安全隱患顯得尤為重要[1]。
在軟件系統(tǒng)運行過程中,軟件系統(tǒng)各部分運行狀態(tài)以及運行過程數(shù)據(jù)都會以日志形式保存下來[2]。根據(jù)統(tǒng)計,在Cithub等常用開源平臺上,絕大部分開源項目文件的每30行代碼中,就有一行用來記錄項目運行過程中產(chǎn)生的日志[3]。此外,在實際生產(chǎn)領(lǐng)域,若重新創(chuàng)建與生產(chǎn)環(huán)境完全一致的開發(fā)環(huán)境,成本非常高昂,所以生產(chǎn)環(huán)境中打印的日志文件往往成為研究人員進行服務器故障診斷預測的唯一數(shù)據(jù)來源[4]。
自從有學者提出利用日志文件進行服務器故障診斷預測以來,基于日志文件分析系統(tǒng)故障的方法開始受到越來越多人重視。傳統(tǒng)由資深開發(fā)人員基于系統(tǒng)產(chǎn)生的日志文件查找系統(tǒng)潛在故障的準確率一般在70% - 80%之間[5-6],通過該方式進行故障分析,不僅費時費力,而且準確率不高。PREWETT[7]將專家知識表示為一系列規(guī)則進行故障診斷,規(guī)則可以人為擴展,并且是可解釋的,但該技術(shù)的缺點是不能診斷未知錯誤,知識庫也不易維護;Zhu等[8]將系統(tǒng)定義為數(shù)學表示,通過測試觀察到的行為驗證其是否滿足模型,該技術(shù)適合診斷應用級別問題,但模型構(gòu)建需要對系統(tǒng)有深刻理解;韓凱等[9]利用經(jīng)驗數(shù)據(jù)結(jié)合日志文件進行關(guān)聯(lián)分析,同時結(jié)合統(tǒng)計理論對網(wǎng)絡(luò)系統(tǒng)進行故障診斷,而不需要對系統(tǒng)內(nèi)部或模型有深入了解,但其難以診斷系統(tǒng)的非穩(wěn)態(tài)性故障。還有部分學者采用聚類方法分析日志文件,使用訓練數(shù)據(jù)確定系統(tǒng)狀態(tài)是否健康,找出故障潛在原因,該技術(shù)可以自動學習系統(tǒng)行為,但當數(shù)據(jù)特征維度變大時,精確度會下降[10-12]。如李剛等[13]將動態(tài)時間閾值和屬性相異度相結(jié)合對日志文件進行分析,診斷出系統(tǒng)運行過程中的短暫與間歇性錯誤,但該方法很大程度上依賴于參數(shù)校正;宋永生等[14]利用可視化數(shù)據(jù)生成圖表,由圖表進一步分析故障發(fā)生位置,該方法便于解釋與評估,但該方法最大的問題在于不能自動識別故障具體位置。
本文基于Spark分布式計算引擎[15],采用決策樹中常用的3種算法對系統(tǒng)產(chǎn)生的日志文件進行分析,并從召回率、準確率等方面進行對比,選擇準確率和召回率最佳的C4.5算法作為日志分析方法。該方法可以自動從原始日志文件中提取關(guān)鍵性能指標進行日志分析,對服務器運行狀態(tài)進行及時診斷,并對服務器可能發(fā)生的故障進行預測,具有良好的實時性和準確性。
1 決策樹算法
決策樹算法[16]是一種典型分類方法,首先對原始數(shù)據(jù)進行處理,并歸納生成可讀規(guī)則,該規(guī)則一般以樹的結(jié)構(gòu)體現(xiàn),所以稱為決策樹。當需要對新數(shù)據(jù)進行分類時,只需利用決策樹對新數(shù)據(jù)進行分析,即可得到分類結(jié)果,該方法已在大數(shù)據(jù)挖掘中得到廣泛應用。
決策樹是一個有向無環(huán)樹,樹的每個非葉節(jié)點對應訓練樣本集中的一個屬性,非葉節(jié)點的分支對應屬性的一個數(shù)值劃分,每個葉節(jié)點代表一個類,從根節(jié)點到葉節(jié)點的路徑稱為一個分類規(guī)則。決策樹構(gòu)建主要通過對屬性選擇進行度量,目前屬性度量方式主要有3種:信息增益、信息增益率和Gini指標。
1.1信息熵
熵是物理學和信息論中的一個重要概念[17],用來衡量一個數(shù)據(jù)分布的無序程度。對于一個訓練樣本而言,其熵越小,則訓練樣本的無序度越小,即訓練樣本越有可能屬于同一類。信息增益即是一種通過樣本信息熵進行度量的方法,集合D中某個樣本屬于第k類樣本的概率為第k
1.3 C4.5算法
在ID3算法中,信息增益對取值數(shù)目較多的屬性有所偏好,當所有分支均只包含一個樣本時,分支純度最大,但該決策樹有一個明顯缺點,即不具備泛化能力,無法對新樣本進行預測。C4.5決策樹算法即是為了提高決策樹泛化能力而提出的[19],其采用信息增益率進行特征選擇。其中,增益率定義為:
其中,IV(a)稱為屬性a的固有值,當屬性a的潛在值數(shù)目越多,屬性a的固有值則越大。在具體算法實現(xiàn)過程中,首先從候選劃分屬性中找出信息增益率高于平均水平的屬性,再從中選擇增益率最高的屬性作為最終數(shù)據(jù)分類依據(jù)。
1.4 CART算法
CART決策樹算法采用Gini指數(shù)選擇屬性劃分,具體定義為:
Gini(D)反映了從數(shù)據(jù)集D中隨機抽取兩個樣本標記類別不一致的概率。Gini(D)越小,數(shù)據(jù)集D的純度越高[20]。
2 實驗平臺及數(shù)據(jù)準備
2.1 實驗平臺
圖1為實驗環(huán)境拓撲圖,其中客戶端使用Dell 7567筆記本,Liberty服務器與4臺Spark集群均使用宏碁Veriton臺式機,硬件配置為:雙核CPU,16G內(nèi)存,2T硬盤。Liber-ty服務器部署WebSphere Application ServerV8.5服務器,提供Web服務。同時,Libertv服務器和4臺Spark集群都通過docker安裝Spark-2.2.0 -Hadoop-2.7與Hive 2.2.0,配置Master節(jié)點和Worker節(jié)點。
2.2 數(shù)據(jù)準備與數(shù)據(jù)清洗
本文選取某電商網(wǎng)站一年的交易服務器日志數(shù)據(jù)作為訓練數(shù)據(jù)。以Smin為時間間隔進行數(shù)據(jù)統(tǒng)計,共有105 120個實例,每個實例都有其標記數(shù)據(jù),根據(jù)當天的系統(tǒng)性能狀況,由專業(yè)工程師進行標注。對于每個實例,選出32 000個能夠體現(xiàn)系統(tǒng)性能的屬性。由于日志分析系統(tǒng)是根據(jù)性能指標的歷史趨勢進行預測的,對105 120個實例以7天為周期向前回溯,可以重疊,最終生成103 392個實例。
在日志提取過程中,對于未提取出來的數(shù)據(jù),本文將以null的形式展現(xiàn)出來。在進行機器學習之前,以不影響總體數(shù)據(jù)分布為前提,對未提取出來的日志數(shù)據(jù)作殘缺值處理。由于日志數(shù)據(jù)所有屬性均為數(shù)值類型,在實際操作中以7天為一個周期,在7天內(nèi)某個數(shù)據(jù)屬性的殘缺值出現(xiàn)次數(shù)在3以下,則將當前屬性其它數(shù)值的平均值作為該屬性殘缺值,如果當前屬性的殘缺值數(shù)量在4個以上,則將其它相關(guān)屬性平均值作為當前屬性的殘缺值。在機器學習中,由于無關(guān)屬性會在很大程度上影響分類器性能,所以在機器學習之前進行屬性選擇是非常必要的,保留一些最相關(guān)的屬性,而將其它不相關(guān)或相關(guān)性非常小的屬性去除。
本文利用主成分分析法對日志數(shù)據(jù)進行清洗,通過旋轉(zhuǎn)變換對線性空間中的原始數(shù)據(jù)進行基變化,使變換后的數(shù)據(jù)投影在新坐標軸上,并使其方差最大化。剔除變換后方差最小的坐標軸,新坐標軸即為主成分[21]。主成分分析法是一種比較常見的降維方法,廣泛應用于機器學習的數(shù)據(jù)降維問題中。利用Spark MLlib工具箱對主成分分析法加以實現(xiàn),對32 000個屬性進行降維操作,最終選取28 000個屬性進行最后的機器學習模型訓練。
3 實驗方法及結(jié)果
3.1 實驗流程
在日志分析模塊,所有性能指標都標注了是否有故障以及故障類型。由日志提取模塊生成的系統(tǒng)性能指標,可以根據(jù)歷史標注數(shù)據(jù)形成的訓練模塊判斷出當前系統(tǒng)是否有故障以及故障類型,所以日志分析模塊所采用的機器學習算法是監(jiān)督學習。日志分析預測結(jié)果為當前CICS交易服務器在未來發(fā)生性能故障的概率,在實際訓練預測模型時,將原始數(shù)據(jù)集保留一部分作為測試集,剩余部分作為訓練集,在隨機選取訓練樣本過程中保證測試集和訓練集中每個樣本比例大致相同,以減小取樣造成的誤差。本文使用十折交叉驗證法生成預測模型,將原始數(shù)據(jù)源分成10份,進行10次訓練,每次選取其中1份作為測試樣本,其余9份作為訓練樣本。該方法既能夠保證每個樣本都有一次機會用于測試,又沒有樣本進行重復測試,因此試驗結(jié)果較好。
當模型建立之后,需要制定預測模型性能評估標準,本文使用誤差率衡量預測模型的預測效果,誤差率是指不正確分類在整個實例集中所占比例。在模型實際訓練過程中,可能產(chǎn)生4種結(jié)果,如表1所示。其中,數(shù)據(jù)集標簽有Yes和No兩種,分別表示服務器有性能故障與無性能故障;預測結(jié)果也有Yes和No兩種,分別表示服務器會產(chǎn)生性能故障和不會產(chǎn)生性能故障。因此,模型預測結(jié)果有4種:正確的肯定TP( True Positive)表示數(shù)據(jù)標簽是Yes,預測結(jié)果也是Yes的情況;正確的否定TN( True Negative)表示數(shù)據(jù)標簽是No,預測結(jié)果也是No的情況;錯誤的肯定FP( False Positive)表示數(shù)據(jù)標簽是No,預測結(jié)果是Yes的情況;錯誤的否定FN( False Negative)表示數(shù)據(jù)標簽是Yes,預測結(jié)果是No的情況。其中,正確的肯定和正確的否定都是正確的預測結(jié)果。另外,一般稱錯誤的否定為漏報,而稱錯誤的肯定為誤報。在日志分析系統(tǒng)中,漏報的代價大于誤報的代價,因為誤報只會浪費工程師時間以確認是否會產(chǎn)生性能故障,而漏報則會使工程師忽略問題,導致問題真實發(fā)生,產(chǎn)生嚴重后果。
3.2 實驗結(jié)果
本文使用Spark的MLlib工具箱,借助十折交叉驗證法對訓練數(shù)據(jù)集進行驗證,分別利用ID3、C4.5和CART 3種不同算法對數(shù)據(jù)進行訓練。結(jié)果如表2所示,從中可看出3種算法的準確率都高于85%,其中,C4.5算法的召回率最高,即能查出性能故障的概率更高。圖2為3種算法實驗結(jié)果的ROC曲線對比結(jié)果,從中可以看出C4.5算法在FPR較高時準確率更高,ID3算法在FPR較低時準確率更高。日志分析系統(tǒng)需要盡可能提高模型召回率,因此可以相應降低對準確率的要求,本文最終選取C4.5算法進行系統(tǒng)日志分析。
4 結(jié)語
由實驗結(jié)果可以看出,本文設(shè)計的日志分析方法可以自動對原始日志文件進行分析,從而解決了軟件工程師手動查取日志文件進行系統(tǒng)故障判斷較為費時費力的問題。相比傳統(tǒng)手工方法,其故障判斷的準確率及效率都提高了20%左右。使用分布式計算引擎進行日志分析,相對于傳統(tǒng)的串行查詢,提高了日志分析速度,而且易于擴展。未來可根據(jù)具體日志業(yè)務特點進行更加精準的建模,以進一步提高模型預測準確率,避免服務器故障的發(fā)生。
參考文獻:
[1]YUAN D,PARK S,ZHOU Y.Characterizing logging practices inopen-source software[C].Proceedings of the 34th International Con-ference on Software Engineering. IEEE Press, 2012: 102-112.
[2]SHARMA C, JHAPATE A.A survey: analytics of web log file throughmap reduce and Hadoop [Jl. International Journal of Scientific Re-search&Engineering Trends, 2016,2:2395-566X.
[3] LIN X,WANG P,WU B.Log analysis in cloud computing environ-mentWith Hadoop and Spark[C].Broadband Network&MultimediaTechnology (IC-BNMT), 2013 Sth lEEE International Conference omIEEE, 2013:273-276.
[4]SHUSHUAI Z H U,AKALI H,RUSSELL J,et al.Method and systemfor implementing collection-wise cessing in a log analytics system[ P].U.S. Patent Application 15/089, 129, 2017-1-5.
[5]廖湘科,李姍姍,董威,等.大規(guī)模軟件系統(tǒng)日志研究綜述[J].軟件學報,2016, 27(8):1934-1947.
[6]VULYA S P. JOSHI K, DI GIANDOMENICO F, et al. Failure diag-nosis of complex systems[M].Heidelberg: Springer, 2012: 239-261.
[7]PREWETT J E.Analyzing cluster log files using Logsurfer[C]. Pro-ceedings of the 4th Annual Linux Showcase& Conference. 2003:169-176.
[8]ZHU J,HE P, FU Q, et al. Learning to log: helping developers makeinformed logging decisions[C].Proceedings of the 37th InternationalConference on Software Engineering, 2015: 415-425.
[9] 韓凱,趙國慶,胡天宇,等,基于日志分析的虛擬機智能運維[J].信息與電腦:理論版,2018( 20):7-10.
[10]鐘雅,郭淵博.基于機器學習的日志解析系統(tǒng)設(shè)計與實現(xiàn)[Jl.計算機應用,2018,38(2):352-356.
[11] 馬文,朱志祥,吳晨,等.基于FP-Growth算法的安全日志分析系統(tǒng)[J].電子科技,2016.29(9):94-97.
[12] 張日如.聚類分析在Web日志中的應用[J].信息與電腦:理論版.2019(2):116-117.
[13]李剛,陳怡瀟,黃沛爍,等.基于日志分析的信息通信網(wǎng)絡(luò)安全預警研究[J].電力信息與通信技術(shù),2018,16(12):1-8.
[14] 宋永生,吳新華.基于Pvthon的Moodle學習平臺日志分析[Jl.計算機時代,2018( lO):19-21,25.
[15]ZAHARIA M. CHOWDHURY M, FRANKLIN M J,et al. Spark:cluster computing with working sets[J].HotCloud, 2010, 10: 95.
[16]周志華機器學習[M].北京:清華大學出版社,2016.
[17]葉韻.深度學習與計算機視覺[M].北京:機械工業(yè)出版社,2017.
[18]張小軒.ID3算法的研究及優(yōu)化[D].青島:山東科技大學,2017.
[19]沈亮亮,蒙祖強,張兵,等.面向不完備數(shù)據(jù)的改進C4.5算法研究[J].軟件導刊,2018.17(6):95-99.
[20]史選民,史達偉,郝玲,等.基于數(shù)據(jù)挖掘CART算法的區(qū)域夏季降水日數(shù)分類與預測模型研究[J].南京信息工程大學學報:自然科學版,2018,10(6):760-765.
[21]MENG X. BRADLEY J,YAVUZ B. et al. Mllib: machine learningin Apache spark[Jl. The Journal of Machine Learning Research,2016, 17(1):1235-1241.
(責任編輯:黃健)
基金項目:上海市科委創(chuàng)新行動計劃項目( 17511110204)
作者簡介:樊建昌(1994-),男,上海工程技術(shù)大學機械與汽車工程學院碩士研究生,研究方向為計算機視覺及數(shù)據(jù)挖掘。