孫永謙,張茹茹,林子涵,張圣林,3*,譚智元,張玉志,3
1.南開大學(xué),軟件學(xué)院,天津 300350
2.天津市操作系統(tǒng)企業(yè)重點實驗室,天津 300350
3.先進(jìn)計算與關(guān)鍵軟件(信創(chuàng))海河實驗室,天津 300350
近幾年來,隨著云計算技術(shù)的快速發(fā)展,越來越多的應(yīng)用系統(tǒng)及業(yè)務(wù)被部署在云端,工業(yè)界和學(xué)術(shù)界的“云”意識和能力都在不斷增強(qiáng)。與此同時,人們對網(wǎng)絡(luò)的需求也在不斷變化,單純的“大帶寬、低時延”已經(jīng)不能滿足“多系統(tǒng)、多場景、多業(yè)務(wù)”的要求。因此,云網(wǎng)融合概念應(yīng)運而生并成為了云計算領(lǐng)域發(fā)展的重要趨勢。云網(wǎng)融合給互聯(lián)網(wǎng)發(fā)展帶來重大機(jī)遇的同時,也面臨著極大挑戰(zhàn)——如何在高度復(fù)雜的環(huán)境中確保網(wǎng)絡(luò)服務(wù)質(zhì)量。為了確?!岸嘞到y(tǒng)、多場景、多業(yè)務(wù)”的服務(wù)質(zhì)量,運維人員一般通過對關(guān)鍵性能指標(biāo)(KPI),如頁面訪問量、頁面訪問延遲、服務(wù)器CPU 利用率、路由器內(nèi)存使用率、交換機(jī)吞吐量、服務(wù)器磁盤I/O 等進(jìn)行密切監(jiān)測,從而及時捕獲故障信息,進(jìn)而及時修復(fù)故障并降低損失。因此,KPI 異常檢測是保證云網(wǎng)融合服務(wù)質(zhì)量至關(guān)重要的一步。
然而,作為保障云網(wǎng)融合服務(wù)質(zhì)量的關(guān)鍵,KPI異常檢測卻成為當(dāng)今實際應(yīng)用環(huán)境中極具挑戰(zhàn)性的任務(wù)。一方面,得益于云供應(yīng)商提供的多元化云服務(wù),各廠商或企業(yè)能將其應(yīng)用迅速、高效地部署在云端,因而依托云平臺誕生的應(yīng)用數(shù)量急劇膨脹,伴隨而來的是運維數(shù)據(jù)體量的激增。這使得通過早期的人工監(jiān)控或自動化腳本方法[1]實現(xiàn)KPI 異常檢測消耗巨大且效率低下。另一方面,為了應(yīng)對當(dāng)今社會快節(jié)奏的生活方式,各大廠商也加速了自身應(yīng)用或服務(wù)的更新迭代速度。這種頻繁的產(chǎn)品變更可能不僅會導(dǎo)致某一指標(biāo)的KPI 的形態(tài)發(fā)生變化,也會改變異常點的分布模式。因此,KPI 異常檢測任務(wù)對算法處理海量數(shù)據(jù)、自適應(yīng)檢測異常的能力提出了更高的要求。
針對上述挑戰(zhàn),近年來,研究者們提出了一系列KPI 異常檢測方法,實現(xiàn)自動檢測云網(wǎng)融合服務(wù)KPI 的異常行為。這些方法包括基于傳統(tǒng)統(tǒng)計的方法[2-16]、有監(jiān)督機(jī)器學(xué)習(xí)方法[17-19]、半監(jiān)督機(jī)器學(xué)習(xí)方法[20-22]和無監(jiān)督機(jī)器學(xué)習(xí)方法[23-45]。盡管這些方法是隨著運維需求逐漸演進(jìn)的,但每一種方法在特定場景下都有其優(yōu)勢和劣勢——基于無監(jiān)督學(xué)習(xí)的異常檢測方法并非在所有場景中都是最優(yōu)選擇,而基于統(tǒng)計概率模型的異常檢測方法在某些場景下具有無可替代的優(yōu)勢[24-28]。然而,目前缺乏對KPI 異常檢測方法的梳理、歸納、總結(jié)及分類。這就導(dǎo)致運維人員難以從大量KPI 異常檢測方法中快速并準(zhǔn)確地選擇最適合其場景的方法。因此,本文首先對KPI 異常檢測方法進(jìn)行了深入研究和分析,總結(jié)了其一般性問題、挑戰(zhàn)和框架。然后,本文挑選出13個代表性KPI 異常檢測方法進(jìn)行了歸納總結(jié)。最后,本文從三個國內(nèi)頂尖互聯(lián)網(wǎng)公司獲取了真實KPI 時間序列數(shù)據(jù),對比了上述13 個異常檢測方法在準(zhǔn)確性、魯棒性和效率三個方面的性能,并分析了各個方法在不同場景中的優(yōu)劣。這為將來研究人員和運維人員快速、準(zhǔn)確地選擇最適合其場景的KPI 異常檢測方法提供了依據(jù)。
為了更好的理解KPI 異常檢測,本章從基本定義和發(fā)展進(jìn)行介紹,并且通過對近幾年KPI 異常檢測方法的研究總結(jié)出了一般問題及挑戰(zhàn)。
關(guān)鍵性能指標(biāo)(KPI)是時間序列數(shù)據(jù)(例如CPU 利用率、頁面訪問量、網(wǎng)絡(luò)吞吐量等),它可以從簡單網(wǎng)絡(luò)管理協(xié)議(Simple Network Management Protocol,SNMP)、系統(tǒng)日志、網(wǎng)絡(luò)跟蹤、Web 訪問日志和其他數(shù)據(jù)源中得到[17],它由值和時間戳組成,可以表示為X=(x1,x2,x3,...,xJ),其中xj表示在時間j 時刻的值,其中j ∈(1,2,3,...,J)。每一條KPI 時間序列都有固定的時間間隔(例如十秒鐘、一分鐘、五分鐘等),不同的KPI 時間序列也會有不同的數(shù)據(jù)形態(tài),如圖1所示。
異常指那些不符合正常行為的模式。如圖1所示,紅色部分明顯和整體正常趨勢不符,因此本文中把紅色部分定義為異常。
圖1 本文中所使用的KPI 時間序列,每個KPI 都繪制有一個72 小時長的段,其中紅色為異常數(shù)據(jù),藍(lán)色為正常數(shù)據(jù)。Fig.1 The KPI data used in this paper.Each KPI is drawn with a 72-hour segment,in which red is abnormal data and blue is normal data.
KPI 異常檢測指在數(shù)據(jù)中查找那些與預(yù)期行為不符的模式??蒲腥藛T可利用統(tǒng)計概率分析,人工智能等不同學(xué)科知識針對不同KPI 時間序列進(jìn)行異常檢測。
標(biāo)注則是指的是經(jīng)驗豐富的運維人員運用他們的先驗知識對異常情況進(jìn)行的標(biāo)記,它可以用來幫助訓(xùn)練異常檢測模型。根據(jù)使用標(biāo)注的規(guī)模進(jìn)行模型訓(xùn)練的情況,可以把異常檢測分為有監(jiān)督、半監(jiān)督、無監(jiān)督。
KPI 異常檢測方法的發(fā)展歷程大致可以劃分為以下幾個階段:
(1)基于統(tǒng)計學(xué)原理:起初,由于異常檢測問題所具有的數(shù)學(xué)特性,研究人員想到可以利用統(tǒng)計學(xué)原理進(jìn)行正常樣本與異常樣本的區(qū)分,從而帶動了統(tǒng)計方法在KPI 異常檢測領(lǐng)域被廣泛而深入地應(yīng)用[2-16]。例如,ARIMA[4](Autoregressive Integrated MovingAverage model,以下稱為ARIMA)利用差分、自回歸和移動平均模型實現(xiàn)通過歷史值對當(dāng)前值進(jìn)行預(yù)測;EWMA[5](Exponentially Weighted Moving-Average)通過對窗口中的觀測值分別給予與時間相關(guān)的權(quán)重,在此前提下求得加權(quán)移動平均值,作為當(dāng)前值的預(yù)測值;文獻(xiàn)[6]利用滑動窗口中觀測值的均值和標(biāo)準(zhǔn)差設(shè)置閾值,用以衡量當(dāng)前值在被認(rèn)為是異常值之前可以偏離移動平均的距離;SPOT[7]利用極值理論檢測時間序列中的突變;FluxEV[8]在SPOT 的基礎(chǔ)上利用矩量法進(jìn)一步提升自動閾值估計速度;文獻(xiàn)[9]利用核密度估計進(jìn)行異常檢測;文獻(xiàn)[10-12]基于STL 分解算法;文獻(xiàn)[10]將時序數(shù)據(jù)按照季節(jié)項、趨勢項和余項進(jìn)行分解,以此去除時序數(shù)據(jù)自身的季節(jié)和趨勢對異常檢測的影響,使得算法具有一定的魯棒性。這類方法需要運維人員為每一條KPI 時間序列、每隔一段時間手動選擇最優(yōu)的統(tǒng)計概率算法和參數(shù)。隨著應(yīng)用服務(wù)日益龐大、繁雜,需要監(jiān)測的系統(tǒng)KPI 時間序列數(shù)量呈爆發(fā)式增長。單純依靠運維人員手動為每個KPI 時間序列進(jìn)行算法選擇和參數(shù)調(diào)優(yōu)的異常檢測方法愈發(fā)不適用于真實運維環(huán)境,且易出錯、不易擴(kuò)展。
(2)基于傳統(tǒng)機(jī)器學(xué)習(xí)算法:為了將運維人員從手動算法選擇和參數(shù)調(diào)整中解放出來,并提高異常檢測的準(zhǔn)確性和魯棒性,研究人員考慮從海量的數(shù)據(jù)中自動學(xué)習(xí)模式或規(guī)律[1],而傳統(tǒng)機(jī)器學(xué)習(xí)算法(如聚類、隨機(jī)森林等)恰巧具有上述優(yōu)勢,因此很快成為KPI 異常檢測工作的研究的中心。起初的一些工作僅將傳統(tǒng)機(jī)器學(xué)習(xí)算法[46-47]視為基本檢測器[17]。相關(guān)工作[17-19]利用人工標(biāo)注進(jìn)行異常檢測模型訓(xùn)練。2015年提出的Opprentice[17]首次提出了將機(jī)器學(xué)習(xí)應(yīng)用于KPI 異常檢測框架,基于隨機(jī)森林算法訓(xùn)練模型。但是,該方法需要使用訓(xùn)練集中全部KPI 的真實異常標(biāo)注信息,這在減小手動調(diào)參等開銷的同時又給運維人員帶來了額外的標(biāo)注開銷。為了進(jìn)一步減小異常標(biāo)注開銷,后續(xù)工作傾向于提出半監(jiān)督[20-22]或者無監(jiān)督[23-29]的異常檢測方法。其中半監(jiān)督異常檢測方法有不少代表性工作,例如,2018年提出的ADS[20]和2021年提出的PUAD[21],它們通過ROCKA[49](Robust Clustering Using Links)算法對KPI 時間序列進(jìn)行聚類,屬于同一簇的KPI將共用異常標(biāo)注信息,由此來減少標(biāo)注開銷。無監(jiān)督異常方法由于其無需人工標(biāo)注的優(yōu)勢,近年來代表性工作頗多,例如,2020年提出的DDCOL[30]將基于密度的參數(shù)自適應(yīng)聚類作為核心技術(shù),同時結(jié)合高階差分和子采樣技術(shù),針對各種KPI 時間序列突變進(jìn)行在線異常檢測;2020年提出的iRRCF[31]基于魯棒隨機(jī)割算法提出一種無監(jiān)督的白盒異常檢測方法,用于通用的KPI 異常檢測。
(3)基于深度學(xué)習(xí):隨著人工智能相關(guān)技術(shù)的發(fā)展和計算資源的提升,深度學(xué)習(xí)算法在各領(lǐng)域任務(wù)中的出色表現(xiàn)引起了學(xué)者的研究興趣。深度學(xué)習(xí)利用多層神經(jīng)網(wǎng)絡(luò)層從數(shù)據(jù)中提取高維特征,具有高度抽象并發(fā)現(xiàn)數(shù)據(jù)內(nèi)在聯(lián)系的強(qiáng)大能力,因而在異常檢測領(lǐng)域被廣泛應(yīng)用。近三年提出了諸多基于深度學(xué)習(xí)的KPI 異常檢測方法[32-45],這些工作利用了VAE(Variational Auto-Encoder)、GAN(Generative Adversarial Network)、LSTM(Long Short-Term Memory)、CNN(Convolutional Neural Network)等被廣泛使用深度學(xué)習(xí)技術(shù),其中大多工作是無監(jiān)督的。部分工作提出通用的KPI 異常檢測方法,即不針對特定的數(shù)據(jù)場景,例如2019年提出的SRCNN[38]是一種基于光譜殘差和卷積神經(jīng)網(wǎng)絡(luò)(CNN)的無監(jiān)督異常檢測方法,在微軟Azure 服務(wù)中被廣泛部署;2020年提出的TadGAN[36]是一種基于生成對抗網(wǎng)絡(luò)(GAN)和長短期記憶(LSTM)遞歸網(wǎng)絡(luò)的無監(jiān)督異常檢測方法,該方法具有較強(qiáng)的穩(wěn)定性,在大多數(shù)情況下都具有優(yōu)秀的表現(xiàn)。其他部分工作針對于解決KPI 異常檢測中的特定問題,例如2018年提出的Donut[28]利用變分自動編碼器(VAE)針對周期性的KPI 時間序列進(jìn)行無監(jiān)督異常檢測;2019年提出的KPI-TSAD[50]利用VAE 過采樣模型解決數(shù)據(jù)不平衡問題,并使用包含卷積和長短期記憶(LSTM)網(wǎng)絡(luò)的深度模型進(jìn)行預(yù)測;2019年提出的Buzz[43]基于VAE 對抗訓(xùn)練側(cè)針對機(jī)器級別的復(fù)雜KPI 進(jìn)行異常檢測;2021年提出的Adran[33]將對抗學(xué)習(xí)引入重構(gòu)模型,生成一個具有基于異常檢測訓(xùn)練目標(biāo)的重構(gòu)對抗網(wǎng)絡(luò),提高對非高斯噪聲的容忍性。這些算法進(jìn)一步降低了標(biāo)注成本,在應(yīng)用中的表現(xiàn)也得到了極大提升,對異常檢測領(lǐng)域具有重要作用。
KPI 異常檢測面臨如下挑戰(zhàn):
數(shù)據(jù)形態(tài)不一:(1)在不同的數(shù)據(jù)場景(簡單分為業(yè)務(wù)層和機(jī)器層。業(yè)務(wù)層通常是在互聯(lián)網(wǎng)業(yè)務(wù)層面,其KPI 形態(tài)呈現(xiàn)規(guī)律性,即周期性,例如每分鐘的頁面訪問量、在線用戶數(shù)等。機(jī)器層通常反映機(jī)器健康狀況,例如一臺服務(wù)器的網(wǎng)卡吞吐率、內(nèi)存利用率等)下,KPI 監(jiān)測數(shù)據(jù)的形態(tài)不一樣。如圖1所示展示了在三家大型互聯(lián)網(wǎng)公司不同的業(yè)務(wù)場景及不同的機(jī)器水平下的KPI 時間序列,可以看出這些KPI 時間序列分別具有周期性(如圖1(a)(f)所示)、不規(guī)則波動(如圖1(c)(i)所示)等不同的形態(tài)特征。(2)同一數(shù)據(jù)場景下,不同的KPI 時間序列數(shù)據(jù)的形態(tài)不一(如圖2所示)。因此,很難選擇用一種算法對所有的KPI 時間序列進(jìn)行異常檢測。
圖2 同一業(yè)務(wù)場景中不同KPI 時間序列Fig.2 Different KPI time series in the same business scenario
缺少標(biāo)注信息:由于云網(wǎng)融合系統(tǒng)日益龐大和復(fù)雜,KPI 時間序列數(shù)據(jù)的規(guī)模也在猛增,其異常情況種類繁雜,單依靠有經(jīng)驗的運維人員對異常情況進(jìn)行標(biāo)注是一項十分繁重的工作。
時間效率問題:在線運維場景中數(shù)據(jù)規(guī)模大且對異常檢測的時間開銷要求高。如果異常檢測模型效率較低,很難將其運用到大規(guī)模的數(shù)據(jù)檢測中。
本章將對KPI 異常檢測框架進(jìn)行描述,根據(jù)對公開發(fā)表的KPI 異常檢測方法的研究,本章把通用框架分成兩類,如圖3所示。兩類框架既有共性又有區(qū)別。無論哪種方法,都會包含輸入、輸出,并在進(jìn)行異常檢測之前一般都會先進(jìn)行數(shù)據(jù)預(yù)處理,異常檢測完畢后都必不可少的對該算法進(jìn)行評估。接下來對輸入、輸出、數(shù)據(jù)預(yù)處理和算法評估階段做介紹。
圖3 兩類KPI 異常檢測框架圖Fig.3 Two types of KPI anomaly detection framework diagram
輸入:指未經(jīng)處理的原始的KPI 時間序列,它可以從簡單網(wǎng)絡(luò)管理協(xié)議(SNMP)、系統(tǒng)日志、網(wǎng)絡(luò)跟蹤、Web 訪問日志和其他數(shù)據(jù)源中得到[17]。
數(shù)據(jù)預(yù)處理:對原始數(shù)據(jù)進(jìn)行處理,一般會有以下三種類型的處理,對缺失數(shù)據(jù)的處理、對數(shù)據(jù)特征提取和對原始數(shù)據(jù)格式更改。第一種,對缺失數(shù)據(jù)處理,一般會對缺失點位置采用取零或者取平均的方法進(jìn)行補齊填充。第二種,數(shù)據(jù)特征提取,一般會利用多個檢測器對一條KPI 時間序列提取多個不同的特征,將提取到的特征結(jié)合,作為異常檢測模型的輸入。第三種,把原始KPI 時間序列數(shù)據(jù)格式改成適合異常監(jiān)測模型輸入的形式,例如,有的算法需要滑動窗口或者矩陣的形式輸入,這時就需要數(shù)據(jù)預(yù)處理,把原始KPI 時間序列數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換。
輸出:KPI 異常檢測的輸出有兩種形式:(1)連續(xù)值,輸出的連續(xù)值代表的是當(dāng)前被檢測實例的異常程度,通常被稱作異常分?jǐn)?shù)。運維人員可以根據(jù)自身經(jīng)驗,選取合適的閾值對其進(jìn)行是否是異常的判斷。(2)離散值,該輸出方式利用二進(jìn)制標(biāo)簽給每一個被檢測實例分配一個標(biāo)注(正?;虍惓#?。
算法評估:算法評估是不可缺少的環(huán)節(jié),它可以從多方面利用多種指標(biāo)衡量一個算法的好壞,如精確性、魯棒性、效率等方面。具體情況將在本文的第四章進(jìn)行詳細(xì)介紹。
兩類框架也存在一定的區(qū)別,如圖3中虛線框所示,傳統(tǒng)的統(tǒng)計概率算法框架在進(jìn)行了最開始的數(shù)據(jù)預(yù)處理之后,通常就開始利用數(shù)據(jù)統(tǒng)計分析的方法對預(yù)處理后的歷史數(shù)據(jù)進(jìn)行統(tǒng)計分析,得出預(yù)測值,隨之對待檢測點進(jìn)行異常檢測。利用機(jī)器學(xué)習(xí)方法的算法框架,在數(shù)據(jù)預(yù)處理完畢之后,就會進(jìn)行異常檢測模型訓(xùn)練,異常檢測模型訓(xùn)練的目的是使用歷史數(shù)據(jù)進(jìn)行參數(shù)自適應(yīng)從而訓(xùn)練出較好的檢測模型,異常檢測模型訓(xùn)練完成,會對待檢測點進(jìn)行異常檢測,得出對當(dāng)前該點是否是異常的判斷。
在本章節(jié)中將對KPI 異常檢測方法中的關(guān)鍵性特點進(jìn)行介紹,并對它們所使用到的方法技術(shù)進(jìn)行了分類以及原理介紹。
本文中從大量KPI 異常檢測方法中一共挑選了13 個典型的KPI 異常檢測方法,Opprentice、ADS、PUAD[21]、iForest[23]、OCSVM[24]、DeepAnT[26]、Fuse-AD[27]、Donut、Bagel[29]、Wavelet[2]、HolterWinters[3]、ARIMA、EWMA,具體的選擇理由將在4.2 節(jié)中詳細(xì)闡述。它們都旨在進(jìn)行KPI 異常檢測,但不同的KPI 異常檢測方法可能會有不同的表現(xiàn)性能。通過調(diào)研,在表1里對KPI 異常檢測方法的總結(jié)進(jìn)行了展示,列舉并對比了KPI 異常檢測方法的關(guān)鍵性特點,包含有是否需要標(biāo)注、是否需要人工調(diào)參、方法技術(shù)分類、適用的KPI 類型以及其輸出形式。
需要標(biāo)注:需要標(biāo)注指的是KPI 異常檢測方法在模型訓(xùn)練以及擬合的過程中是否需要運維人員標(biāo)注的真實異常信息來輔助模型的構(gòu)建。如果需要則被標(biāo)記為“√”,如果不需要則標(biāo)記為“×”。通常情況下,傳統(tǒng)的統(tǒng)計方法不需要標(biāo)注信息,使用機(jī)器學(xué)習(xí)方法的異常檢測技術(shù)根據(jù)是否使用標(biāo)注可以分為有監(jiān)督學(xué)習(xí)、半監(jiān)督學(xué)習(xí)、無監(jiān)督學(xué)習(xí)。有監(jiān)督學(xué)習(xí)指訓(xùn)練模型時需要訓(xùn)練數(shù)據(jù)全部的標(biāo)注信息。例如,Opprentice 為有監(jiān)督學(xué)習(xí)方法,需要訓(xùn)練集上完整的標(biāo)注信息訓(xùn)練分類器。半監(jiān)督學(xué)習(xí)指模型訓(xùn)練數(shù)據(jù)同時包含部分標(biāo)記樣本數(shù)據(jù)和未標(biāo)記樣本數(shù)據(jù)。例如,ADS、PUAD 為半監(jiān)督學(xué)習(xí)方法,僅需要對部分樣本進(jìn)行標(biāo)注。無監(jiān)督學(xué)習(xí)指模型訓(xùn)練數(shù)據(jù)的標(biāo)記信息未知。方法[23-29]為無監(jiān)督學(xué)習(xí)方法,它們在訓(xùn)練模型時不使用標(biāo)注信息,通過學(xué)習(xí)訓(xùn)練數(shù)據(jù)上的內(nèi)在規(guī)律進(jìn)行模型訓(xùn)練,進(jìn)而對測試數(shù)據(jù)進(jìn)行預(yù)測及異常判斷。
人工調(diào)參:指對于新的KPI 時間序列進(jìn)行異常檢測時需不需要人工進(jìn)行參數(shù)調(diào)整以及最后進(jìn)行異常判斷時需不需要人工進(jìn)行閾值選擇。如果需要則被標(biāo)記為“是”,如果不需要,則被標(biāo)記為“否”。對于只需要進(jìn)行部分調(diào)參的算法,本文對其標(biāo)記為“部分”。通過表1可以得出,基于統(tǒng)計的KPI 異常檢測方法是需要人工進(jìn)行調(diào)整參數(shù)以及閾值選擇的,iForest、OCSVM 需要部分調(diào)參,而剩余的基于機(jī)器學(xué)習(xí)算法的KPI 異常檢測方法則不需要手動調(diào)參或選擇閾值。
表1 KPI 異常檢測方法總結(jié)Table 1 Summary of Key performance indicators (KPI) anomaly detection methods
方法技術(shù):指KPI 異常檢測方法依據(jù)使用的方法和技術(shù)。本章對選取的13 種異常檢測方法所使用的方法技術(shù)進(jìn)行了總結(jié),一共分為八類,包含基于隨機(jī)森林、基于聚類、基于PU 學(xué)習(xí)、基于孤立森林、基于支持向量機(jī)、基于深度生成模型、基于卷積神經(jīng)網(wǎng)絡(luò)、基于統(tǒng)計。這些方法技術(shù)原理將在3.2 小節(jié)里進(jìn)行詳細(xì)介紹。
適用KPI 類型:指KPI 異常檢測方法是否只針對特定的KPI 時間序列類型,如果是,則代表該KPI 異常檢測方法只能對部分KPI 時間序列類型進(jìn)行較好的異常檢測,否則將其標(biāo)記為“通用”。如表1所 示,Donut、Bagel、DeepAnT、FuseAD 四 個方法進(jìn)行異常檢測時對KPI 時間序列是有針對性的,而其他方法并沒有針對特定的KPI 時間序列類型進(jìn)行研究,本文則認(rèn)為這樣的方法適合于所有的KPI時間序列類型。
輸出:指KPI 異常檢測方法經(jīng)過檢測后的輸出形式。如表1所示,輸出形式有兩種:(1)離散值,指利用二進(jìn)制標(biāo)簽給每一個被檢測實例分配一個預(yù)測標(biāo)注(正?;虍惓#?。(2)連續(xù)值,指輸出結(jié)果為當(dāng)前被檢測實例的異常程度,評估時需要根據(jù)異常程度得出其最佳F1 分?jǐn)?shù)。
本小節(jié)對13 種異常檢測方法所使用的方法技術(shù)進(jìn)行總結(jié)介紹。
基于隨機(jī)森林:隨機(jī)森林是一種傳統(tǒng)機(jī)器學(xué)習(xí)算法,它利用多棵決策樹對樣本進(jìn)行分類模型訓(xùn)練,每一棵決策樹也是一種基本的分類模型。隨機(jī)森林通過對隨機(jī)抽取數(shù)據(jù)樣本以及隨機(jī)選取特征集合,構(gòu)造多棵決策樹。待檢測數(shù)據(jù)通過多棵決策樹得到多個分類結(jié)果,對分類結(jié)果投票得出其異常檢測結(jié)果。Opprentice 通過提取訓(xùn)練樣本的特征集合,隨機(jī)選取特征子集訓(xùn)練多棵決策樹構(gòu)建隨機(jī)森林,對測試數(shù)據(jù)進(jìn)行異常檢測。
基于聚類:聚類是一種常見的傳統(tǒng)機(jī)器學(xué)習(xí)方法,可以用于潛在類別劃分,它根據(jù)某一特定的相關(guān)性度量將數(shù)據(jù)對象分類,以確保同一類別中對象高相關(guān),不同類別中對象低相關(guān)。KPI 時間序列在其形狀特征上會存在一定的相似性,因此可以使用聚類方法對KPI 時間序列進(jìn)行類別劃分,達(dá)到減少人工標(biāo)注、模型選擇和參數(shù)配置等的目的。ADS、PUAD 利用ROCKA 算法通過一個基于形狀的相似性度量方法SBD[51]對歷史KPI 時間序列進(jìn)行類別劃分,然后利用每一類的類質(zhì)心(KPI 時間序列)的特征和標(biāo)注并結(jié)合后續(xù)模型框架進(jìn)行異常檢測。
基于PU 學(xué)習(xí):PU 學(xué)習(xí)(Positive-Unlabeled Learning)是半監(jiān)督學(xué)習(xí)的一個研究方向,指在僅有正例樣本和未標(biāo)注數(shù)據(jù)的情況下,訓(xùn)練分類器。相比于有監(jiān)督學(xué)習(xí),PU 學(xué)習(xí)在模型訓(xùn)練時僅需要對部分正例樣本進(jìn)行標(biāo)注。PUAD 在對KPI 曲線進(jìn)行聚類后,基于PU 學(xué)習(xí)訓(xùn)練模型。由于KPI 時間序列中正例樣本數(shù)目遠(yuǎn)少于負(fù)例樣本數(shù)目,因此PUAD在很大程度減少了數(shù)據(jù)標(biāo)注的工作量。
基于孤立森林:孤立森林通過孤立異常點來實現(xiàn)異常檢測,它包含多棵孤立樹(一種隨機(jī)二叉樹)。孤立樹是通過對訓(xùn)練樣本進(jìn)行遞歸分隔,直到所有的樣本被孤立或者樹達(dá)到了指定的高度后來建立的,在這種隨機(jī)分割下,異常往往具有較短的路徑。iForest 利用訓(xùn)練樣本構(gòu)建多棵孤立樹形成孤立森林,通過將具有較短路徑長度的點識別為異常點,進(jìn)而實現(xiàn)對測試數(shù)據(jù)進(jìn)行預(yù)測。
基于支持向量機(jī)(Support Vector Machine,SVM):支持向量機(jī)是一種用于二分類的傳統(tǒng)機(jī)器學(xué)習(xí)算法,旨在學(xué)習(xí)出向量空間中最大邊距超平面,借此劃分出正例和負(fù)例。OCSVM 是基于SVM 的改進(jìn),它的基本思想是假定在訓(xùn)練集中只存在一類數(shù)據(jù),在訓(xùn)練數(shù)據(jù)中計算出一個半徑最小的超球面,將所有的測試樣本數(shù)據(jù)都包含在這個超球體內(nèi),給測試集進(jìn)行分類時,落在超球體內(nèi)部的數(shù)據(jù)被當(dāng)作一類數(shù)據(jù),落在超球體外的被當(dāng)作另一類數(shù)據(jù)。
基于深度生成模型:深度生成模型指深度學(xué)習(xí)技術(shù)的生成模型,包含眾多神經(jīng)網(wǎng)絡(luò)模型。深度生成模型從訓(xùn)練數(shù)據(jù)中學(xué)習(xí)樣本的概率分布,并生成一個由訓(xùn)練數(shù)據(jù)概率分布到測試數(shù)據(jù)概率分布的映射,借此來進(jìn)行異常檢測。Donut 和Bagel 使用了深度生成模型之變分自編碼器(VAE),它是最簡單的深度貝葉斯網(wǎng)絡(luò)之一,用來描述觀測變量和隱變量之間的關(guān)系。Bagel 是Donut 的擴(kuò)展,在Donut 的基礎(chǔ)上使用時間信息條件幫助重構(gòu)正常模式,大大提高了Donut 對與時間信息相關(guān)異常的魯棒性,但是會導(dǎo)致Bagel 對數(shù)據(jù)的時間信息要求更加敏感。
基于卷積神經(jīng)網(wǎng)絡(luò)(CNN):卷積神經(jīng)網(wǎng)絡(luò)是一種常見的深度學(xué)習(xí)模型。典型的卷積神經(jīng)網(wǎng)絡(luò)由卷積層、池化層、全連接層構(gòu)成。卷積層用于提取特征和數(shù)據(jù)降維,池化層用于進(jìn)一步的特征降維,全連接層用于特征空間到類別空間的轉(zhuǎn)換。DeepAnT和FuseAD 主要基于CNN 進(jìn)行KPI 異常檢測,它們都具有類似的模型框架,即兩個一維卷積層、兩個池化層和兩個全連接層,最后通過激活函數(shù)對全連接層的輸出進(jìn)行非線性變換。其中,F(xiàn)useAD 是DeepAnT 的進(jìn)一步提升,它融合了統(tǒng)計學(xué)和深度學(xué)習(xí)模型進(jìn)行無監(jiān)督異常檢測,可以在一定程度上解決數(shù)據(jù)掉點的問題。
基于統(tǒng)計:傳統(tǒng)的統(tǒng)計方法,其最大的優(yōu)勢在于簡單易實現(xiàn)、高效率、不需要過多的數(shù)據(jù)進(jìn)行模型訓(xùn)練。ARIMA 結(jié)合了自回歸、差分以及移動平均三種基本模型。使用ARIMA 對時間序列進(jìn)行建模的前提是該序列必須是平穩(wěn)的,因此首先需要進(jìn)行平穩(wěn)性的測試與確保。模型包含三個參數(shù),分別為差分、自回歸與移動平均模型的階數(shù)。雖然已經(jīng)有工作實現(xiàn)模型參數(shù)自動適配,但是其需要花費較大的時間成本,因此往往還是會進(jìn)行手動參數(shù)適配。EWMA僅由觀測值預(yù)測當(dāng)前平滑值,各觀測值的加權(quán)系數(shù)隨時間呈指數(shù)型遞減,越遠(yuǎn)離當(dāng)前時刻的觀測值加權(quán)系數(shù)越小。相較于傳統(tǒng)平均法,EWMA 不需要保存全部歷史數(shù)據(jù),并且計算量顯著減少。EWMA 僅需要一個參數(shù),即加權(quán)系數(shù)衰減因子。Wavelet 關(guān)注事件序列的時頻信息,利用小波變換從滑動窗口中的時序數(shù)據(jù)中提取特定頻率的信號,將其作為時間序列的特征值。Wavelet 的參數(shù)為窗口長度和頻率。Holt-Winters 方法也叫三次指數(shù)平滑法,主要針對有趨勢性和季節(jié)性的序列。Holt-Winters 在EWMA 的基礎(chǔ)上,額外考慮了序列的趨勢和季節(jié)分量,對每個分量都需要進(jìn)行指數(shù)平滑操作,因此總共有三個參數(shù),即各自分量的加權(quán)系數(shù)衰減因子。傳統(tǒng)的統(tǒng)計方法往往在確定參數(shù)后,利用歷史數(shù)據(jù)對當(dāng)前時刻的數(shù)值(或范圍)進(jìn)行預(yù)測或者提取特征值,并不直接對當(dāng)前時刻劃分異常與否,因此往往需要手動設(shè)置閾值加以判定。在對不同的KPI 時間序列進(jìn)行異常檢測或者數(shù)據(jù)出現(xiàn)概念漂移的情況時,為了保證檢測效果,往往需要更改參數(shù)、閾值配置甚至重新選擇方法,這是一項繁瑣且耗時的工作。
本節(jié)為實驗部分,利用獲取到的三個不同的真實KPI 時間序列數(shù)據(jù)集對13 個KPI 異常檢測方法從準(zhǔn)確性、魯棒性和效率三方面分別進(jìn)行了評估對比,這三個方面是衡量KPI 異常檢測方法的關(guān)鍵因素。
實驗部分使用從三家國內(nèi)頂尖互聯(lián)網(wǎng)公司收集到的三個數(shù)據(jù)集,包括116 條維護(hù)良好的KPI 時間序列,對各KPI 異常檢測方法進(jìn)行評估。數(shù)據(jù)集分別命名為A,B,C。每一條KPI 時間序列的真實異常情況由經(jīng)驗豐富的運維人員進(jìn)行了詳細(xì)的標(biāo)注。來自不同的互聯(lián)網(wǎng)公司的數(shù)據(jù)集具有不同的時間序列特征,這也使得評估結(jié)果更全面。三種數(shù)據(jù)集的具體的數(shù)據(jù)信息如表2所示。相比于數(shù)據(jù)集A 和B,數(shù)據(jù)集C 的KPI 時間序列數(shù)量多、長度短且每條曲線上的真實的異常點較少,正如圖1中(g)(h)(i)所示,這將使得一些算法在該數(shù)據(jù)集上會比較突出,將在4.4 小節(jié)進(jìn)行介紹。
表2 數(shù)據(jù)集描述Table 2 Description of datasets
本節(jié)將詳細(xì)闡述本文評估階段的KPI 異常檢測方法的選擇原因。目前異常檢測方法數(shù)量眾多且相關(guān)研究數(shù)量還在不斷增加,每一類方法都有諸多相關(guān)工作。為了使從評估結(jié)果中得出的結(jié)論更有說服力,需要挑選每一類方法中具有代表性的工作。
基于統(tǒng)計的方法:ARIMA、EWMA、Wavelet及Holt-Winters 是常見的統(tǒng)計方法,這些方法除了本身可用于KPI 異常檢測外,也作為文獻(xiàn)[17]、[20]、[27]、[32]、[39]等其他工作的一部分嵌入整個方法中。其中,文獻(xiàn)[17]、[20]將這四種統(tǒng)計方法作為基礎(chǔ)特征提取器,文獻(xiàn)[27]、[39]將ARIMA 用于整個方法的模塊構(gòu)建,文獻(xiàn)[32]利用EWMA 平滑重建誤差,減少檢測過程中的假陽性和假陰性。因此,這4種基于統(tǒng)計的KPI 異常檢測方法具有一定的代表性。
有監(jiān)督方法:Opprentice 首次將機(jī)器學(xué)習(xí)算法應(yīng)用于KPI 異常檢測模型訓(xùn)練,具有重大的意義。此后,Opprentice 作為基線方法在文獻(xiàn)[20]、[21]、[43]等工作中被多次引用。因此,Opprentice 可作為有監(jiān)督KPI 異常檢測方法的代表性工作。
半監(jiān)督方法:ADS、PUAD 作為近年來眾多工作中為數(shù)不多的半監(jiān)督方法,采用傳統(tǒng)機(jī)器學(xué)習(xí)算法,在減小異常標(biāo)注開銷的同時,保證了不輸于深度學(xué)習(xí)方法的準(zhǔn)確性和魯棒性表現(xiàn)。因此,ADS、PUAD 可作為目前半監(jiān)督KPI 異常檢測方法的代表性工作。
無監(jiān)督方法:無監(jiān)督KPI 異常檢測方法由于其完全不需要人工異常標(biāo)注的優(yōu)勢,是近年來的主要研究方向,因此其相關(guān)研究數(shù)量最多。iForest、OCSVM 基于傳統(tǒng)機(jī)器學(xué)習(xí)算法,可與基于深度學(xué)習(xí)的工作進(jìn)行對比。Bagel、Donut 基于廣泛使用的深度生成模型VAE 實現(xiàn)KPI 異常檢測,是深度學(xué)習(xí)應(yīng)用于KPI 異常檢測的開端,極具代表性。DeepAnT、FuseAD 將主要應(yīng)用于圖像處理的卷積神經(jīng)網(wǎng)絡(luò)應(yīng)用于KPI 時間序列異常檢測,同樣具有重大意義。因此,上述6 種方法可作為目前無監(jiān)督KPI 異常檢測方法的代表性工作。
在本節(jié)中,每一條KPI 時間序列都統(tǒng)一使用了十折交叉檢驗的方法用于實驗。由于在真實的KPI異常檢測場景中,KPI 異常往往是連續(xù)的片段,而運維人員通常只關(guān)心KPI 時間序列異常片段開始的時間[52],因此,如果KPI 異常檢測方法在異常發(fā)生之后能夠在一定時間范圍內(nèi)(允許的最大延遲時間)檢測出異常,則認(rèn)為該方法成功檢測到該異常片段。反之,若該方法在最大延遲時間內(nèi)并沒有檢測出異常,則認(rèn)為未能成功檢測出異常。在這里,延遲指KPI 時間序列異常片段的第一個異常點和檢測到的第一個異常點之間的時間差。
對于KPI 異常檢測方法兩種輸出方式的修正如圖4所示。圖4是最大延遲時間為1 分鐘的異常檢測結(jié)果修正,其中第一行是由有經(jīng)驗的運維人員進(jìn)行的真實異常的標(biāo)注,包含兩個異常片段(由加粗線框標(biāo)出)。第二行用虛線框標(biāo)出表示分情況存在,即當(dāng)輸出值是連續(xù)值時,得到第二行所示的異常分?jǐn)?shù),會利用閾值(圖中閾值為0.5)得到異常判斷,得到第三行的警報;否則,將會直接得到第三行的警報。第四行則是在最大延遲時間1 分鐘(圖中紅色線標(biāo)明)里進(jìn)行修正后的檢測結(jié)果,不難看出,第一個異常檢測片段是被成功檢測出來,因為在最大延遲時間里檢測出了異常,第二個異常檢測片段未被成功檢測,因為超過了最大延遲時間。
圖4 修正后的異常檢測結(jié)果Fig.4 Modified anomaly detection result
本文將從準(zhǔn)確性、魯棒性、效率三個方面對各KPI 異常檢測方法進(jìn)行評估對比,這些指標(biāo)均在實際應(yīng)用中具有重要的意義。
精確性:算法的精確性是衡量算法優(yōu)劣的重要標(biāo)準(zhǔn),對于二分類問題,常用的評估指標(biāo)有查準(zhǔn)率(Precision)、查全率(Recall)和F1 分?jǐn)?shù)(F1-score)。
查準(zhǔn)率(Precision)表示的是在預(yù)測為正例結(jié)果中預(yù)測正確的樣本所占的比例,其計算公式如下:
查全率(Recall)表示的是在所有正例樣本中被預(yù)測正確的樣本所占的比例,其計算公式如下:
其中,TP指實際為正例,被預(yù)測為正例的樣本數(shù)。FP指實際為負(fù)例,被預(yù)測為正例的樣本數(shù)。FN指實際為正例,被預(yù)測為負(fù)例的樣本數(shù)。
F1 分?jǐn)?shù)為查準(zhǔn)率和查全率的調(diào)和平均值,其計算公式如下:
魯棒性:魯棒性描述了KPI 異常檢測方法在面對不同類型KPI 事件序列及不同數(shù)據(jù)場景時的健壯程度,即在多種情況下方法能否持續(xù)保持穩(wěn)定的表現(xiàn),反映了方法的通用程度。由于箱型圖能夠較為直觀地體現(xiàn)數(shù)據(jù)分布的離散情況,因此,本文在評估部分借助箱型圖來進(jìn)行結(jié)果的展示及分析。
效率:效率用于衡量KPI 異常檢測方法檢測異常的速度,這在真實環(huán)境中也是至關(guān)重要的。因為在線運維對時間開銷有著很高的要求,而長時間等待異常判定結(jié)果會導(dǎo)致運維人員未能及時發(fā)現(xiàn)異常,這將會造成實際應(yīng)用中的巨大損失。在評估部分,本文使用對一個新的數(shù)據(jù)點進(jìn)行異常檢測的時間開銷來衡量各方法的效率。注意這里的時間并不包括模型離線訓(xùn)練所花費的時間。
本文的實驗均是在Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz,125GB RAM 和GNU/Linux 環(huán)境下運行實現(xiàn)的。
在本節(jié)中,本文對選取的13 個KPI 異常檢測方法進(jìn)行實驗并從4.3 節(jié)提到的三個方面進(jìn)行評估,全面分析了各個方法的優(yōu)劣性。
精確性:表3列出了在三個數(shù)據(jù)集(A,B,C)上13 個KPI 異常檢測方法的評估結(jié)果,每個數(shù)據(jù)集對應(yīng)的三列分別是不同方法在該數(shù)據(jù)集上的“Precision”、“Recall”和“F1-score”,這有助于在不同KPI 異常檢測方法中作比較,其中每一行代表了同一KPI 異常檢測方法在不同數(shù)據(jù)集上的表現(xiàn)。特別地,本文將“Precision”、“Recall”和“F1-score”不低于0.9 的進(jìn)行加粗表示,并使用“*”標(biāo)記的方式把每個數(shù)據(jù)集上最佳“F1-score”顯示突出。
表3 KPI 異常檢測方法在不同數(shù)據(jù)集上精確性比較Table 3 Comparison of result of key performance indicator anomaly detection methods on different datasets
根據(jù)“F1-score”結(jié)果,基于統(tǒng)計的KPI 異常檢測方法的精確性不如大部分的基于傳統(tǒng)機(jī)器學(xué)習(xí)算法和全部的基于深度學(xué)習(xí)算法的KPI 異常檢測方法。這主要有以下兩點原因:(1)基于統(tǒng)計的KPI異常檢測方法需要運維人員根據(jù)實際情況手動調(diào)整算法參數(shù)和閾值,固定的參數(shù)和閾值選擇只適用于具有相同特征的KPI 時間序列。因而固定參數(shù)配置的統(tǒng)計方法往往會出現(xiàn)在相同類型的KPI 時間序列上表現(xiàn)較好而在其它KPI 時間序列上表現(xiàn)不佳的情況,從而導(dǎo)致其整體表現(xiàn)不佳。(2)一種統(tǒng)計方法往往只聚焦于單一的數(shù)據(jù)特征,考慮到KPI 事件序列的復(fù)雜性,單一的數(shù)據(jù)特征不能很好的反映全部KPI 的序列特征。大部分基于機(jī)器學(xué)習(xí)算法的檢測方法能根據(jù)不同的數(shù)據(jù)集自適應(yīng)地學(xué)習(xí)合適的參數(shù),并能在數(shù)據(jù)處理過程中自動地去除噪聲等影響異常判斷的因素,具有強(qiáng)適應(yīng)性和學(xué)習(xí)性,因而具有良好的F1-score。在基于傳統(tǒng)機(jī)器學(xué)習(xí)的方法中,iForest 和OCSVM 表現(xiàn)遠(yuǎn)不如其他方法,這是由于在不使用標(biāo)注的情況下,iForest 對訓(xùn)練集中的噪聲較為敏感;OCSVM 在不使用標(biāo)注的情況下,無法在數(shù)據(jù)預(yù)處理時剔除訓(xùn)練集中的異常點,而異常點會對模型訓(xùn)練效果造成影響。ADS 在數(shù)據(jù)集C 上表現(xiàn)最佳,而在A、B 數(shù)據(jù)集上的表現(xiàn)欠佳,甚至A數(shù)據(jù)集上表現(xiàn)還不如ARIMA 和EWMA 這些統(tǒng)計方法,這是因為A、B 數(shù)據(jù)集中KPI 時間序列數(shù)量太少,導(dǎo)致ADS 聚類不精確,因此,ADS 方法在標(biāo)注信息充足的情況下更適用于大量KPI 時間序列異常檢測。PUAD 雖然在A、B 數(shù)據(jù)集上聚類效果同樣受到影響,但是由于其集成PU 學(xué)習(xí)僅需要正例的標(biāo)注,且提出一種新的主動學(xué)習(xí)方法在每次迭代時選擇最可能是正例的樣本,進(jìn)一步減少了誤報的可能性。Bagel 相比于Donut 嵌入了時間信息,比Donut 可以更好的檢測依賴于時間信息的異常,理論來說Bagel要比Donut 具有更好的表現(xiàn),但在本文的實驗中,Bagel 反而略低于Donut,這是因為嵌入了時間信息的Bagel,會對數(shù)據(jù)的周期性要求比較高,而本文使用的數(shù)據(jù)如圖1所示,并沒有顯示出很強(qiáng)的周期性,因此導(dǎo)致Bagel 在實驗中的表現(xiàn)反而不如Donut。
整體看來,基于機(jī)器學(xué)習(xí)的KPI 異常檢測方法在精確性上的表現(xiàn)整體優(yōu)于基于統(tǒng)計的KPI 異常檢測方法。在基于機(jī)器學(xué)習(xí)的KPI 異常檢測方法中,使用了人工標(biāo)注的方法以及基于深度學(xué)習(xí)的方法整體優(yōu)于不使用人工標(biāo)注的基于傳統(tǒng)機(jī)器學(xué)習(xí)的方法。
出于對偏好的考慮,本文特意對查準(zhǔn)率和查全率評估結(jié)果進(jìn)行了展示。特別地,對于iForest 和OCSVM,它們的查全率較高,甚至達(dá)到1,而查準(zhǔn)率又很低,雖然整體F1 分?jǐn)?shù)表現(xiàn)不佳,但是面對想要盡可能檢測出全部異常且對準(zhǔn)確性的要求不那么高的場景,也能夠使用這些方法。
魯棒性:異常檢測方法的魯棒性用于度量它在不同數(shù)據(jù)集或者不同KPI 時間序列曲線上精確性的一致性。一個具有優(yōu)異的魯棒性的異常檢測方法應(yīng)該能在各種KPI 時間序列曲線上都能表現(xiàn)良好。本
文使用如圖5所示的箱型圖來展示不同KPI 異常檢測方法在三個數(shù)據(jù)集上“F1-score”的分布,其中橫坐標(biāo)對應(yīng)的是本文詳細(xì)評估的13 個的KPI 異常檢測的方法,從左至右分別是基于統(tǒng)計的、無監(jiān)督的、有監(jiān)督的和半監(jiān)督的異常檢測方法。對于每個箱型圖,從底部到頂部的水平線分別對應(yīng)于最小、25%、中位數(shù)、75%和最大精度值。從圖5中可以得出,基于統(tǒng)計的KPI 異常檢測方法魯棒性最差,其最壞情況接近為0,最好情況也能達(dá)到接近1 的水平,其原因還是在于基于統(tǒng)計的方法對手動調(diào)參和閾值選擇依賴以及單一的統(tǒng)計方法僅能提取出一種特征。iForest、OCSVM 魯棒性相比于其他基于機(jī)器學(xué)習(xí)的方法來說較差,因為在訓(xùn)練時,訓(xùn)練數(shù)據(jù)中噪聲和異常點對模型訓(xùn)練有影響,訓(xùn)練集中噪聲程度和異常點占比的不同導(dǎo)致訓(xùn)練出的模型效果也不同。其中DeepAnT、FuseAD 的F1-score分布較為集中,但存在性能表現(xiàn)接近為0 的情況,因為他們對于周期性KPI 時間序列的振幅要求較高,不適用于振幅變化較大的KPI 時間序列,但在本文所使用的數(shù)據(jù)集中會有這種數(shù)據(jù)的少量存在,如圖1(g)所示。魯棒性較好的方法有Opprentice、ADS、PUAD、Bagel、Donut。從圖5中發(fā)現(xiàn)盡管大多數(shù)的異常檢測器在最好情況下的“F1-score”能夠達(dá)到0.9 以上,但它們在不同KPI 時間序列上的表現(xiàn)差異性還是很大,這說明幾乎沒有可以廣泛適用于所有KPI 時間序列的異常檢測方法。
圖5 不同方法在不同KPI 時間序列上的“F1-score”分布Fig.5 F1-score distribution of different methods on different KPI
整體看來,基于深度學(xué)習(xí)的異常檢測方法和基于傳統(tǒng)機(jī)器學(xué)習(xí)且使用了人工標(biāo)注的異常檢測方法在魯棒性上的表現(xiàn)最優(yōu),基于傳統(tǒng)機(jī)器學(xué)習(xí)但不使用人工標(biāo)注的異常檢測方法表現(xiàn)次之,基于統(tǒng)計的異常檢測方法表現(xiàn)最差。
效率:為了大規(guī)模地處理KPI 時間序列,效率是異常檢測方法不可忽視的一個重要方面。為了度量異常檢測方法的效率,本文實驗完整的記錄了它從開始檢測特定數(shù)據(jù)到檢測完成的時間開銷。檢測相同數(shù)量的數(shù)據(jù)時,異常檢測方法時間開銷越低,說明它的效率就越高。圖6展示了不同KPI 異常檢測方法在三個數(shù)據(jù)集上檢測單個數(shù)據(jù)點的所需要的時間,橫坐標(biāo)是本文所評估的13 個KPI 異常檢測方法,縱坐標(biāo)是時間(單位為毫秒)。從圖6中可以看出基于統(tǒng)計的KPI 異常檢測方法普遍用時較少,說明其效率較高。觀察到Opprentice、ADS、PUAD 三個方法檢測的時間開銷明顯多于其他方法,因為它們在進(jìn)行檢測的時候,需要對待檢測的數(shù)據(jù)點進(jìn)行多種特征提取。特別地,OCSVM,在數(shù)據(jù)集C 上時間效率相比于其他算法較高,但在數(shù)據(jù)集A、B 上卻沒有了這樣的優(yōu)勢。造成這種情況的主要原因是OCSVM 在進(jìn)行分類預(yù)測時,其計算時間與支持向量的個數(shù)有關(guān),而支持向量的個數(shù)與訓(xùn)練樣本數(shù)量呈正相關(guān),A 和B 數(shù)據(jù)集的單條KPI 時間序列的數(shù)據(jù)量遠(yuǎn)高于數(shù)據(jù)集C,因此通過十折交叉驗證在數(shù)據(jù)集A、B 上劃分的訓(xùn)練數(shù)據(jù)量遠(yuǎn)多于數(shù)據(jù)集C 上的訓(xùn)練數(shù)據(jù)量,導(dǎo)致其時間效率在數(shù)據(jù)集A、B 上降低。
圖6 不同算法在三個數(shù)據(jù)集上的效率Fig.6 The efficiency of different methods on three data sets
整體看來,基于統(tǒng)計的異常檢測方法時間效率最高。在基于機(jī)器學(xué)習(xí)的異常檢測方法中,需要對待檢測數(shù)據(jù)進(jìn)行特征提取的方法時間效率明顯低于其他方法,基于深度學(xué)習(xí)的方法時間效率又稍微低于基于傳統(tǒng)機(jī)器學(xué)習(xí)的方法。
基于上述三個方面的評估,本文可以得出以下結(jié)論:(1)基于統(tǒng)計的KPI 異常檢測方法雖然具有良好的效率,但因其需要不斷地手動調(diào)參和選擇閾值,導(dǎo)致其在增加額外開銷的同時精確性和魯棒性表現(xiàn)極差,已不再適用于KPI 時間序列爆炸式增長的云網(wǎng)融合時代。(2)對于基于傳統(tǒng)機(jī)器學(xué)習(xí)的無監(jiān)督異常檢測方法iForest 和OCSVM,因其在模型訓(xùn)練時會受訓(xùn)練集中噪聲和異常的影響,致使其精確性和魯棒性表現(xiàn)弱于其他算法。(3)使用標(biāo)注的基于傳統(tǒng)機(jī)器學(xué)習(xí)的異常檢測方法精確性和魯棒性尚可,但Opprentice 這類有監(jiān)督方法需要使用全部訓(xùn)練數(shù)據(jù),人工標(biāo)注開銷大,在標(biāo)注不足的情況下,推薦嘗試ADS、PUAD 這類半監(jiān)督的異常檢測方法。(4)對于DeepAnT、FuseAD 兩者效率較高,其精準(zhǔn)性也較好,但魯棒性不好,所以面對數(shù)據(jù)量大且類型單一的情況,可嘗試使用。(5)Bagel、Donut這類基于深度學(xué)習(xí)的無監(jiān)督異常檢測方法,其在時間效率上表現(xiàn)稍差,但在精準(zhǔn)性和魯棒性表現(xiàn)突出,考慮到這類方法需要大量數(shù)據(jù)進(jìn)行模型訓(xùn)練,因此推薦在歷史數(shù)據(jù)充足的情況下使用。(6)需要對檢測點進(jìn)行多種特征提取的方法在效率方面的表現(xiàn)明顯弱于其他方法,因此,如果在效率要求很高的場景,需要慎重選擇此類方法。
隨著云網(wǎng)融合技術(shù)的快速演進(jìn)和服務(wù)規(guī)模的急劇膨脹,人們對云網(wǎng)融合服務(wù)質(zhì)量的要求越來越高。作為快速故障發(fā)現(xiàn)和修復(fù)的基礎(chǔ)手段,近年來KPI異常檢測受到學(xué)術(shù)界和工業(yè)界的持續(xù)關(guān)注。本文對前人提出的KPI 異常檢測方法進(jìn)行了梳理,總結(jié)了這些方法的通用框架、技術(shù)特點及核心算法。然后,本文選擇了13 個代表性的KPI 異常檢測方法,使用從3 個國內(nèi)頂尖互聯(lián)網(wǎng)公司收集的KPI 時間序列數(shù)據(jù)進(jìn)行評估,并全面對比了這些方法的優(yōu)劣。本文的理論分析和實驗驗證將幫助研究人員和運維人員快速、準(zhǔn)確地判斷最適合其場景的KPI 異常檢測方法。
除了基于KPI 時間序列的異常檢測,基于日志的異常檢測和基于調(diào)用鏈的異常檢測也日益成為保障云網(wǎng)融合服務(wù)穩(wěn)定的重要手段?;谠凭W(wǎng)融合服務(wù)多種模態(tài)數(shù)據(jù)的異常檢測將更準(zhǔn)確、更高效地檢測服務(wù)異常,為后續(xù)的故障定位、根因分析奠定更扎實的基礎(chǔ)。
附 錄
在附錄部分,我們將本文中評估的KPI 異常檢測方法所使用的參數(shù)于表4中列出,以展示我們的工作細(xì)節(jié),提高本文的可復(fù)現(xiàn)性。在參數(shù)的選擇上,我們盡量尊重原論文,引用原論文中使用的參數(shù);對于未提供參數(shù)細(xì)節(jié)的,我們則根據(jù)實驗經(jīng)驗選擇常用的參數(shù)配置。由于表4中部分參數(shù)的意義可能并不明顯,在此對其一一作出解釋:
ARIMA:其參數(shù)是對數(shù)據(jù)進(jìn)行估計得來,并非人為手動確定,因而未列出。
EWMA:表示加權(quán)系數(shù)衰減因子。
Wavelet:win 表示窗口長度,freq 表示提取信號的頻率。
Holt-winters:α、β、γ,分別表示基線、趨勢和季節(jié)分量的加權(quán)系數(shù)衰減因子。
Opprentice:P、R 為模型的精準(zhǔn)度偏好設(shè)置,為更新分類閾值時的平滑常量,tree_count 表示隨機(jī)森林的決策樹數(shù)量。
ADS:min_samples 表示形成一個簇的最小樣本數(shù),max_radius 表示聚類半徑,tree_count 表示隨機(jī)森林的決策樹數(shù)量。
iForest:n_estimators 代表要構(gòu)建的孤立森林中孤立樹的顆數(shù),contamination 代表人為設(shè)置樣本中異常點的比例,max_samples 代表每棵樹中樣本個數(shù)或比例,max_features 代表每棵樹中特征個數(shù)或比例。
OCSVM:kernel 代表采用的核函數(shù),nu 代表預(yù)設(shè)定訓(xùn)練誤差,其余為算法默認(rèn)值。
DeepAnt:window 表示滑動窗口,filters 代表的是卷積神經(jīng)網(wǎng)絡(luò)中的過濾器,kernel_size 代表卷積神經(jīng)網(wǎng)絡(luò)中卷積核,activation 代表激活函數(shù)。
FuseAD:window 表示滑動窗口,filters 代表的是卷積神經(jīng)網(wǎng)絡(luò)中的過濾器,kernel_size 代表卷積神經(jīng)網(wǎng)絡(luò)中卷積核,activation 代表激活函數(shù),p,q,d為ARIMA 算法中的參數(shù),p 為自回歸項數(shù),q 為滑動平均項數(shù),d 為使之成為平穩(wěn)序列所做的差分次數(shù)(階數(shù))。
Donut(Baegl):由于Bagel 模型本質(zhì)上是Donut模型的擴(kuò)展延伸(僅額外利用了時間信息條件),其在實現(xiàn)上遵循Donut 的細(xì)節(jié),因此二者絕大部分的參數(shù)相同。所以,表4將二者參數(shù)合并列出,不相同的部分則使用括號標(biāo)注。其中,window_size 表示滑動窗口長度,missing_injection_rate 表示訓(xùn)練集缺失點注入的比例,mcmc_iteration 表示使用馬爾可夫鏈蒙特卡羅(Markov chain Monte Carlo,MCMC)方法采樣的迭代數(shù),latent_dim 表示隱變量的維度,std_epsilon 表示softmax 層為避免無效值增加的一個較小值,coefficient 表示對隱含層進(jìn)行L2 正則化使用的系數(shù),epoch 表示訓(xùn)練迭代數(shù),batch_size 表示一次訓(xùn)練所抓取的數(shù)據(jù)樣本數(shù)量,initial_lr 表示初始學(xué)習(xí)率,lr_anneal_epochs 與lr_anneal_factor 表示每lr_anneal_epochs 輪迭代就將學(xué)習(xí)率降低到原來的lr_anneal_factor 倍,grad_clip_norm 表示梯度截斷的閾值。Bagel 模型為了防止過擬合的問題增加了dropout 層,dropout_rate 表示其隨機(jī)拋棄數(shù)據(jù)的比例。
表4 KPI 異常檢測方法使用的參數(shù)Table 4 Used parameters of key performance indicator anomaly detection methods evaluated
PUAD:max_radius 表示聚類半徑,表示形成簇的個數(shù),表示特征提取的滑動窗口長度,表示初始樣本標(biāo)記數(shù),表示正例的先驗概率,表示學(xué)習(xí)步長,表示初始化樣本比例。
利益沖突聲明
所有作者聲明不存在利益沖突關(guān)系。