一、背景與挑戰
在傳統的監控、智能運維領域,使用者想去監控某一個業務名額往往采用環比、同比的門檻值配置方式。這在實踐中面臨不少問題:
門檻值應該配成多少,不同的業務甚至不同的時間段都需要不同的門檻值
業務總是出現周期性的趨勢,規則配置極易産生誤報
特殊的業務場景例如活動引起的沖高回落、大促的沖擊都會引起大量誤報
對大量次元的業務,比如上百/上千個不同類型的錯誤碼,大量接口調用量等名額該如何分别配置?

複雜的業務衍生出了對AIOps領域異常檢測算法的需求,借助算法做自動的異常檢測,解放對人工經驗門檻值的配置是一個切實可行的方向。網際網路行業中天然沉澱的大量業務資料為算法提供了資料基礎,業務人員日常的回報為算法提供了标注,借此契機智能運維也在近幾年飛速發展。
本文結合業界常用的AIOps時間序列異常檢測算法和它們在螞蟻\支付寶業務域中的實踐,闡述Lego螞蟻智能監控算法的部分探索與演變。
二、時序異常檢測算法總覽
對業界常用時序異常檢測算法進行梳理,大緻可以歸納為統計分析模型、時間序列(預測)、無監督、有監督、關系型模型等幾個方向。各個算法子產品從不同角度考慮時序異常檢測問題,子產品之間也可以嵌套、串行完成整個異常檢測流程。
從思路上看:
時間序列相關模型主要用來提取時序資訊、對時間序列進行實時預測。如果将異常監控拆分為:異常監控=預測值+和預測值的差距是否異常,那麼時間序列預測的準确性就很大程度影響異常檢測的效果。時間序列預測算法較多,可以考慮基于統計學的時序模組化方法Holt-winters等,也可以考慮xgboost等回歸類的機器學習方法,深度學習領域也有适用于序列的rnn類方法[1,2]。
統計分析模型和無監督模型從資料分布上考慮,假如正常資料遵循一定的規律,那麼就可以從機率分布等方向入手将邊界值歸為異常。例如較常用的3-sigma準則、isolation-forest[3]、GAN[4]等算法。
有監督模型将異常檢測轉化為0/1二分類問題,将使用者的回報和算法形成閉環,讓使用者來定義異常邊界,常用的分類算法例如樹模型、svm以及深度網絡DNN[5]等都可以用來嘗試。
關系型模型試圖引入更多外界資訊,例如知識圖譜、複雜網絡等算法運用圖資訊,關聯分析等算法尋找業務之間的關聯關系等。
其他:在整個異常檢測過程中還需要許多輔助模型,例如當使用者回報的樣本量不足時如何解決,如何尋找曆史上最合适的參考日期,如何對業務進行分類劃分适配不同異常檢測模型等。
三、Lego螞蟻智能監控的實踐
Lego是螞蟻金服内部緻力于業務異常發現的智能監控平台:
一方面,相對傳統型監控”提供一個平台(工具)-->使用者自己配置-->使用者自己運維監控效果“的模式,Lego不再隻是專注于工具本身的發展,而是延伸到“監控效果”環節,比如故障的發現品質,以及從發現到定位,再到業務恢複的完整應急體系。
另一方面,平台基于智能監控算法自動部署監控,不需要使用者配置門檻值甚至配置規則。算法學習業務過去的波動、趨勢,結合其他相關業務名額,決策目前是否出現了異常。
Lego在智能監控的道路上經曆一段時間的探索和實踐,算法上經曆了從基線到有監督算法的逐漸改進,業務上也深入了解并解決了較多的複雜場景。以下對其中的智能算法進行部分介紹。
1. 統計機率模型
初期,借助統計機率模型是比較直接的異常檢測思路,資料往往具有其分布規律,如果落在分布邊界則觸發了小機率事件,可能産生了異常。
N-sigma
在正态分布中,99.73%的資料分布在距平均值三個标準差以内。如果我們的資料服從一定分布,就可以從分布曲線推斷出現目前值的機率。
反映到監控場景中,如果某一個業務資料服從一定分布(例如正态分布),那麼目前資料如果超過N-sigma,則可以判斷為異常,一個簡要的檢測可以描述為:
step1:取曆史附近時間視窗内的N個數值作為樣本M
- step2:計算樣本的M的均值 、标準差
Lego螞蟻智能監控中異常檢測算法的探索與思考 Lego螞蟻智能監控中異常檢測算法的探索與思考 - step3:
Lego螞蟻智能監控中異常檢測算法的探索與思考
Grubbs' Test\ESD Test等假設檢驗方法
Grubbs' Test常被用來檢驗正态分布資料集中的單個異常值,ESD(Extreme Studentized Deviate test)則将Grubbs' Test擴充到k個異常值檢測,以Grubbs' Test為例,其算法步驟為:
總結
統計機率模型初步解決了一個模型如何泛化到其他業務的問題,但也有相應缺陷:
大部分方法存在分布假設。但實際中即使是一個小視窗裡的資料分布也很複雜,更可能服從混合正态分布而不是單一的正态分布
涉及部分門檻值、N的确定。例如一個業務說它是3-sigma,換個業務說它是2-sigma,同樣容易陷入調門檻值的怪圈忽略了時間序列本身的周期波動,損失了資訊。
2. 時序序列預測模型
統計機率模型沒有考慮時間序列上的資訊,是以推動我們考慮先做時間序列預測。傳統時間序列預測有許多非常好的架構和平滑方法,例如時間序列拆解本身就是一個較好的架構,裡面的各個分項可以去做不同模型的嘗試。我們先做一個簡單的方法總結:
平滑類的方法,例如移動平均及在此基礎上的優化,包括權重移動平均、指數平滑、二次指數平滑、三次指數平滑(Holt-Winters)等。平滑方法的基本思想是“融合”新資訊和老資訊,同時通過加入時間、季節趨勢統計項,既展現趨勢性又展現季節性。
ARMA/ARIMA[8]等線性模型。AR、MA部分和平滑方法思想比較相近,用過去序列或白噪聲序列的線性組合預測未來,I部分将非平穩序列轉化為平穩序列,ARIMA是比較典型常用的時序模型,。
STL等時序分解方法,時序分解類的方法将時間序列分解為T+S+R,分别指代趨勢、季節和殘差
将資料進行變換,提取時序特征;或将資料集轉化為有監督資料集,采用xgboost、lstm等機器學習及深度學習方法
其他:例如随機遊走、卡爾曼濾波、狀态空間模型等其他時序模型
在這裡我們嘗試了STL[6]、Holt-winters、arima等算法。
STL
STL (Seasonal-Trend decomposition procedure based on Loess)為時序分解中一種常見的算法,基于LOESS将某時刻的資料YvYv分解為趨勢分量(trend component)、周期分量(seasonal component)和餘項(remainder component):
STL分為内循環與外循環,其中内循環來負責趨勢、周期分量的計算;外層循環主要用于調節robustness weight:
outer loop:
- 計算robustness weight;
inner loop:
- Step 1 去趨勢;
- Step 2 周期子序列平滑;
- Step 3 周期子序列的低通量過濾;
- Step 4 去除平滑周期子序列趨勢;
- Step 5 去周期;
- Step 6 趨勢平滑;
此處不再贅述。
Holt-winters
Holt-winters即三次指數平滑,指數平滑法都要更新上一時間步長的計算結果,并使用目前時間步長的資料中包含的新資訊,它們通過“混合”新資訊和舊資訊來實作。各種方法的不同之處在于它們跟蹤的量的個數和對應的拌和參數的個數。三次指數平滑法,功能最強大,既能展現趨勢性又能展現季節性。以乘法公式為例,Holt-winters的公式可以表示為:
在實踐中HW的性能消耗不多,模型中的參數也可以通過實時拟合擷取,即模型可以是實時訓練的。
lstm
解決時序預測的問題。不同于單維的時序預測模型,lstm在預測時候可以考慮多元的資訊,是以比較适合與複雜場景下的時序預測。lstm在監控場景之外已經的得到了廣泛的運用,比如在視訊,文本的領域,都取得了顯著的效果。
在異常監控下,lstm可以用來做名額的未來預測,以及用在異常監測問題上。這兩類的問題的輸入都為時間序列(一條或多條),經過lstm網絡,而輸出則根據希望解決的問題不同。在時序預測上,輸出的是未來一個時間片段上的預測,而對于有監督的異常監測問題,則是一個二分類問題。
一個實踐中的問題是不同業務、不同階段可能适合不同的預測算法。例如對于規律較強的業務可能不需要做實時預測,昨日的曲線就是較好的基線;對于常見的每天有一定波動和量級浮動的業務,STL等時序分解的方法具有較好的效果;對于規律非常弱的業務,實時的曲線平滑是較好的方案,是以整體可以考慮一些內建方案。
3. 無監督算法
解決了時序預測問題之後我們實際上沒有完成完整異常檢測,因為還沒有回答和預測值差距多少才叫異常。
一個簡單的思路是結合1和2,在時間序列預測後對殘差嵌套統計分析模型,例如基于ESD檢驗拓展的S- ESD (Seasonal ESD)與S-H-ESD (Seasonal Hybrid ESD)算法,就将ESD擴充到時間序列資料上。
但我們更希望把這個過程交給使用者,讓使用者來确定異常的邊界在哪裡。
可是在監控建立的初期,使用者的回報是非常稀少珍貴的,在沒有标記回報的情況下,如何讓使用者快速享受智能服務?無監督算法可能是一個解法方案。
isolation-forest
iForest 适用連續資料的異常檢測,其識别的主要是孤立點——可以了解為分布稀疏且離密度高的群體較遠的點。用統計學來解釋,在資料空間裡面,分布稀疏的區域表示資料發生在此區域的機率很低,因而可以認為落在這些區域裡的資料是異常的。
它的直覺了解是這樣的:假如我們用一個超平面來随機切割空間,第一步切将整體空間分為2個子空間,第二步我們再用随機超平面來切割每個子空間,以此循環下去直到子空間裡都隻剩下一個資料點位置。我們可以想象,對于那些相當聚集、密度相對較高的資料點,他們需要被切割很多次才能獨居一個子空間;相對的對于那些稀疏、密度相對較低的資料點,則很容易就在循環中找到了自己的空間。再用随機模拟的過程反複進行這個過程,就形成了iForest的整體實作思想。iForest 由t個iTree(Isolation Tree)孤立樹 組成,每個iTree是一個二叉樹結構,其實作步驟如下:
one-class svm
ocsvm也是一種無監督方案,算法希望學習一個超平面将資料盡可能包在一起,進而識别新的資料和已有訓練資料是否相似。該問題的優化目标與二分類SVM略微不同,但依然很相似:
dbscan
異常檢測和聚類是兩項很相關的任務,聚類獲得的孤立點往往也是異常檢測領域下的異常點。
dbscan (density-based spatial clustering of applications with noise)[10] 是一種常用的基于密度的聚類方法,任意選擇一個沒有類别的核心對象作為種子,然後找到所有這個核心對象能夠密度可達的樣本集合,即為一個聚類簇。重複該過程直到所有核心對象都有類别為止。對于不在任何一個類别内的點被标記為噪音點。
dbscan 有兩個主要參數,密度和簇内最小樣本數,決定最終的聚類結果。
無監督算法在監控初期可以不借助外界回報,快速通過資料的自身分布識别異常點。如果在特征工程階段能根據業務場景構造特征,可以構造不同業務目的的模型。無監督算法另一個特點是需要較多的業務訓練資料,但準确率較高。
其存在的問題是識别效果,尤其是召回率上的表現往往不夠理想。對于部分業務監控而言,一些故障在資料上可能遠不能被稱為“離群點”、“孤立點”,可能隻是稍微偏離了預估值,這在無監督中難以識别,也會存在調整松緊系數的困境。
4. 有監督算法
有監督算法将使用者回報、算法優化形成一個良性循環圈,使用者的标注代表了使用者對異常的判斷标準,異常檢測問題也比較自然地轉化為二分類問題求解。
模型建構可以采用LR\xgboost\random forest\svm等常用模型,特征的構造和模型建構不再贅述,在這裡總結幾個問題:
- 當問題轉化為分類問題時,異常檢測領域存在的黑白樣本濃度不均勻就會突顯出來,這也是有監督模型在異常檢測領域的主要問題。
- 有監督的方案往往不支援單個業務擁有自己的模型,積累樣本需要借助夥伴們共同建設樣本集的力量。
四、結束語
今天的我們還在途中,仍然存在許多不足、存在許多困難需要攻克。在AIOps的道路上也歡迎更多對智能監控感興趣的小夥伴加入我們,一起努力。
參考文獻:
[1]Connor J T, Martin R D, Atlas L E. Recurrent neural networks and robust time series prediction[J]. IEEE transactions on neural networks, 1994, 5(2): 240-254.
[2]Karim F, Majumdar S, Darabi H, et al. LSTM fully convolutional networks for time series classification[J]. IEEE Access, 2017, 6: 1662-1669.
[3]Liu F T, Ting K M, Zhou Z H. Isolation forest[C]//2008 Eighth IEEE International Conference on Data Mining. IEEE, 2008: 413-422.
[4]Radford A, Metz L, Chintala S. Unsupervised representation learning with deep convolutional generative adversarial networks[J]. arXiv preprint arXiv:1511.06434, 2015.
[5]Wang Z, Yan W, Oates T. Time series classification from scratch with deep neural networks: A strong baseline[C]//2017 international joint conference on neural networks (IJCNN). IEEE, 2017: 1578-1585.
[6]Cleveland R B, Cleveland W S, McRae J E, et al. STL: a seasonal-trend decomposition[J]. Journal of official statistics, 1990, 6(1): 3-73.