AntMonitor:螞蟻集團研發的一款面向雲原生時代的全功能智能運維產品,包含業務監控、應用監控、基礎設施監控、雲原生可觀測、一站式多維分析等功能。其中,智能化的單指標異常檢測是該產品最基礎、最重要的組成部分。算法
針對時序異常檢測,目前螞蟻集團內部基本都在按照如下幾個思路進行研發:segmentfault
上述幾種思路無所謂優劣,不一樣的方法都有其優點及不足,都有其契合及尷尬的場景,合適的方法纔是最好的方法。針對 AntMonitor 實際面對的運維場景,統計規則和機器學習相結合的方法被選爲最終解決方案。本文將分享研發 AntMonitor 智能檢測算法時的一些想法和思路,歡迎各位交流學習。網絡
在作智能異常檢測的過程當中,其中最棘手的問題是得到一個明確的異常判斷標準。比較遺憾的是,針對不一樣的業務、不一樣的指標甚至不一樣的使用方都會有不一樣的判斷標準。所以,本文從另外一個角度出發,先挖掘承認度高的基礎異常波形,再以點到面逐步地解決異常判斷問題。以耗時值上升異常檢測爲例,下圖給出了 AntMonitor 常見異常波形 A-D(各類異常波形均可認爲是如下幾種波形的變種或組合),根據各自不一樣的特性將其概括爲3種不一樣的類型,分別爲衝高異常、趨勢擡升異常和頻率變化異常。其中 A、B 歸爲衝擊異常,從圖中能夠看到其都有一個顯著的幅值突變;C 歸爲緩變擡升異常,相較與衝擊異常,其幅值擡升過程相對較爲平緩;D 歸爲頻率變化異常,主要特徵爲波動頻率出現巨大的變化。下面分別對不一樣類型異常進行求解。架構
圖1 常見異常波形運維
圖2 爲總體算法架構,其主要由 preFilter、coreUp 和 adapter 三部分組成。preFilter 爲前置過濾器,可以在較少數據輸入的狀況下過濾絕大部分正常信號,極大地下降資源消耗,這是算法可以大規模覆蓋的基礎;coreUp 爲核心檢測層,經過算法路由將不一樣類型數據映射到對應到合適的算法參數或模塊,主要對衝擊、趨勢和頻率三種異常類型進行檢測;adapter 爲適配層,其主要做用是可以容許不一樣對象建立適合自身的異常檢測模型,其中可經過透出的算法進行人工配置,也能夠經過樣本打標來自動訓練最優模型參數。下一章節主要對 coreUp 層幾個核心模塊的具體實現作詳細介紹。機器學習
圖2 算法總體構架svg
衝擊異常在波形上表現爲某時刻忽然出現的一個尖峯,每每是局部的幅值極大值。然而直接從幅值觸發判斷當前點是否異常,每每會出現漏報。如圖3所示,因爲原始波形存在着趨勢項,衝擊波形雖然是局部及極大值但每每不是全局視野內的最大值,所以會有被過濾的可能。觀察衝擊異常波形,發現其每每都是瞬時「變化」最大的時刻,其顯著特徵是當前值遠大於前一時刻的值或持續大於前值。所以,本節從尋找瞬時波動幅值突變點的角度出發,開發基於一階差分的異常檢測算法。函數
當間距相等時,用下一個值減去上一個值定義爲「一階差分」。如圖3所示,當帶有趨勢項的時間序列通過一次差分後能夠有效地去除趨勢項,同時衝擊異常點也從局部極大值轉變爲了全局最大值。針對長度爲的時間序列
,其對應差分序列能夠表示爲
, 其中
。若當天時間序列與歷史事件序列分別用
和
表示,分別計算各自差分序列獲得
和
, 同時得到當前時刻差值
。若
在集合
和
同時被斷定爲異常,則意味着當前時刻存在着衝擊異常可能。考慮到存在着連續上升的狀況,在實際應用中對差分計算稍做修改使其更爲精確,例如當知足
時,令
。學習
圖3 時序趨勢的影響優化
經常使用的異常檢測方法可參考異常檢測算法綜述類論文。此處採用 Tukey 箱型圖做爲異常檢測算法。選擇箱線圖算法的緣由主要有三點:1)計算簡單; 2)可適用於非正態分佈數據; 3)可調整判斷閾值。
此處對 Tukey 箱線圖分析作一下簡單介紹。衆所周知,基於正態分佈的 3σ 法則或 Z 分數方法的異常檢測是以假定數據服從正態分佈爲前提的,但實際數據每每並不嚴格服從正態分佈。應用這種方法於非正態分佈數據中判斷異常值,其有效性是有限的。Tukey 箱型圖是一種用於反映原始數據分佈的特徵經常使用方法,也可用於異常點識別。在識別異常點時其主要依靠實際數據,所以有其自身的優越性。箱線圖的繪製方法是:
箱線圖爲咱們提供了識別異常值的一個標準:異常值被定義爲小於 Q1-1.5IQR 或大於 Q+1.5IQR 的值。雖然這種標準有點任意性,但它來源於經驗判斷,經驗代表它在處理須要特別注意的數據方面表現不錯。
圖4 箱線圖示意圖
衝擊異常檢測的簡要流程以下:
圖5 衝擊檢測流程
採用上述方法存在兩個問題,第一個以下左圖所示,若出現大幅度下跌回升(至關於下跌檢測中的衝高回落)的狀況,當前點的差分值必然會超限告警,這種誤報當前經過相似「衝高回落」的方法進行過濾,本文再也不具體介紹;第二種,在總體波動幅度較大的狀況下,出現這種小幅緩變擡升的小凸起,採用衝擊異常檢測是無能爲力的。針對這種異常類型,本文經過趨勢異常模塊來進行解決。
圖6 存在的漏報場景
當波形緩慢上升時,因爲差值大小是基本穩態的,上述衝擊異常模塊是沒法有效識別的。所以,必需要有方法支持此類緩慢變化異常識別。在嘗試各類算法模型後,本文最終選擇 AugmentedDickey–FullerTest 和 Mann-Kendall Test 相結合的方式來求解此類問題。
Mann-Kendall 非參數秩次檢驗原理以下,對長度爲的時間序列
, 統計假設
:未經調整修正的數據系列
是一個由
個元素組成的獨立的具備相同分佈的隨機變量。備擇假設
是雙邊檢測:對全部的
,當
時和
時
和
的分佈不相同。計算時,對每個
,與其後的
進行比較,記錄
出現的次數。定義 Mann-Kendall 統計量
:
其中, 爲符號函數。當
小於、等於或者大於零時,
分別爲-一、0或者1;對於假設統計
,當
時,
的分佈爲正態分佈,
的均值爲
,方差爲
。當
時,便可應用近似正態分佈進行檢驗分析。
標準總體統計變量能夠用下式計算:
這樣,在雙邊的趨勢檢驗中,在給定的置信水平上,若是
則原假設是不可接受的。
爲正值表示增長趨勢,負值表示減小趨勢。
的絕對值在大於等於1.2八、1.6四、2.32時表示分別經過了信度爲90%、95%、99%的顯著性檢驗。
Mann-Kendall 非參數秩次檢驗在數據趨勢檢測中極爲有用,其特色表現爲:
趨勢檢測並非直接檢測當日數據是否存在上漲趨勢,理論上若歷史數據與當天數據同步上漲,那麼該波形趨勢不該該識別爲異常。換句話說,須要去除當日數據相對於歷史的趨勢。此處採用相對差值的方式來實現該目的。假設當日數據爲 =
,某天曆史數據爲
=
,那麼二者之間的差值序列能夠表示爲
,在此基礎上再進行趨勢分析。
詳細流程以下:
圖7 單次趨勢檢測流程
實際應用中流程會稍複雜一點,而且作了部分假設:1)若當天相對於昨日不存在上漲趨勢,便可認爲不存在緩變上漲異常;2)若當天相對於昨日存在上漲趨勢,那麼需考察當天相對與剩餘歷史是否也存在上漲趨勢,此處設定如有大於天不存在相對趨勢,即認爲不存在緩變趨勢。考慮到算法須要得到準確的告警時間點,並用來計算精確的漲幅比率,此處對
按不一樣長度前後進行趨勢判斷。大體的判斷流程如圖13所示,此處再也不展開。
圖8 趨勢上漲異常檢測總體流程
頻率異常在實際場景中並很少見,可是做爲一類異常類型,此處也對其進行了覆蓋。針對頻率異常數據類型,本文采用分位數聚合特徵來進行求解,主要步驟以下:
分位數定義:對一個有着連續分佈函數的樣本集,分位數是將一個機率分佈切分爲有着相同機率的連續區間的切分點。用數學公式表達的話:
,則稱
爲隨機變量
的
分位數。
分位數聚合特徵計算流程以下:
分位數聚合特徵計算示意圖以下所示:
圖9 分位數聚合特徵計算示意圖
在頻率異常檢測的應用中,須要對數據類型進行區分。針對稀疏類型數據直接進行「分位數聚合」算法計算,而對於存在趨勢項的非稀疏數據,必須先對其進行一階差分操做後纔可使用當前算法。圖10給出了二者不一樣類型的頻率異常檢測模型,分別給出了「分位數聚合」特徵曲線,從圖中能夠看到能夠準確地識別此類異常波形。在實際使用中還須要根據具體場景添加一些規則限制,此處再也不具體展開。
圖10 不一樣類型異常數據檢測效果
類似性誤報在時序異常檢測中佔有不小的比例。以下圖時序在檢測時刻出現異常衝高時,若不考慮歷史同期波形,每每會出現類似性誤報現象。實際在波形進行類似性檢測時,每每須要考慮時序長短不一致和波形偏移的問題。通常來說,時序長短不一致和波形偏移主要表現爲:
圖11 類似性誤報
因爲時序長短不一致和波形偏移的狀況,皮爾遜相關係數、餘弦類似度、歐式距離等類似性評價指標就再也不適用。動態時間規整(DTW)是一種經常使用的模板匹配算法,其能夠有效的解決對比長度不一致的時間序列類似性問題,圖12給出了DTW算與傳統歐式距離評價的差別,此處再也不展開描述。但實際應用中,DTW 算法更多的是一種搜索匹配算法,即其返回結果是目標庫中的最優匹配對象,而在時間序列實時監測過程當中,須要的是能給出一個可量化的類似度參考值作爲判斷依據,所以 DTW 也不能直接使用。本文給出了一種基於動態時間規整(DTW)及T檢驗的時序波形類似性評估方法,不但可以有效評估長度不一樣、發生偏移序列的類似度,還能夠返回可量化的類似性度量值,可以應用於時間序列實時異常檢測。
圖12 DTW 算法與歐式距離對比
下圖給出了「類似性檢測模塊」的實際檢測效果,圖13中的4例告警都爲未配置「類似性檢測」模塊前的上升告警樣例,採用上述算法回跑後均可以有效地識別爲類似性誤報。從實際使用狀況來看,該模塊評估爲誤報的案例基本都是類似的,反之存在着必定的誤差,但對於一個後置過濾模塊來說是徹底可接受的。整體來說,對較爲規整的波形判斷效果不錯,當歷史數據自己趨勢不相關、波形太過雜亂,上述算法效果通常。
圖13 類似性檢測效果
經過上述總體算法判斷後,下圖中的潛在異常場景,如單點衝高、衝高前序類似、衝高歷史類似、擡升歷史類似等均可以被有效過濾。在實際應用中,此類過濾項都配置有相應的開關,由業務人員來確認是否開啓。
圖14 典型過濾場景
本文算法整體思路是對單指標波形異常檢測問題進行拆解,將其概括爲衝高異常、趨勢上漲異常和頻率變化異常三個模式。在此基礎上,輔以一些過濾模塊來減小特定誤報的產生,如利用基於 DTW 的算法來求解諸如"波形類似性"的誤報場景。此外,本文中的異常判斷標準相對統一,都以箱線圖分析爲標準,各個超參數均可以進行透傳,後期針對不一樣的應用場景不一樣的閾值均可以快速調整。當前根據以上思路設計的模型主要應用在 JVM&System 指標監測上,約 5w 條 key 整體異常告警量小於5條/分鐘。
基本上,上述算法能夠覆蓋絕大部分的場景,但每每會有各類意想不到的誤報漏報狀況出現,後期的一部分工做要重點解決此類問題;另外一方面,針對一些偏明確的場景,在後期能夠用機器學習或者深度學習模型來進行代替,如「波形類似性」問題,在積累足夠樣本量後可嘗試經過深度學習模型進行覆蓋。同時,也能夠嘗試集成算法,以往從事機器學習的項目經驗代表,每每集成後會有意想不到的精度提高。
徐劍,花名輅遠,螞蟻集團高級開發工程師,工學博士,長期從事智能運維、機器學習和信號處理等領域的研究及開發工做,當前爲 AntMonitor 算法開發人員。