劉峰麟,殷銘,袁平
(1.四川大學計算機學院,成都 610065;2.東華大學信息科學與技術學院,上海 201620;3.重慶第二師范學院數(shù)學與信息工程學院,重慶 400067)
異常檢測是從一個數(shù)據(jù)集合當中檢測出和推斷的預期值不一致的數(shù)據(jù)元素,這些和預期值不吻合的數(shù)據(jù)元素,就被稱為異常。異常檢測廣泛應用于信用卡欺詐檢測、網(wǎng)絡的入侵檢測等多個領域中[1]。隨著互聯(lián)網(wǎng)的高速發(fā)展,以及微服務的大規(guī)模實踐,龐大的后臺系統(tǒng)每天產(chǎn)生大量的時序數(shù)據(jù)。從大量的時序數(shù)據(jù)中準確檢測出異常,及時觸發(fā)報警、排出故障對于保證互聯(lián)網(wǎng)服務的高可用有重大意義。異常檢測作為工業(yè)界服務器后臺智能運維的重要組成部分,在各大公司都有著廣泛應用。通過統(tǒng)計后臺機器的關鍵指標信息構成時序數(shù)據(jù),進行異常檢測,可以極大降低運維成本。例如,騰訊有自研的Metis,采用統(tǒng)計、無監(jiān)督、監(jiān)督的方式對內部應用指標進行異常檢測,以降低運維成本;推特、雅虎、領英等知名互聯(lián)網(wǎng)公司都開源有自己的異常檢測工具。
異常從類型上可以分為三類:點異常、上下文異常、集合異常[1]。如果單個數(shù)據(jù)相對于其余數(shù)據(jù)可以被認為是異常的,則該數(shù)據(jù)被稱作點異常。如果數(shù)據(jù)在特定上下文中是異常的,但是在其他情況下不是異常,則該數(shù)據(jù)被稱為上下文異常。如果數(shù)據(jù)所在的集合和該集合同處于一個數(shù)據(jù)集的其他兄弟集合不一致,則稱該集合為集合異常。時序數(shù)據(jù)的異常檢測有基于插件的方法和基于分解的方法[2]?;诓寮姆椒ㄊ歉鶕?jù)歷史時序數(shù)據(jù)集合,通過時序預測算法,得到未來一段時間的時序數(shù)據(jù),若對于i時刻,存在,則認為i時刻存在異常,反之則正常?;诓寮侵赴呀?jīng)典的時序數(shù)據(jù)預測算法作為插件,嵌入到異常檢測算法中?;诜纸獾姆椒ㄊ菍r序數(shù)據(jù)進行分解,提取周期、趨勢、季節(jié)性、自相關、非線性、偏態(tài)、峰度、林中小丘、李亞普諾夫指數(shù)等特征,通過檢測噪聲成分,如果噪聲分量,則認為是異常,反之則正常。在時序數(shù)據(jù)的異常檢測中,Nikolay等人[2]采用3σ準則,假定數(shù)據(jù)的分布服從正態(tài)分布。在正態(tài)分布的數(shù)據(jù)中,σ表示標準差,μ表示均值,3σ準則認為 99.7%的數(shù)據(jù)都在(μ-3σ,μ+3σ)區(qū)間內。然而,在數(shù)據(jù)不是正太分布的情況下,無法選出正確閾值。Zhao[3]提出枚舉所有的閾值,并采用F-score作為度量來避免閾值選擇問題。枚舉閾值的方式會帶來大量的計算,增加異常檢測的時間延遲,回避了閾值選擇的問題。為了解決上述問題,本文利用EWMA算法對時序數(shù)據(jù)進行預測建模,然后利用衡量預測精度的指標建立誤差模型,提出了一個基于DBSCAN的時序數(shù)據(jù)異常檢測閾值選擇算法來對每個指標選擇閾值,從而檢測時序數(shù)據(jù)的異常,提高準確率。
建立時序模型是指對后臺系統(tǒng)關鍵指標信息采集的數(shù)據(jù)進行建模,得到關鍵指標數(shù)據(jù)的觀測時序數(shù)據(jù)模型和預測時序數(shù)據(jù)模型。時序模型建立的流程如圖1所示。關鍵指標數(shù)據(jù)主要包括服務器運行時的CPU、I/O等數(shù)據(jù),通過監(jiān)控任務進行定時采集可以得到關鍵指標的書序數(shù)據(jù)。時序數(shù)據(jù)通過提前部署到服務器的程序進行采集,因而一般有著固定時間間隔。通常時序數(shù)據(jù)是完整的,但在個別情況下時序數(shù)據(jù)會出現(xiàn)數(shù)據(jù)丟失的情況。建立時序模型首先通過多個數(shù)據(jù)點提取原始時序數(shù)據(jù)的采樣間隔時間,其中i是數(shù)據(jù)點的邏輯索引。若>interval,則進行線性差值,插入序列到點i和i+1之間,插值后的到完整的觀測序列。經(jīng)典的時序預測算法有MA(Moving Average)、HW(Holt Winter)等,MA(Moving Average)是通過創(chuàng)建數(shù)據(jù)集的不同子集的平均數(shù)來分析數(shù)據(jù)點的技術。MA也是一種卷積,過濾掉了時間序列中的高頻擾動,保留有用的低頻趨勢。MA通常與時間序列數(shù)據(jù)一起使用,以平滑短期波動,突出長期趨勢或周期。MA的衍生改進算法版本有SMA、WMA等。EWMA(Exponentially Weighted Moving Average)又稱作EMA(Exponential Moving Average)是采用指數(shù)衰減加權因子的一階無限沖激響應濾波器。對于時序數(shù)據(jù)的EWMA序列可以表示
其中,系數(shù)α表示權重降低的程度,是介于0和1之間的常數(shù)平滑因子。根據(jù)線性插值補全數(shù)據(jù)得到完整的觀測時序數(shù)據(jù)模型和預測時序數(shù)據(jù),可以建立誤差模型。誤差模型的度量指標由計算預測精度的三個主要指標構成,它們分別是:MAE(Mean Absolute Error)、MAPE(Mean Absolute Percentage Error)、MASE(Mean Absolute Scaled Error)。對于有:
圖1 時序模型建立流程圖
DBSCAN是經(jīng)典的聚類算法,它依靠數(shù)據(jù)點間定義的密度度量來聚類。它通過指定數(shù)據(jù)聚類最小點數(shù)MinPts,和聚類距離半徑ε自動依據(jù)數(shù)據(jù)點的密度聚類。相對于我們熟悉的K-means算法,不需要指定聚類的個數(shù)。聚類是一種無監(jiān)督學習,它在樣本沒有標記的情況可以把數(shù)據(jù)分成不同的組,聚類算法分組的依據(jù)是數(shù)據(jù)間的距離度量值。在本算法中,采用最常見的歐氏距離作為DBSCAN的距離度量算法。
閾值選擇對于時序數(shù)據(jù)異常檢測來說至關重要。異常就是超過了一定閾值的數(shù)據(jù),而閾值選擇是一個復雜的問題,涉及到數(shù)據(jù)上下文等多個方面,好的閾值可以更準確地區(qū)分出正常和異常。誤差模型中的閾值選擇可以看做是另一個數(shù)據(jù)序列的異常檢測問題。閾值選擇不準確的一個原因是閾值數(shù)據(jù)中存在噪點。從這個角度出發(fā),在沒有樣本標記的誤差模型數(shù)據(jù)中,運用聚類算法剔除噪點,有助于選擇更加合適的閾值。本文提出的閾值選擇算法通過DBSCAN聚類算法在誤差模型中發(fā)現(xiàn)噪點數(shù)據(jù)序列。對每個一個誤差度量指標剔除掉噪點后得到修正誤差模型k=1,2,3。然后,對修正誤差模型中的每一個誤差度量指標計算對應的誤差閾值thk:
其中,mean是均值函數(shù),sd是標準差函數(shù),α調諧系數(shù)。接下來,對數(shù)據(jù)點用投票機制進行異常檢測,如果一個數(shù)據(jù)點的多個誤差度量指標中過半數(shù)的誤差度量指標超過修正誤差模型中對應的閾值,則該數(shù)據(jù)點視為異常。經(jīng)過三個誤差度量指標構成的投票機制,超過半數(shù)以上的度量指標判定該數(shù)據(jù)點異常的話,則最終認定該數(shù)據(jù)點是一個異常數(shù)據(jù)點,如上述,最終得到的時序數(shù)據(jù)異常檢測的異常點結果可以用集合表示為
綜上,基于DBSCAN的閾值選擇算法的時序數(shù)據(jù)異常檢測過程描述如下:
本文的異常檢測實驗依托于雅虎EGADS異常檢測框架,在EGADS框架的基礎上進行二次開發(fā),實現(xiàn)該閾值選擇算法。EGADS是一個良好的異常檢測開源平臺,它實現(xiàn)了基礎數(shù)據(jù)處理、時序建模以及常見異常檢測算法,開發(fā)者只需要對框架定義好的接口實現(xiàn)自己的算法即可得到異常檢測的文本和圖像結果,這有助于算法的分析和實踐。
實驗運用的時序數(shù)據(jù)是后臺服務器的運行情況數(shù)據(jù),該數(shù)據(jù)以(timestamp,value)形式存儲。timestamp是以秒為單位的Unix時間戳,value是用小數(shù)表示的服務器CPU使用情況。實驗數(shù)據(jù)通過后臺工程師進行過異常標注,并且從工程實踐的角度進行了重新討論和審校,增加了部分異常點。
在工程實踐過程中,異常點的報警有助于運維人員及時根據(jù)異常點修復鄰近時間窗口的異常。因此結合實際需要,在統(tǒng)計檢測結果時,如果異常點所在的相鄰幾個時間窗口在存在真實異常,則表示異常召回成功。經(jīng)過實驗,對CPU使用情況數(shù)據(jù)的異常檢測召回率、準確率、假陰性率結果如表1所示。
表1
該程序運行的界面效果如圖2所示,圖中紅色曲線是根據(jù)觀測數(shù)據(jù)進行數(shù)據(jù)補全后建立的觀測時序數(shù)據(jù)數(shù)據(jù)模型繪制出的觀測時序圖,橫坐標是時間,縱坐標是觀測值。圖中藍色曲線是根據(jù)經(jīng)典的時序預測算法,在完整的時序觀測數(shù)據(jù)基礎上建立的預測時序數(shù)據(jù)模型繪制出的預測時序圖,橫坐標是時間,縱坐標是預測值。觀測時序圖中的黑色豎線是根據(jù)基于DBSCAN的時序數(shù)據(jù)異常檢測閾值選擇算法篩選的閾值,以投票機制對數(shù)據(jù)點誤差統(tǒng)計度量進行篩檢測到的數(shù)據(jù)異常點。
圖2 時序數(shù)據(jù)異常檢測程序界面
本文總結了時序數(shù)據(jù)異常檢測領域的有關文獻,闡述了該領域的研究和應用現(xiàn)狀。針對時序數(shù)據(jù)異常檢測的閾值選擇問題,提出了基于DBSCAN的時序數(shù)據(jù)異常檢測閾值選擇算法,該算法從閾值選擇角度優(yōu)化了時序數(shù)據(jù)異常檢測的效果,具有實際工程價值。實驗部分基于EGADS進行二次開發(fā),在一個后臺服務器運行數(shù)據(jù)上進行了測試,效果較好。
時序數(shù)據(jù)的異常檢測是當下智能運維的重要組成部分[4]。今后還可以從以下幾個方面深入,一,在時序數(shù)據(jù)建模上充分考慮周期性、季節(jié)性等特征;二,該算法檢測異常的時間窗口較大,在時序預測和誤差度量模型上改進,減小時間窗口;三,時序數(shù)據(jù)聚類效果好壞的一個關鍵因素是選擇的距離度量算法是否能很好地適應時序數(shù)據(jù)的特征,考慮改進簡單的歐氏距離度量算法,獲得更適應時序數(shù)據(jù)特征的距離度量算法;四,在時序數(shù)據(jù)異常檢測過程當中引入深度學習,進一步優(yōu)化傳統(tǒng)算法的效果。