張圣林,林瀟霏,孫永謙*,張玉志,裴丹
1. 南開大學(xué),軟件學(xué)院,天津 300350
2. 清華大學(xué),計(jì)算機(jī)科學(xué)與技術(shù)系,北京 100084
隨著互聯(lián)網(wǎng)的高速發(fā)展與普及,基于互聯(lián)網(wǎng)的應(yīng)用服務(wù)已經(jīng)深入到人類社會生產(chǎn)生活的各個方面,包括通信、資訊、娛樂、學(xué)習(xí)、本地生活、金融、購物、出行、醫(yī)療、教育等。智能運(yùn)維是保證互聯(lián)網(wǎng)服務(wù)的用戶體驗(yàn)、性能、穩(wěn)定和安全的重要技術(shù)體系。其中,關(guān)鍵性能指標(biāo)(Key Performance Indicator, KPI)異常檢測是互聯(lián)網(wǎng)智能運(yùn)維的一個核心技術(shù)。大部分智能運(yùn)維的關(guān)鍵技術(shù),包括故障根因分析、異常定位、變更評估、異常事件關(guān)聯(lián)關(guān)系挖掘、異常報警聚合、快速止損、故障預(yù)測、熱點(diǎn)預(yù)測等,高度依賴 KPI 異常檢測的結(jié)果。
目前,學(xué)術(shù)界已經(jīng)提出一系列KPI 異常檢測方法。這些方法包括基于統(tǒng)計(jì)概率的方法、基于有監(jiān)督機(jī)器學(xué)習(xí)的方法、基于無監(jiān)督機(jī)器學(xué)習(xí)的方法。由于基于統(tǒng)計(jì)概率的KPI 異常檢測方法需要為每一個KPI 序列調(diào)整最優(yōu)參數(shù),耗費(fèi)大量人力資源,因此逐漸退出歷史舞臺。基于有監(jiān)督機(jī)器學(xué)習(xí)的KPI異常檢測方法需要大量的異常標(biāo)注來訓(xùn)練模型,同樣耗費(fèi)大量人力資源,因此難以應(yīng)用于大規(guī)模互聯(lián)網(wǎng)服務(wù)場景?;跓o監(jiān)督機(jī)器學(xué)習(xí)的KPI 異常檢測算法,既不需要逐個KPI 序列調(diào)參,也不需要標(biāo)注異常數(shù)據(jù),已經(jīng)成為KPI 異常檢測的未來發(fā)展趨勢。此外,由于深度生成模型能夠準(zhǔn)確捕獲復(fù)雜的KPI數(shù)據(jù)特征,因此近年來受到學(xué)術(shù)界和工業(yè)界的廣泛關(guān)注。
本文重點(diǎn)介紹三種基于深度生成模型的無監(jiān)督KPI 異常檢測算法——Donut,Bagel,Buzz,并在理論和實(shí)驗(yàn)兩個方面分析它們的性能。
為了保證向千萬級甚至上億級用戶提供可靠、高效的服務(wù),互聯(lián)網(wǎng)服務(wù)的運(yùn)維人員通常會持續(xù)地監(jiān)測服務(wù)和底層機(jī)器的KPI。一個典型的 KPI 案例是某服務(wù)在單位時間內(nèi)被訪問的次數(shù)—— PV(Page Views)。PV 會直接影響Web 服務(wù)供應(yīng)商的廣告收益和市場份額[1]。其它典型的KPI 類型還包括單位時間交易量(應(yīng)用于銀行、互聯(lián)網(wǎng)金融、證券、電商、團(tuán)購、移動出行等行業(yè))、當(dāng)前在線用戶數(shù)(應(yīng)用于電商、網(wǎng)絡(luò)游戲、無線接入網(wǎng)絡(luò),移動出行應(yīng)用等)、Web 主頁首屏?xí)r間、移動應(yīng)用加載時間、軟件報錯數(shù)、服務(wù)器CPU 使用率、容器內(nèi)存使用率、網(wǎng)絡(luò)吞吐率等。
根據(jù)服務(wù)類型和數(shù)據(jù)特征,可以將KPI 分成兩種類型:
(1)周期性服務(wù)KPI
服務(wù)和業(yè)務(wù)層面的KPI,如網(wǎng)絡(luò)吞吐量、頁面瀏覽量、在線用戶數(shù)量等,往往具有周期性,且其噪聲服從高斯分布。
(2)非周期性機(jī)器KPI
服務(wù)底層機(jī)器的KPI,如服務(wù)器每秒處理的I/O請求數(shù)量、容器內(nèi)存使用率等,往往不具有周期性。它們的噪聲不服從高斯分布,雖然短時間內(nèi)劇烈抖動,但是長時間內(nèi)又有一定的趨勢性。因此,這類KPI 的分布十分復(fù)雜,較難建模。
當(dāng) KPI 呈現(xiàn)出異常(如突增、突降、抖動)時,往往意味著與其相關(guān)的應(yīng)用可能發(fā)生了故障[2-5],如網(wǎng)絡(luò)故障、服務(wù)器故障、配置錯誤、缺陷版本上線、網(wǎng)絡(luò)過載、服務(wù)器過載、外部攻擊等。圖1展示了某搜索引擎一周內(nèi)的PV 數(shù)據(jù),其中標(biāo)紅圈標(biāo)識的兩個部分為異常。
對于周期性服務(wù)KPI,KPI 異常指的是KPI 數(shù)據(jù)不遵循周期性模式,即KPI 數(shù)值的大小發(fā)生了明顯變化使得數(shù)據(jù)整體不再呈現(xiàn)周期性。對于非周期性機(jī)器KPI,KPI 異常指的是KPI 數(shù)值的大小、變化等特征發(fā)生了明顯改變。
圖1 KPI 異常示例:某搜索引擎PV 發(fā)生異常Fig.1 An example of anomalous KPI: the PV of a search engine become anomalous
為了保障互聯(lián)網(wǎng)公司能提供可用、高效的服務(wù),公司必須實(shí)時監(jiān)測這些服務(wù)的KPI,及時發(fā)現(xiàn)KPI中的異常,為后續(xù)的故障診斷和修復(fù)贏得寶貴的時間,盡可能地減少故障帶來的損失。同時,那些持續(xù)時間較短的KPI 抖動也必須被準(zhǔn)確檢測出來,從而快速找出導(dǎo)致抖動的根本原因,消除小抖動累積成劇烈變化的隱患,避免發(fā)生更大的損失。
自動KPI 異常檢測指的是異常檢測算法根據(jù)歷史數(shù)據(jù)判斷實(shí)時數(shù)據(jù)的異常分?jǐn)?shù),并基于閾值判斷該異常分?jǐn)?shù)是否為異常[6]。異常檢測問題的關(guān)鍵在于正確地捕獲“正常數(shù)據(jù)的模式”,并通過觀測實(shí)時數(shù)據(jù)與正常數(shù)據(jù)之間的差異程度判斷KPI 是否發(fā)生了異常。如圖2所示,這些異常檢測算法一般包括以下兩個步驟:
(1)對于單個KPI 數(shù)據(jù)點(diǎn)或者一段連續(xù)KPI 數(shù)據(jù),使用異常檢測算法計(jì)算異常分?jǐn)?shù),該分?jǐn)?shù)表征其異常程度。
(2)當(dāng)異常分?jǐn)?shù)大于某個閾值時,將其標(biāo)注為異常。
自動KPI 異常檢測不僅提高了異常檢測的效率,而且減輕了運(yùn)維人員的工作量,對于保障大型互聯(lián)網(wǎng)服務(wù)的服務(wù)質(zhì)量具有重要意義。
圖2 異常檢測算法步驟Fig.2 Anomaly detection algorithm steps
本節(jié)簡要回顧了KPI 異常檢測的三個主要方向:基于統(tǒng)計(jì)概率的方法,基于有監(jiān)督機(jī)器學(xué)習(xí)的方法,基于無監(jiān)督機(jī)器學(xué)習(xí)的方法。
在過去的幾十年中,研究人員將許多傳統(tǒng)的統(tǒng)計(jì)概率方法用于KPI 異常檢測[5,7-24]。這些方法對KPI 進(jìn)行了一些簡單的假設(shè),因此運(yùn)維人員必須為每條KPI 選擇合適的算法,并為每個KPI 序列調(diào)整最優(yōu)參數(shù)。即便如此,這些異常檢測模型的性能普遍較差。例如,文獻(xiàn)[2]使用WoW(周-周)方法檢測搜索響應(yīng)時間中的異常,但KPI 的周期性可能不僅存在以周為單位的周期性,而且存在以天為單位的周期性、假期周期性等。此外,即使將這些統(tǒng)計(jì)概率方法進(jìn)行簡單集成,如多數(shù)表決[17]、歸一化[25]等,并不能取得好的異常檢測性能[5]。
為了自動組合上述異常檢測算法,一些研究如EDGAS[12]、Opprentice[5]等使用有監(jiān)督機(jī)器學(xué)習(xí)方法進(jìn)行異常檢測。這些方法的原理簡單明了:由于簡單組合統(tǒng)計(jì)概率方法是不夠的,因此可以使用歷史數(shù)據(jù)學(xué)習(xí)統(tǒng)計(jì)概率方法的最佳組合。這些方法首先使用統(tǒng)計(jì)概率方法計(jì)算特征,然后使用用戶反饋(通常是異常標(biāo)注)訓(xùn)練有監(jiān)督機(jī)器學(xué)習(xí)分類器(例如隨機(jī)森林)。這些監(jiān)督方法具有優(yōu)異的性能。例如,實(shí)驗(yàn)表明Opprentice 優(yōu)于所有傳統(tǒng)的統(tǒng)計(jì)概率方法。圖3展示了 Opprentice 利用有監(jiān)督機(jī)器學(xué)習(xí)進(jìn)行KPI異常檢測的主要思想:首先通過歷史數(shù)據(jù)產(chǎn)生訓(xùn)練集以訓(xùn)練分類模型,同時使用一系列基于統(tǒng)計(jì)概率的異常檢測方法檢測數(shù)據(jù)異常并得到各個方法計(jì)算的異常程度,然后將異常標(biāo)注和異常程度數(shù)據(jù)組成訓(xùn)練集。機(jī)器學(xué)習(xí)算法據(jù)此在特征空間中構(gòu)建分類模型。因此,這些分類模型可以檢測實(shí)時數(shù)據(jù)中的異常。例如,圖3中的“?”所標(biāo)示的數(shù)據(jù)會被判定為異常。
但是,有監(jiān)督機(jī)器學(xué)習(xí)算法過度依賴異常標(biāo)注,而獲得足夠多的異常標(biāo)注往往耗費(fèi)大量的人力物力資源。此外,由于這些方法集成了多種基于統(tǒng)計(jì)概率的算法,因此其訓(xùn)練和檢測開銷很大。所以,這些方法難以應(yīng)用于大規(guī)模互聯(lián)網(wǎng)服務(wù)。
基于無監(jiān)督機(jī)器學(xué)習(xí)的異常檢測方法(不局限于KPI 異常檢測),如one-class SVM[14,16],GMM[19],VAE[6,25-26]和 VRNN[14]等,使用機(jī)器學(xué)習(xí)方法學(xué)習(xí)數(shù)據(jù)的正常模式,并判定未遵循正常模式的點(diǎn)為異常。這些方法可以分為兩種類型:基于無監(jiān)督分類器的算法和基于深度生成模
型的算法。基于無監(jiān)督分類器的算法或者直接把KPI 數(shù)據(jù)以滑動窗口形式輸入到無監(jiān)督分類器中(outlier detector),或者通過傳統(tǒng)的統(tǒng)計(jì)概率方法提取KPI 數(shù)據(jù)的特征,然后將特征輸入到無監(jiān)督分類器進(jìn)行分類。常用的無監(jiān)督分類器有one-class SVM[14,16], isolation forest[30]等。由于深度生成模型能夠更加充分地捕獲KPI 數(shù)據(jù)的復(fù)雜特征,因此基于深度生成模型的KPI 異常檢測方法具有更高的準(zhǔn)確性。所以,本文重點(diǎn)介紹三種基于深度生成模型的無監(jiān)督KPI 異常檢測模型——Donut[6]、Bagel[27]和Buzz[28]。
圖3 Opprentice 設(shè)計(jì)框架Fig.3 The Framework of Opprentice
深度生成模型指的是使用深度學(xué)習(xí)技術(shù)的生成模型,它通常包括多個神經(jīng)網(wǎng)絡(luò)。例如,在生成對抗網(wǎng)絡(luò)(GAN[31])中有兩個子網(wǎng)絡(luò):生成網(wǎng)絡(luò)和分類網(wǎng)絡(luò)。相反,對于深度貝葉斯網(wǎng)絡(luò)(Deep Bayesian network)和深度馬爾科夫隨機(jī)場(Deep Markov random field)等深度概率模型[32],單一的神經(jīng)網(wǎng)絡(luò)即可導(dǎo)出隨機(jī)變量之間的概率分布并構(gòu)建整個概率模型。
Donut 是第一個將深度生成模型應(yīng)用于KPI 異常檢測的無監(jiān)督模型。它是在 VAE[29](Variational Auto-encoder)的基礎(chǔ)上實(shí)現(xiàn)的。Donut 在 VAE 基礎(chǔ)上提出了M-ELBO、MCMC 迭代和缺失值填零等創(chuàng)新點(diǎn),在周期性 KPI 上具有優(yōu)異的性能。由于Donut將時間序列視為滑動窗口,不處理時間信息,所以當(dāng)異常檢測依賴時間信息時 Donut 的性能欠佳。為了解決這一問題,學(xué)者們提出了另一個無監(jiān)督深度生成模型——Bagel 以彌補(bǔ) Donut 在時間信息處理上的缺陷。Bagel 同樣也是針對周期性 KPI 的無監(jiān)督異常檢測方法。它使用了 CVAE[33-34](Conditional Variational Auto-Encoder)作為基礎(chǔ)模型,引入了時間信息,因此在部分依賴時間信息的KPI 異常檢測上取得了比 Donut 更好的性能。為了檢測非周期性機(jī)器 KPI 中的異常,學(xué)者們提出了第三種基于深度生成模型的 KPI 異常檢測方法——Buzz。Buzz 基于分區(qū)的思想,將 WGAN[35]和VAE 進(jìn)行了結(jié)合。它通過生成對抗訓(xùn)練優(yōu)化了一個變種 VAE 的似然證據(jù)下界。
Donut 是首個采用 VAE 進(jìn)行 KPI 異常檢測的模型,可以處理周期性服務(wù)KPI。VAE 是最簡單的深度貝葉斯網(wǎng)絡(luò)之一,主要刻畫了觀測變量(observed variable)和隱變量(latent variable)之間的關(guān)系,其網(wǎng)絡(luò)結(jié)構(gòu)如圖4所示。
為了在 VAE 中處理 KPI 時序數(shù)據(jù),Donut 采用滑動窗口[2(1]sliding window)對 KPI 序列進(jìn)行預(yù)處理:對于每一個時刻 t,子序列被當(dāng)做該時刻數(shù)據(jù)的向量。
圖4 Donut 的網(wǎng)絡(luò)結(jié)構(gòu)Fig.4 The network structure of Donut
隱變量z被指定了一個先驗(yàn)分布(prior,通常是多維高斯分布N(0,1))。在z的基礎(chǔ)上,x被假設(shè)為服從概率分布;這一概率分布是通過一個神經(jīng)網(wǎng)絡(luò)(其可學(xué)習(xí)參數(shù)為)導(dǎo)出的,網(wǎng)絡(luò)的具體形式和實(shí)際任務(wù)相關(guān)。的后驗(yàn)分布沒有解析解,但是在訓(xùn)練和測試中都是必須的,因此變分推理方法在模型中被采用:使用另一個獨(dú)立的神經(jīng)網(wǎng)絡(luò),擬合這個潛在的后驗(yàn)概率,這個近似的后驗(yàn)概率被記作。一般來說,可以被假設(shè)為服從高斯分布,其中和分別表示分布的期望和方差,通過得到。
當(dāng)然,由于 VAE 模型結(jié)構(gòu)的因素,每個維的W 滑動窗口會產(chǎn)生所有 W 個重建概率,但每個窗口只取最后一個時刻的重建概率,其他時刻的重建概率均被忽略。
Donut 論文中所研究的 KPI 數(shù)據(jù)是等時間間隔的監(jiān)控?cái)?shù)據(jù)。在真實(shí)的場景中,會不可避免地在采集或存儲的過程中丟失部分?jǐn)?shù)據(jù)——這種點(diǎn)稱為“缺失點(diǎn)”。由于滑動窗口要求在每個時刻t 得到一個定長的窗口,即缺失點(diǎn)必須被填補(bǔ)一個數(shù)值以構(gòu)成完整的窗口。Donut 在缺失點(diǎn)處填補(bǔ)了0,而非通過一些現(xiàn)有的算法[16]填補(bǔ)這些缺失點(diǎn),這是因?yàn)?VAE本身就是一個生成模型,它自身就能產(chǎn)生數(shù)據(jù)、填補(bǔ)空缺。使用任何比 VAE 更弱的算法來填補(bǔ)缺失點(diǎn)會降低 VAE 模型的性能。
上文已經(jīng)提到過,數(shù)據(jù)中的異常點(diǎn)和缺失點(diǎn)會影響后續(xù)點(diǎn)的檢測。事實(shí)上,這些異常點(diǎn)和缺失點(diǎn)也會影響模型的訓(xùn)練,畢竟 VAE 需要學(xué)習(xí)正常的數(shù)據(jù)模式,異常點(diǎn)和缺失點(diǎn)的存在會讓 VAE 學(xué)習(xí)到錯誤的模式。Donut 分別提出了不同的方法來降低這些點(diǎn)在訓(xùn)練和測試時影響。
Donut 主要有三個創(chuàng)新點(diǎn),即 M-ELBO(Modified ELBO),缺失值注入,蒙特卡洛馬爾可夫鏈填補(bǔ)(Monte Carlo Markov Chain Missing Data Imputation,下稱為 MCMC 填補(bǔ)),其整體過程如圖5 所示。
在訓(xùn)練的時候 Donut 并沒有把帶有異常點(diǎn)和確實(shí)點(diǎn)的窗口完全拋棄,在樸素VAE 基礎(chǔ)上,Donut 修改了 VAE 的 ELBO(Evidence Lower Bound Objective,證據(jù)下界):
圖5 Donut 設(shè)計(jì)框架Fig.5 The design architecture of Donut
在Donut 的實(shí)驗(yàn)中,M-ELBO 是其優(yōu)于樸素VAE模型的重要因素。原理大致如下:在訓(xùn)練時包含帶有異常點(diǎn)和缺失點(diǎn)的數(shù)據(jù),并且使用 M-ELBO,會迫使VAE 在含有部分異常的情況下,也能識別出隸屬的正常模式是什么,并且在未發(fā)生異常的時刻還原出正常模式的數(shù)據(jù)。因此,M-ELBO 這一技術(shù)能加強(qiáng)VAE 處理異常和缺失數(shù)據(jù)的能力。然而訓(xùn)練數(shù)據(jù)中只有不到 1% 的異常和缺失點(diǎn);而當(dāng)標(biāo)注不存在、完全無監(jiān)督訓(xùn)練時,異常點(diǎn)更是不可知的。為了能使 M-ELBO 起更大作用,Donut 在訓(xùn)練時人工地添加了缺失點(diǎn):在每一遍(epoch)使用訓(xùn)練數(shù)據(jù)之前,Donut 都隨機(jī)地填充1%的正常數(shù)據(jù)為0,并標(biāo)記為“缺失”。注意在深度學(xué)習(xí)中,訓(xùn)練數(shù)據(jù)通常會使用很多遍(Donut 的所有實(shí)驗(yàn)中都使用了250 遍訓(xùn)練數(shù)據(jù)),而 Donut 在每一遍隨機(jī)填充的缺失點(diǎn)都是不一樣的。產(chǎn)生缺失數(shù)據(jù)可以被看做一種特殊的數(shù)據(jù)增廣(Data Augmentation),這種手段在深度學(xué)習(xí)中被廣泛用于訓(xùn)練、提升模型效果[37]。事實(shí)上,如果能進(jìn)一步地在訓(xùn)練集中隨機(jī)產(chǎn)生異常數(shù)據(jù),理論上會取得更好的訓(xùn)練效果。然而產(chǎn)生合適異常數(shù)據(jù)是一件比較困難的任務(wù),因此 Donut 中并沒有做出這方面的嘗試。在測試時,為了進(jìn)一步地減少缺失點(diǎn)帶來的影響,Donut 使用了 MCMC 填補(bǔ)技術(shù)[38]。這是一種利用已經(jīng)訓(xùn)練好的深度貝葉斯模型進(jìn)行數(shù)據(jù)填補(bǔ)的技術(shù),即輸入經(jīng)過模型多次重建(論文設(shè)置為十次),將最終的重建樣本作為異常檢測的輸入。該方法的目的是填補(bǔ)輸入中的缺失值,方法充分利用 VAE 模型對數(shù)據(jù)的擬合能力,而非訴諸于弱于VAE 算法的其他模型(如[36])。如圖6所示,滑動窗口被分解為,其中為非缺失點(diǎn),是缺失點(diǎn),輸入經(jīng)過模型重建后從轉(zhuǎn)為,即重建樣本,將作為下一次 MCMC迭代的輸入,或作為迭代結(jié)束后異常檢測時的輸入。
Bagel 沿用了Donut 的三個創(chuàng)新點(diǎn)——M-ELBO、缺失值注入、MCMC 填補(bǔ)。但是,Bagel 不再使用變分編碼器(VAE)作為模型的基礎(chǔ),而是使用條件變分編碼器(CVAE)。CVAE 的原理與VAE 類似,同屬于深度貝葉斯網(wǎng)絡(luò)。CVAE 主要刻畫了觀測變量x與額外信息y和隱變量z之間的關(guān)系。隱變量同樣被指定了一個先驗(yàn)分布(prior,通常是多維單位高斯分布N(0,1)。在z的基礎(chǔ)上,x被假設(shè)為服從概率分布為可學(xué)習(xí)參數(shù),可通過訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)導(dǎo)出。在CVAE 中,的后驗(yàn)分布通過使用另一個獨(dú)立的神經(jīng)網(wǎng)絡(luò)來擬合,擬合得到的近似后驗(yàn)概率被記作下面的式子為 Bagel 的變分下界:
圖6 MCMC 填補(bǔ)技術(shù)Fig.6 MCMC Imputation
Bagel 同Donut 一樣適用于處理周期性KPI,不同之處在于Bagel 在滑動窗口上額外添加了時間信息,對于Donut 可以處理的KPI 數(shù)據(jù),Bagel 有同等的處理能力,對于更依賴時間信息的KPI 異常檢測,Bagel 具有比Donut 更強(qiáng)的處理能力。Bagel 整體結(jié)構(gòu)如圖7 所示。Bagel 的整體結(jié)構(gòu)與Donut 相似,但Bagel 比Donut 多了一個Dropout 層,其原因是由于時間信息的one-hot 編碼比KPI 要簡單的多。具體而言,如果同時處理時間信息與KPI 數(shù)據(jù)會出現(xiàn)過擬合現(xiàn)象,所以為了防止時間信息的過擬合,Bagel 添加了Dropout 層,對額外信息y 做了Dropout 處理。
在Bagel 中,在滑動窗口添加時間信息的onehot 編碼,選取的時間信息為星期,小時和分鐘,如表1所示。模型不考慮年份、月份等信息是因?yàn)橹芷谛訩PI 曲線的周期跨度通常小于一個月,考慮年月等信息意義不大。時間的one-hot 編碼即將數(shù)字轉(zhuǎn)位二進(jìn)制形式,由于星期數(shù)最多為7,小時數(shù)最多為24,分鐘數(shù)最多可為59,所以星期數(shù)選取7 位表示。例如,用one-hot 編碼表示星期二,則七位的第二位設(shè)置為1,其余為0,小時數(shù)選取24 位表示,分鐘數(shù)選取60 位表示。
圖7 Bagel 模型整體結(jié)構(gòu)Fig.7 Overall structure of Bagel
表1 Bagel 時間信息編碼示例Table 1 An example of time information coding of Bagel
Donut 和Bagel 針對的是周期性服務(wù)KPI 的異常檢測問題,但它們對非周期性機(jī)器KPI 的表現(xiàn)欠佳。這是因?yàn)閂AE 難以捕獲非周期性機(jī)器KPI 表現(xiàn)出來的非高斯的噪聲和復(fù)雜的數(shù)據(jù)分布。如圖8所示,非周期性機(jī)器KPI 數(shù)據(jù)頻繁抖動,同時在長時間范圍內(nèi)具有一定的趨勢性。具體而言,不同的非周期性機(jī)器KPI 數(shù)據(jù)有不同的局部模式和全局模式。Buzz 專注于非周期性機(jī)器KPI 的異常檢測問題。
圖8 非周期性機(jī)器KPI 示例Fig.8 An example of non-seasonal machine KPI
Buzz 模型分為三個網(wǎng)絡(luò),分別是變分網(wǎng)絡(luò)、生成網(wǎng)絡(luò)和判別網(wǎng)絡(luò),如圖9所示。變分網(wǎng)絡(luò)和生成網(wǎng)絡(luò)分別負(fù)責(zé)編碼和解壓重建,判別網(wǎng)絡(luò)負(fù)責(zé)判斷數(shù)據(jù)為生成數(shù)據(jù)還是原始數(shù)據(jù),以此促進(jìn)變分網(wǎng)絡(luò)和生成網(wǎng)絡(luò)的優(yōu)化。如圖所示,對于變分網(wǎng)絡(luò),模型先將窗口重塑為二維,然后進(jìn)入卷積層,通過線性變化和SoftPlus 得到和,進(jìn)而得到變分網(wǎng)絡(luò)的表示。對于生成網(wǎng)絡(luò),可以理解為變分網(wǎng)絡(luò)的逆過程,隱藏變量z 先進(jìn)入全連接層,再經(jīng)過反卷積,然后重塑為1 維,再重塑為W 維,得到重建變量y。判別網(wǎng)絡(luò)同樣使用反卷積層來接收重塑為二維的滑動窗口,隨后數(shù)據(jù)進(jìn)入全連接層得到判別結(jié)果。如圖10所示,Buzz 的主要流程和Donut 類似,不同之處主要在于Buzz 的訓(xùn)練方式。Buzz 沿用了Donut 的創(chuàng)新點(diǎn):MCMC 處理和缺失值填0。
圖9 Buzz 的網(wǎng)絡(luò)結(jié)構(gòu)Fig.9 The network structure of Buzz
Buzz 有幾個核心思想:(1)為了對復(fù)雜KPI進(jìn)行建模使用了分區(qū)劃分的思想。Buzz 將數(shù)據(jù)空間劃分為數(shù)個子空間(分區(qū)),然后在每個子空間內(nèi)計(jì)算某個距離指標(biāo)。(2)當(dāng)計(jì)算距離指標(biāo)時,Buzz使用Wasserstein 距離來度量生成分布和數(shù)據(jù)分布之間的距離(之后稱作分布距離)。(3)Buzz 提出了訓(xùn)練目標(biāo)的原始形式和對偶形式,并將Buzz 模型轉(zhuǎn)化為貝葉斯網(wǎng)絡(luò)。Buzz 實(shí)際上通過生成對抗訓(xùn)練優(yōu)化了一個變種VAE 的似然證據(jù)下界。(4)Buzz將VAE 作為一個生成模型來生成樣本,并使用另一個神經(jīng)網(wǎng)絡(luò)作為判別器來區(qū)分生成樣本和真實(shí)樣本。(5)為了保證生成對抗訓(xùn)練的穩(wěn)定性,Buzz 使用了梯度懲罰方法,它是一種對WGAN(Wasserstein Generative Adversarial Network Wasserstein 生成對抗網(wǎng)絡(luò)[35])的改進(jìn)策略。(6)異常檢測通過貝葉斯推導(dǎo)來實(shí)現(xiàn)。
Wasserstein 距離能夠準(zhǔn)確地在WGAN 中度量概率分布之間的距離。此外,Buzz 將數(shù)據(jù)空間劃分為很多個小區(qū)域,然后在每個小區(qū)域上計(jì)算分布距離。每個小區(qū)域上的分布距離通過對抗訓(xùn)練方法獲得,最后把每個小區(qū)域上計(jì)算得到的值進(jìn)行平均以得到整體距離。分區(qū)扮演了連接WGAN 損失函數(shù)和VAE 的橋梁。
由表2可以發(fā)現(xiàn),三個方法都需要大量的訓(xùn)練數(shù)據(jù)。由于三個方法都是無監(jiān)督學(xué)習(xí)模型,因此它們都不需要異常標(biāo)注。Buzz 可以處理Donut 和Bagel無法處理的非周期性機(jī)器KPI。但是,它需要更高的訓(xùn)練開銷。Bagel 的優(yōu)勢在于添加了時間信息,對部分依賴時間信息的異常具有更好的性能。
圖10 Buzz 設(shè)計(jì)框架Fig.10 The architecture of Buzz
表2 三個模型優(yōu)缺點(diǎn)比較Table 2 Comparison of advantages and disadvantages of the three models
2018年筆者籌辦了首屆AIOps 挑戰(zhàn)賽[40],并收集了來自百度、搜狗、騰訊和Ebay 的KPI 數(shù)據(jù)。運(yùn)維人員已經(jīng)仔細(xì)地標(biāo)注了該數(shù)據(jù)集中的每一個KPI序列。因此,本文使用該數(shù)據(jù)集測試Donut、Bagel和Buzz 的性能。表3列出了數(shù)據(jù)集的詳細(xì)信息。
表3 數(shù)據(jù)集詳細(xì)信息Table 3 The detailed information of the dataset
所有算法都會為每個KPI 數(shù)據(jù)點(diǎn)計(jì)算一個異常分?jǐn)?shù)。可以選擇一個閾值來進(jìn)行決策:如果某個數(shù)據(jù)點(diǎn)的分?jǐn)?shù)大于閾值,則將其判斷為異常。這樣,異常檢測問題就轉(zhuǎn)換為分類問題,并且可以計(jì)算每個閾值的精度和召回率,進(jìn)而計(jì)算F-Score——精度和召回率的協(xié)調(diào)平均值。本文進(jìn)一步枚舉所有閾值對應(yīng)的F-Score,并計(jì)算每種算法的最佳F-Score。
在KPI 異常檢測問題中,KPI 序列中的異常往往是連續(xù)的異常片段。運(yùn)維人員通常只關(guān)心異常片段開始的時間[11]。因此,如果異常檢測算法在異常開始后以足夠快的速度(即在最大允許延遲之前)做出判斷,則認(rèn)為其成功檢測到整個異常片段。警報延遲是該異常片段中第一個異常點(diǎn)與第一個檢測點(diǎn)之間的時間差。如果異常檢測算法未在最大允許延遲之前發(fā)出任何警報,則即使異常檢測算法能夠檢測出異常,本文也認(rèn)為算法未能成功檢測出異常片段。
圖11 展示了警報延遲為一分鐘(一格)的異常檢測結(jié)果。第一行是人工確認(rèn)后的異常標(biāo)注,第二行是算法得到的異常分?jǐn)?shù),第三行顯示了閾值為0.5時的異常檢測結(jié)果,第四行是根據(jù)警報延遲修正后的異常檢測結(jié)果。對于第一個KPI 異常片段,異常檢測算法在最長延遲警報內(nèi)發(fā)現(xiàn)了異常(加粗斜體部分),則本文認(rèn)為算法成功檢測了整個異常片段。對于第二個KPI 異常片段,雖然異常檢測算法在該片段最后兩分鐘檢測到了異常,但是由于該檢測結(jié)果超過了警報延遲,所以本文認(rèn)為異常檢測算法未能成功檢測到該異常片段。
KPI 異常檢測通過設(shè)定閾值來評估KPI 曲線上每個點(diǎn)的異常分?jǐn)?shù),即問題可以轉(zhuǎn)化為二分類問題,分為異常和正常兩類。對于該類問題,比較常用的評價指標(biāo)有精度(Precision)、召回率(Recall)以及精度與召回率的調(diào)和平均(F1Score)。計(jì)算公式如下:
其中,true positive (TP)表示成功檢測出的異常點(diǎn)的數(shù)量,false positive (FP)表示正常點(diǎn)被模型判斷為異常點(diǎn)的數(shù)量,false negative (FN)表示異常點(diǎn)被模型判斷為正常點(diǎn)的數(shù)量。Donut 論文提出了Best-Fscore,即設(shè)定多個閾值,比較每個閾值對應(yīng)的F1Score,然后選取最高的 F1Score 作為模型在該曲線上的F1Score。Bagel 和Buzz 沿用了這種評估方式。
圖11 修正后的異常檢測結(jié)果Fig.11 The modified anomaly detection results
本文使用10-fold 方法分別測試Donut、Bagel和Buzz 的準(zhǔn)確性。三個方法在整個數(shù)據(jù)集的最佳precision、recall 和F-score 如表4所示。可以看出,捕獲了時間信息的Bagel 取得了比Donut 更好的準(zhǔn)確性。這是因?yàn)锽agel 在滑動窗口添加了時間信息的one-hot 編碼。此外,雖然Buzz 能夠檢測非周期性機(jī)器KPI 中的異常,但是它在周期性服務(wù)KPI 中的表現(xiàn)欠佳,導(dǎo)致其整體的F-Score 低于Donut 和Bagel。
表4 三個方法準(zhǔn)確性比較Table 4 Comparison of result of the three methods
在處理非周期性機(jī)器KPI 時,Buzz 能夠取得比Donut 和Bagel 有更好的準(zhǔn)確性。例如,圖12 展示了Donut、Bagel 和Buzz 在一個非周期性機(jī)器KPI上的precision recall curve (PRC)。在PRC 曲線中,越靠近右上角,表示性能越好。可以看出,Buzz 具有最好的準(zhǔn)確性。這是因?yàn)椋簽榱藢?fù)雜KPI 進(jìn)行建模,Buzz 使用了分區(qū)劃分的思想。它將數(shù)據(jù)空間劃分為數(shù)個子空間(分區(qū)),然后在每個子空間內(nèi)計(jì)算某個距離指標(biāo)。
圖12 三種算法在一個非周期性機(jī)器KPI 上的PRC 曲線Fig.12 The PRC of the three methods on a non-seasonal machine KPI
當(dāng)前,學(xué)者們已經(jīng)提出了一系列基于深度生成模型的無監(jiān)督KPI 異常檢測框架。其中,Donut、Bagel 和Buzz 是三個典型的方法。Donut 作為最早提出的面向KPI 異常檢測的深度生成模型,采用基于VAE 的無監(jiān)督學(xué)習(xí)架構(gòu),在周期性服務(wù)KPI 上表現(xiàn)優(yōu)異。Bagel 使用CVAE 替換Donut 中的VAE,將時間信息編碼進(jìn)模型,對于時間敏感的KPI 具有更好的異常檢測性能。由于非周期性機(jī)器KPI 通常表現(xiàn)出非高斯噪聲和復(fù)雜數(shù)據(jù)分布,因此Buzz 有效結(jié)合了WGAN 和分區(qū)思想,提高了非周期性機(jī)器KPI的異常檢測準(zhǔn)確性。
利益沖突聲明
所有作者聲明不存在利益沖突關(guān)系。