溫粉蓮
(中國移動通信集團廣東有限公司,廣州 510623)
隨著移動通信的發(fā)展,云計算、大數據、虛擬化等技術的大量應用,業(yè)務系統和網絡架構變得越來越復雜,給運維人員帶來了更高的挑戰(zhàn)。如何有效的管理和監(jiān)控海量的數據來保障系統的穩(wěn)定、減少宕機時間,是系統運營和運維成功與否的關鍵所在。通過自動化的采集、監(jiān)控各類設備指標數據和用戶行為數據,運維人員能有效的掌握系統運行狀況,異常檢測是有效發(fā)現系統潛在故障和用戶異常行為的重要方法。Chandola[1]等人及Numenta[3]公司對異常檢測方法進行了全面的調研,目前常用的異常檢測方法有:
(1)固定閾值法:通常根據業(yè)務專家或者運維專家的經驗知識設定閾值范圍。該方法優(yōu)點是簡單,缺點是需要大量依賴人工經驗,不適用于周期性變化的數據,維護困難。
(2)基于統計學方法:如累計和控制圖(CUSUM)and指數加權移動平均法(EWMA)[1],這種方法的優(yōu)點是效率比較高,缺點是需要預先定義時間窗口,準確性依賴于參數設置。
(3)基于機器學算法:E.Keogh[2]提出了檢測時間序列中異常值的方法。異常檢測在不同的領域也有不同的應用,M.Szmit[4]等人提出了異常檢測在網絡流量上的異常檢測方法,宋海濤[5,6]等人也提出了用戶異常行為的檢測。當前流行的異常檢測算法有:基于分類,基于聚類,基于最近鄰,基于信息理論,這些方法應用到不同領域的異常檢測中,能有效提高檢測的準確度。
本文設計了一種混合模型的時序數據異常檢測算法,將歷史數據按照時間進行劃分,再用grubbs算法剔除歷史數據中的異常點,得到不同時段的動態(tài)閾值,再使用曲線擬合和ARIMA對數據進行訓練得到相應的模型。當對新指標進行異常判斷時,首先通過動態(tài)閾值進行判異,如果輸出為異常,則運用曲線擬合模型計算預測值,與判定值進行比較,如果輸出為異常則進行第三層的判異,即使用ARIMA模型的預測值比較來判斷異常。經過三層判斷為異常的值經過確認后會以事件方式通知告警處理模塊,被判斷為正常的值則直接加入歷史數據中。這種方法不僅提高了準確性,也提高了效率,無需事先進行人工標注,同時自動形成異常檢測的閉環(huán),對周期性、非周期性變化的指標數據都適用,具有很強的通用性。
本文將指標“異?!倍x如下:當指標數據的變化偏離了該時間點的絕大多數數據分布范圍并且不符合某種趨勢變化的凸點或者凹點,認為是異常。
該方法包含以下幾個步驟:
(1)對歷史的時間序列數據進行預處理和特征提取。
(2)利用K-means對數據初步的劃分。
(3)使用Grubbs Test方法剔除每個劃分后的孤立點,生成動態(tài)基線。
(4)使用曲線擬合法對歷史數據進行訓練,得到模型1。(5)使用ARIMA算法對歷史數據進行訓練,得到模型2。
(6)獲取判斷值,預處理后與該時刻的閾值進行比較,如果不在基線內,則判斷為異常并進行第2層的判斷,如果超過3個標準差,則判斷為異常,再進行第3層的判斷,三層判斷均為異常的情況下,最終判斷為異常,否則為正常。
異常檢測系統的結構圖如圖1所示,該系統包含的核心模塊包含:預處理、分類、模型訓練、動態(tài)閾值生成、異常檢測和異常處理。
圖1 指標數據異常檢測系統框架
假設某類指標數據的采集頻率為d分鐘一次,每天產生m個記錄,使用n天的歷史數據作為訓練庫,一共有n*m個記錄作為歷史數據。將這些數據的時間進行歸一化處理,即去掉日期信息,只保留時、分、秒,再將時、分轉換成小時,得到0-24之間的數值,經過歸一化處理后,得到n個維度為m的向量。
經過預處理和特征提取后,我們可以運用聚類算法對數據進行劃分,K-means是最常用的基于劃分的方法,它的原理簡單,計算代價小,聚類效果好,本文采用二分k-means算法來劃分數,可以解決一般的k-means算法收斂于局部最小值的問題。
采用格拉布斯方法,通常取置信概率為95%,其判別方法如下:先將呈正態(tài)分布的等精度多次測量的樣本按從小到大排列,統計臨界系數G(a,n)的值為G0,然后分別計算出G1、Gn:G1=(X-X1)/σ,Gn=(Xn-X)/σ (1) 若G1≥Gn且G1>G0,則X1應予以剔除;若Gn≥G1且Gn>G0,則Xn應予以剔除;若G1<G0且Gn<G0,則不存在“壞值”。然后用剩下的測量值重新計算平均值和標準偏差,還有G1、Gn和G0,重復上述步驟繼續(xù)進行判斷,依此類推。
通過上述的算法我們將歷史數據中的異常值剔除,再計算剩下正常值中的最小、最大和平均值作為該聚類的閾值。
曲線擬合是一種較常用的數據擬合方法,用來找到數據的規(guī)律和模式,系統運行產生的時間序列數據通常滿足某種模式,使用曲線擬合來找到這種模式有利于異常判斷和發(fā)現,本文的曲線擬合采用的是最小二乘法,它使用簡單,高效,易于理解。
這里,假設樣本點的分布不為直線,我們可用多項式曲線擬合,即擬合曲線方程為n階多項式[14]。
采用的是迭代法的梯度下降法求解,其中目標公式定義如下:
采用隨機梯度下降的方法對參數向量求導,使得梯度為0,然后得到參數變量的迭代更新公式。實際實現中,我們采用python的機器學習包numpy進行計算,得到模型。
由于時間序列具有非線性、非平穩(wěn)化、快速變化并且包含噪聲干擾的特點,許多學者對時間序列進行了深入研究,提出了不同的預測模型。本文采用ARIMA算法進行模型的訓練。
算法步驟包括:
(1)對時序數據進行平穩(wěn)化處理,可選的有:移動平均法,加權移動平均法,對數處理,差分處理,分解處理。
(2)在設定最大的AR延遲數max_ar和最大的MA延遲數max_ma后,通過BIC準則進行模型的定階,本文采用的是python的arma_order_select_ic進行自動定階,確定p,q值。
(3)對平滑處理后的模型進行訓練得到擬合參數。
(4)對模型進行還原處理得到模型。
將檢測點時間作為上述ARIMA模型的變量計算上述兩個模型的預測值,
?2=|ρ2-y2|,其中,?2是根據ARIMA模型計算出來的殘差,如果?2>2σ2,則判斷為異常,σ2為近期時序數據的標準差。
本文采用的混合模型算法的第一步是對指標進行粗略的劃分,其中,訪問量的變化是呈一定規(guī)律的,劃分為4類,數據庫的活動會話數值在統計區(qū)間變化很小,大部分的數據集中在20以下,因此只是分為2類,內存數值和CPU數值隨業(yè)務變化不大,都被分為3類。第二步,對劃分后的數據應用grubbs算法剔除異常值,計算正常數值集的最大、最小值,得到每一劃分后的閾值。
圖2 使用KMeans結合grubbs算法進行劃分并剔除異常
本地測試所使用的硬件環(huán)境為一臺i5-6200U 2.3GHz,內存:16GB,64位操作系統,Windows7版本,使用的語言是Python3.6.
3.2.1 時間序列算法性能
在本實驗中使用的訓練數據是1個半月的指標數據,采集粒度為5分鐘,一共12,683條數據,訓練數據10,139條,占總數據的比例為80%,預測數據占總數據的比例為20%,如果預測值與實際值之差超過3個標準差,則認為是異常。
圖3 使用ARIMA算法檢測異常
從圖3可以看到,在相對平穩(wěn)的時間序列使用ARIMA算法預測可以得到比較準確的判斷結果。
通信設備商在實際的系統運維過程中,會對多項用戶指標數據和設備指標數據進行監(jiān)控以便及時發(fā)現潛在的故障和缺數問題,目前的問題是:系統網絡架構復雜多樣,涉及的指標多,使用固定閾值會導致漏告、錯告等問題,為了減少無效告警,提高告警準確率,本文設計了一套混合模型的時間序列指標異常檢測算法,將歷史數據按實際分布進行粗略的聚類,再使用Grubbs算法剔除聚類后的各數據集的異常值,得到動態(tài)的閾值基線作為初步判斷的依據,接下來使用曲線擬合和ARIMA算法對近期的歷史數據(t-5t時間窗口內的數據)進行訓練,用來預測下一窗口的值(5t-6t),如果預測值與實際值的差值超過設定的閾值則產生一個事件,發(fā)送給告警處理模塊進行告警處理,確認為異常的值會使用預測值填入歷史數據,通過不停的迭代,剔除了異常數據,確保了訓練數據的準確性?;旌夏P偷漠惓z測算法結合了統計學算法的高性能,曲線擬合對某一類數據的準確擬合,及ARIMA算法的自動擬合的優(yōu)點,兼顧性能和準確性,能很好的對不同趨勢的數據進行預測和遺產檢測。本算法在真實系統運維場景中使用的結果表明,查全率可以達到100%,平均差準率可以達到95.7%,算法的性能滿足系統要求,通過運用算法將某系統的告警從每天754條壓縮到40條,有效地壓縮了無效告警,提高了問題發(fā)現率。