王速,盧華,汪碩,3,蔡磊,黃韜,3
(1. 北京郵電大學網絡與交換國家重點實驗室, 北京 100876;2. 廣東省新一代通信與網絡創新研究院,廣東 廣州 510663;3. 網絡通信與安全紫金山實驗室,江蘇 南京 211111)
網絡信息化帶動了整個世界經濟的發展,促進了人類社會的進步。然而伴隨著網絡的大規模使用,企業的IT系統變得越來越復雜,傳統的人工運維方式已經難以滿足企業的智能化管理要求[1]。近年來,隨著機器學習、深度學習等技術的發展,智能運維(artificial intelligence for IT operations,AIOps)的概念被提出,將AI與運維結合,利用人工智能技術自動監控和管理 IT業務,提升運維效率。
智能運維包含很多關鍵場景和技術,涉及大型分布式系統的監控、分析、決策等。參考文獻[2]將智能運維劃分為3個階段:針對歷史事件,包含瓶頸分析、熱點分析、故障傳播圖構建等技術;針對當前事件,包含異常檢測、異常定位、故障根因分析等技術;針對未來事件,包含故障預測、趨勢預測等技術。其中,KPI異常檢測是互聯網服務智能運維的一個底層核心技術,上述大多數運維關鍵技術都依賴于KPI異常檢測的結果[2]。本文研究智能運維中的KPI異常檢測技術,從單維KPI異常檢測和多維KPI異常檢測兩方面進行分析整理,總結和分析目前KPI異常檢測領域的研究現狀和研究趨勢。
為了保障基于Internet的應用服務的穩定性,運維人員通常會密切監控各種各樣的KPI(key performance indicator)。KPI的異常往往反映了相關應用的故障,如外部攻擊、服務器故障等。因此,高效、可靠的服務依賴于有效的異常檢測手段。
KPI數據是一種通過定時采樣獲取的、具有特定意義的時間序列數據,格式為(時間戳,值)。KPI可以被粗略地劃分為兩種類型[3]:服務KPI和機器KPI。服務KPI通常是在互聯網業務層面的分鐘級的統計指標(例如每分鐘的網頁訪問量、服務的在線用戶數、服務響應用戶的平均時間等),大多數是季節性的平滑KPI,用來反映服務的質量和規模;機器KPI通常反映機器健康狀況的秒級的統計指標(例如一臺服務器的網卡吞吐率、內存利用率等),大多數是更復雜的細粒度KPI。除物理意義外,KPI在形狀特征上也呈現多樣性,大致可以分為周期性KPI、穩定型KPI和持續波動型KPI。
KPI序列往往可以呈現不同程度的異常模式,如圖1所示,大致可以分為以下3類[4]。

圖1 異常模式示意圖
(1)點異常:點異常指在不考慮數據點的時間關系的情況下,某些超出了KPI序列正常范圍的離群點。
(2)集合異常:集合異常指某些數據點的集合相對于整個KPI序列是異常的。集合異常的各個數據點本身可能不是異常的,但作為集合一起出現會被視為異常。
(3)峰值異常:峰值異常也可稱為上下文異常,區別于點異常,在某些情況下,雖然數據點仍在KPI序列正常范圍內,但與鄰居點存在很大差異。
異常檢測指對不符合預期模式的數據的識別。異常檢測作為數據挖掘領域的一項重要內容,在很多方面都有廣泛的應用,例如圖像異常檢測、時間序列異常檢測、日志消息異常檢測等。在運維領域,KPI異常檢測是一項核心技術,運維團隊需要實時監測分析網絡設備以及服務的狀況,及時發現風險,并盡快采取措施保障應用服務質量。根據場景和應用需求的不同,可以分為單維KPI異常檢測和多維KPI異常檢測兩個類別。單維KPI異常檢測關注指標級別的異常狀況(KPI的突增、抖動等),是目前主要的研究方向。區別于單維異常,多維KPI異常檢測關注實體(例如服務器、航天器等工業設備)級別的異常。多維KPI異常示意圖如圖2所示,實體的異常事件通常會引起多個指標同時異常,且指標之間存在一定關聯關系,因此多維KPI異常檢測更具挑戰性。

圖2 多維KPI異常示意圖
目前,在單維KPI異常檢測領域,學術界和工業界已存在大量的研究工作。通過對已有研究進行分類,大致可以分為兩大類:傳統方法和基于機器學習的方法。下面分別對這兩類方法的研究現狀進行分析和介紹。
3.1.1 傳統方法
針對單維KPI數據的異常檢測,主流方法包含基于規則的方法、基于統計學的方法、基于預測的方法、基于鄰近度的方法等。
基于規則的方法具有目標明確、結果直觀等特點,目前在工業界應用最為廣泛。這種方法通常需要專家制定規則,盡管異常檢測準確率較好,但對應用場景要求嚴苛。目前有很多基于規則的異常系統,例如針對亞馬遜云服務(Amazon Web Services,AWS)資源和在AWS上運行的應用程序進行監控的Amazon Cloud-Watch[5]系統。
基于統計學的方法是一類經典方法,總體思想是對數據的分布做出某些假設,然后利用統計推斷方法找出該假設條件下的異常。例如熟知的3σ準則,假定數據服從正態分布,如果某些值超過3倍標準差,那么可以將其視為異常點。3σ準則具有方法簡潔、運算速度快等優勢,但由于其存在較強的假設條件,在很多數據中表現不佳。為此,Siffer等[6]基于極端值理論(extreme value theory,EVT)提出了SPOT算法,該算法不對數據分布進行假設,對單峰時間序列和高吞吐數據流序列具有較好的檢測效果。
基于預測的方法通過建模并預測KPI曲線,根據預測值和實際值之間的誤差,采用kσ、分位數等方法或基于預設定的閾值等進行異常檢測。代表性的時序預測方法有ARIMA[7]算法和Holt-Winters[8]算法,主要適用于具有線性趨勢和周期波動的KPI序列。此外,Facebook開源了單變量時間序列預測框架Prophet[9],具體包含序列建模、模型評估、問題呈現和可視化反饋4個模塊。相比于ARIMA和Holt-Winters模型,Prophet對于數據缺失和趨勢變化具有較強的魯棒性,并且通常能夠很好地處理序列中的異常值。
基于鄰近度的方法是指利用異常點和正常點之間相似度低的特點來識別異常,例如最簡單的K近鄰算法基于樣本和其第k個鄰居的距離判斷樣本是否異常。類似地,Breunig等[10]提出了局部離群因子(local outlier factor,LOF)檢測方法,通過分析樣本點的鄰域密度檢測異常,Kriegel等[11]提出了基于角度的離群點(angle-based outlier detection,ABOD)檢測方法,通過計算每個樣本與所有其他樣本對所形成的夾角的方差檢測異常。
3.1.2 基于機器學習的方法
在實際運維環境中,傳統異常檢測算法部署到特定服務仍然存在很大的挑戰。由于KPI種類多、變化快、規律復雜,為保證服務質量,這些方案需要運維人員定期手動調整檢測器的內部參數或者監測閾值,而且具體的參數也大多憑借經驗而定。在此背景下,基于機器學習技術的智能化運維成為必然的方向。
根據KPI曲線是否具有異常標注,可以將異常檢測算法大致分為無監督異常檢測技術和監督異常檢測技術。代表性的監督學習方法有雅虎開發的EGADS框架[12]和清華Netman實驗室開發的Opprentice框架[13]。EGADS和Opprentice均為有監督的集成學習方法,利用多種傳統異常檢測算法輸出的異常分數作為特征并利用用戶反饋作為標簽來訓練異常分類器,均在KPI異常檢測上取得了很好的效果。然而,這兩種方法嚴重依賴良好的人工標注,在實際應用中通常是不可行的。此外,基于多個異常檢測器的集成學習分類器也面臨運算開銷大、正負樣本不均衡等問題。因此,無監督學習方法成為KPI異常檢測的主要研究方向。
基于無監督機器學習的異常檢測方法的主要思想是利用單類標簽(即正常KPI樣本)確定“正常區域”,然后通過測量KPI觀測值和“正常區域”的距離來推斷異常,其理念是由于異常檢測中正常樣本遠遠多于異常樣本,因此即使缺乏標簽仍然可以對模型進行訓練。Amer等[14]驗證了無監督條件下SVM算法的有效性,并對one-class SVM算法進行改進,使學習到的決策邊界盡可能不受異常值的干擾。Yang等[15]采用了一種全局最優的期望最大化(expectation maximization,EM)算法,用高斯混合模型(Gaussian mixture model,GMM)擬合數據并基于最大似然方法估計參數。Munz等[16]提出了基于K-means聚類算法的異常網絡流量檢測方法,該方法也可視為一種樣本點間的相似度度量方法。
此外,隨著深度學習算法的不斷突破,基于無監督深度學習的異常檢測算法逐漸成為研究的熱點,大多數方法基于生成模型。生成模型的目標是給定訓練樣本,希望能獲得與訓練數據具有相同分布的新數據樣本,而異常檢測需要學習正常模式,因此非常適合生成模型。其中,代表性的算法有變分自編碼器(variational auto-encoder,VAE)[17]、生成式對抗網絡 (generative adversarial network,GAN)[18]、像素循環神經網絡(pixel recurrent neural network,PixelRNN)[19]等。以應用較為廣泛的VAE為例,圖3表示VAE模型的架構,觀測數據x由隱變量z產生,z→x是生成模型是識別模型,從自編碼器(auto-encoder,AE)的角度來看,類似于解碼器,類似于編碼器。

圖3 VAE模型的架構
基于VAE算法,Xu等[20]提出了無監督異常檢測機制Donut,Donut針對季節性的KPI具有較好的檢測效果,并具有可靠的KDE(kernel density estimation)理論解釋。Li等[21]在Donut[20]機制的基礎上進行了擴展,改進了Donut無法處理與時間相關的異常的缺陷,并更好地處理了KPI數據缺失的問題。此外,當面臨更復雜的機器KPI,這些KPI表現的非高斯的噪聲和更復雜的數據分布使Donut等機制難以進行建模。針對此問題,Chen等[22]提出了Buzz機制,通過Wasserstein距離[23]和分區分析的方法度量數據分布和生成分布的距離,并將模型轉化為貝葉斯網絡,另外將VAE作為生成模型來產生樣本并采用另一個神經網絡作為判別器來進行對抗訓練,在機器KPI的異常檢測上取得了較好的效果。
與單維KPI相比,多維KPI序列的維數多、數據量大、指標間相互關聯等特征帶來了更高的研究難度。 目前國內外針對多維KPI異常檢測的研究總體上有兩種思路[24]:第一種思路是將多維KPI序列按維度切分成多個單維KPI序列,基于單維KPI檢測方法尋找異常;第二種思路是直接分析多維KPI序列,例如將多維序列按時間切分成多個子序列,同時結合聚類等算法發現異常。第一種思路的研究相對成熟,但丟失了各維度KPI之間的關聯性信息,而且為每個KPI維護單獨的模型也帶來更高的成本,因此第二種思路的研究更具有價值。從算法層面,類似于單維KPI,多維KPI異常檢測方法也可以分為傳統方法和基于機器學習的方法兩大類。
3.2.1 傳統方法
與單維KPI序列類似,針對多維KPI數據異常檢測的傳統方法也可以大致分為基于規則的方法、基于統計學的方法、基于預測的方法和基于鄰近度的方法。
基于規則的方法大多考慮多維序列的每條KPI,并依據固定閾值、同比(與歷史周期對比)、環比(與相鄰時間對比)等方法判定異常。ADTK[25]是一個可用于單維和多維KPI序列異常檢測的軟件包,提供了一組具有統一API的通用檢測器,包含基于規則的算法和一部分無監督算法,并支持可視化KPI序列和異常事件。
基于統計學的方法大多假設多維KPI的各個維度相互獨立,利用統計推斷方法計算各維度的異常度再進行相加。例如,Goldstein等[26]提出了HBOS(histogram-based outlier score)算法,基于各個特征之間的獨立性假設,分別為每個維度做數據分布直方圖并根據數據的頻率計算異常程度。
基于預測的方法通常為各個維度分別構建預測模型,然后通過計算實際值與預測值之間的誤差來識別異常,ARIMA[7]模型及其變體是常用的有效方法。這類方法可以很好地捕捉KPI序列的時間依賴性,但對噪聲非常敏感,在噪聲嚴重時可能會增加很多假陽性結果。
基于鄰近度的方法通過定義距離度量并計算數據之間的距離來檢測離群點,與單維KPI序列類似,主要包含K近鄰、LOF[10]、ABOD[11]等算法。但對于多維KPI序列而言,此類方法計算復雜度過高,難以應用于大規模數據。
3.2.2 基于機器學習的方法
監督模型嚴重依賴準確的類別標簽的特點使其難以應用在實際的運維環境中。無監督機器學習模型通過學習KPI數據的固有特征來識別異常,代表性的算法有PCA、SVM以及聚類算法(包括DBSCAN、GMM、K-means等)。陳興蜀等[27]基于ARIMA預測算法得到多維特征偏移向量,然后基于SVM算法進行分類判別,實現了多維時間序列的在線檢測。Hu等[28]基于降維算法(PCA、SVD)將多維時間序列轉化為一維序列,并利用滑動窗口將降維后的序列劃分為多個子序列,然后對各個子序列進行特征提取,最后基于one-class SVM算法進行在線異常檢測。
近幾年,針對多維KPI序列的無監督深度模型得到了廣泛的研究。為了檢測航天器異常,Hundman等[29]將長短期記憶(long short-term memory,LSTM)網絡應用于多元KPI序列預測,并使用平滑化后的預測誤差確定異常。類似于自然語言處理中的seq2seq 模型,Malhotra等[30]提出了一種基于LSTM的編碼器—解碼器模型,目的是重構KPI序列的正常點的特征,并基于重構誤差進行多維KPI異常檢測。不同于以上兩項基于誤差的異常檢測方法,Park等[31]將LSTM和VAE模型組合起來,具體是將VAE中的前饋神經網絡替換成LSTM,并采用重建概率來判定異常。由于VAE學習的是隱變量z的分布,因此模型對噪聲有較好的魯棒性,且避免了過擬合。之后,Su等[32]提出了OmniAnomaly機制,將VAE和GRU(gate recurrent unit)結合,很好地捕獲了多維KPI序列的時序性和指標依賴關系。具體地,OmniAnomaly利用GRU捕獲多維KPI序列復雜的時間依賴性,并基于VAE將觀測值(即x空間)映射到隨機變量(即z空間),另外提出了隨機變量連接技術來建模隨機變量之間的依賴關系。此外,受計算機視覺領域的啟發,Zhang等[33]提出了一種基于卷積LSTM(conv-LSTM)的自編碼器(auto-encoder)架構MSCRED,與之前工作不同,MSCRED沒有直接將多元KPI序列輸入模型,而是通過計算多維KPI序列指標間的協方差構造了分辨率特征矩陣,再將特征矩陣作為AutoEncoder結構的輸入。
針對KPI異常檢測已經產生了很多的研究成果,但由于KPI的復雜性、多樣性,在實際部署應用中仍存在很多難題,例如周期多樣性、概念漂移、海量KPI序列的異常檢測以及結果的可解釋性等。
由于工作日、休息日、節假日或者商業活動對用戶行為的影響,KPI可能在不同的時期內差異很大。例如實際運維中很常見的“節假日效應”問題是指受節假日(例如國慶節、春節、中秋節)的影響,KPI可能呈現與平時差異很大的模式,但這些模式卻是正常的。因此,如何設計通用化的模型適應KPI的多種周期性是業務上面臨的重要問題之一。傳統方法(例如Holt-Winters和ARIMA異常檢測器)需要將KPI的周期長度作為其輸入參數,通常需要為模型手動配置為日、周、月等周期。這類檢測器的性能受人為因素影響較大,且某些情況下,固定的周期長度難以表征業務KPI復雜的周期性。此外,基于變分自編碼器(variational auto-encoder,VAE)的無監督異常檢測算法Donut在平穩的季節性KPI上表現出良好的檢測性能。然而,由于Donut將滑動窗口內的數據點作為模型輸入,并沒有時間或日期信息,因此也很難從訓練數據中提取多種周期性的特征。
針對此問題,Zhao等[34]提出了Period機制,主要分為離線周期性異常檢測和在線適應性異常檢測兩個部分。在離線模塊,將歷史KPI按天切分成多個子序列,基于聚類的方法將這些子序列劃分到不同的聚類簇并進行序列拼接,然后為各個聚類簇訓練相應的模型。在在線模塊,新的KPI序列根據具體日期劃分到各個簇中,并基于相應的模型進行異常檢測。另外在聚類部分,Period基于SBD(shape-based distance)算法進行距離度量,并考慮了周期漂移的影響。總體而言,Period機制思路簡單,能有效解決復雜周期性對異常檢測效果的影響。
當然,Period也存在一些問題,例如,Period假設KPI的基本季節性是一天,因此將整個KPI直接按天切分成子序列,無法處理任意周期性(例如每年)的KPI。此外,Period也不適用于所有類型的KPI,例如有趨勢性和周期性的KPI需進行去趨勢化預處理。還有針對具有多種周期性的多維KPI序列的異常檢測還有待進一步研究。
運維領域的概念漂移(concept drift)是指KPI序列受活動發布、業務變更、資源調度等一些特殊事件的影響產生的水平漂移,例如資源占用率的突然上升或下降,如圖4所示。概念漂移可以分為預期的概念漂移和意外的概念漂移。意外的概念漂移被視為一種異常,可能會帶來額外的經濟損失,此時服務提供商可能會采用切換流量(switch traffic)、回滾版本(rollback version)、重啟實例(restart instance)等操作將服務恢復到發生漂移之前的狀態來及時止損。預期的概念漂移不屬于異常,但由于數據分布的改變,導致原有的異常檢測器在一段時間內會產生大量的報警。因此,研究概念漂移旨在避免發生有預期的漂移后異常檢測器長時間的精度損失。
針對KPI的概念漂移問題,Ma等[35]提出了StepWise機制,StepWise分為3部分:首先基于奇異頻譜變換(singular spectrum transform,SST)算法和極值理論(extreme value theory,EVT)檢測是否發生概念偏移;然后區分此偏移是否符合預期,針對不符合預期的概念偏移,運維工程師要快速處理該異常;最后對于符合預期的漂移,設計了具有魯棒性的線性模型 (robust linear model,RLM)擬合新的數據分布,從而迅速適應原有異常檢測算法和參數。總體而言,StepWise是解決KPI概念漂移的一個有效方法,但在實際運用過程中,對于概念漂移檢測和新數據擬合方面,仍需針對特定業務精心設計,很難找到某個方法適應所有的場景。
海量KPI序列的異常檢測一直是運維中的一個重要難題。大多數的異常檢測算法(例如有監督的EDAGS[12]、Opprentice[13]、無監督的Donut[20]等)都假定需要為每個KPI訓練和維護單獨的模型。面對海量的KPI,由于模型選擇、參數調整、模型訓練等過程帶來的巨大開銷,為所有的KPI分別訓練異常檢測器是不可行的。
Li等[36]提出了ROCKA機制,基于時間序列聚類的方法解決這一挑戰。具體地,ROCKA提取每個KPI的基礎形狀(稱為基線),采用SBD算法作為距離度量,并基于DBSCAN算法根據基線形狀的相似性將KPI聚類成幾個簇,然后為每個簇訓練異常檢測模型。對于新的KPI,根據與各個簇之間的相似度為其分配適當的模型。基于ROCKA,Bu等[37]提出了ADS機制,在聚類KPI后,利用聚類簇的中心和新的KPI序列進行半監督學習,從而快速準確地為新的KPI分配模型。
ROCKA和ADS提出了解決海量KPI異常檢測的一個新方向。但現實中很多KPI數據相似性不高,很難被聚類,而且聚類帶來的異常檢測精度下降的影響也是不容忽視的。另外,多維KPI的時間高維度、指標高維度、指標存在關聯等特點為海量異常檢測帶來了更大的難度,這也是未來研究的一個重要方向。

圖4 概念漂移示意圖
在多維KPI異常檢測領域,一個重要的問題是如何對實體級別的異常進行合理解釋,即為什么觀測值被認定為異常。有效的結果解釋有助于對異常原因的分析并加速后續的故障排除。然而,目前的異常檢測大多基于無監督深度算法,屬于黑盒模型,可解釋性較差。無監督模型大多數基于重構誤差或重構概率來判斷異常,一個直觀的想法是尋找誤差最大或重建概率最低的幾個KPI維度作為實體級別異常的原因[31-32]。此外,結合時序異常檢測和圖兩個領域,利用圖挖掘的方式找出時間序列的內在聯系也是分析異常原因的一個方向[38],有研究人員提出構建有效的故障傳播圖挖掘特征之間的關聯[39-41]。然而,利用故障傳播圖挖掘準確的因果關系也存在著很大的挑戰。由于故障發生往往遵循漣漪效應,會從一個維度故障傳播到其他維度或者整個系統狀態,在有標簽或存在專家經驗的多元時間序列中容易出現誤標簽,即一開始的故障仍認為是正常,直到系統發生異常才被檢測到。另外,漣漪效應的傳播和發生依賴于初始根因,當初始根因不同,則其傳播關系和關聯性會發生一定的變化,造成構建故障傳播圖得到的因果關系不穩定。針對此問題,未來可以嘗試利用不同時間序列的趨勢變化以及時間先后特征構造動態的依賴關系。
在當今社會不斷智能化的進程中,智能運維勢在必行。KPI異常檢測是智能運維中的一項基礎且重要的任務,異常定位、根因分析等運維問題都依賴于異常檢測的結果。本文從單維KPI和多維KPI兩個層面,回顧了面向KPI異常檢測的研究進展和成果,并將現有方法分為基于規則的方法、基于統計的方法、基于預測的方法、基于相似度的方法以及基于機器學習的方法。此外,本文總結分析了異常檢測模型在部署應用中面臨的幾個問題并提出可能的優化方向。未來KPI異常檢測應重點考慮實際應用中的難點問題,另外可以考慮其他領域的交叉和借鑒,例如可以嘗試結合自然語言處理中的預訓練和微調的方法應對海量KPI異常檢測的時間和指標高維度問題,以及基于因果推斷的方法挖掘多維KPI間的動態依賴關系等。