連 超,李 華,2,劉 亞,韓家茂,阮宏瑋
1(內蒙古大學 計算機學院,呼和浩特 010021)2(內蒙古大學 圖書與信息技術部,呼和浩特 010021)
在日漸成熟的虛擬化等互聯網技術的推動下,云數據中心已經成為個人應用或企業級服務將數據處理過程從個人計算機或服務器遷移的必然選擇,越來越多的業務系統部署在云上,以實現資源的動態可擴展和綜合運維.由于云環境下復雜的資源共享模式和云用戶迥然不同的業務形態,云數據中心往往面臨隨時可能發生的異常所導致的服務不穩定、不安全等問題.為了保證云服務以及部署在云平臺上的業務應用的可靠性,服務提供商對于各層面資源往往采取有力的監控,實時獲取大量關鍵性能指標(Key Performance Indicator,KPI)數據.通過對高維時序KPI進行有效綜合分析,發現異常,從而達到故障規避,及時止損的目的.
Fabian Huch在文獻[1]中將“對正常運行產生或可能產生負面影響的系統的任何非預期狀態”定義為異常.而異常檢測就是要識別出運維數據中偏離大部分數據或者與數據集中其他大部分數據不服從相同統計分布的小部分異常數據.云環境下,KPI異常檢測旨在通過算法分析時序采集數據間的關聯性規則,從而自動發現KPI時間序列數據中的異常波動,為后續根因定位、故障預測等提供決策分析.
在實際運維場景中,異常點數據非常稀少,正負樣本極度不平衡,少數異常類別樣本的直接檢測會導致模型將所有樣本識別為正常樣本,達不到異常檢測的目的;由于云環境下的數據監控層面廣、監控時間長,導致監控數據實例數量龐大而且種類繁多,這就給數據處理帶來了維度災難問題.現有的一些算法在處理高維空間數據時,計算成本消耗過大,結果卻不盡如人意.因此,采用特征提取進行降維是處理高維數據的主要手段.關于建模方法,考慮到真實運維場景下的時效性問題,采用支持流式數據處理模式和復雜度較小的輕量級建模方法才能實現實時在線異常檢測;同時,模型應能夠適用于處理規模較大的運維數據集;所建立的異常檢測模型框架還需具有普適性,能夠應用到類似的異常檢測場景下.
針對現有的大多數單方面指標的異常檢測方法不能全方位實時監測數據異常的弊端,本文提出了一種云環境下業務系統KPI異常檢測模型,該模型使用匿名企業軟件系統真實運維數據集(覆蓋應用系統各個層面KPI)進行模型訓練,以適用真實運維環境.
本文的其余部分組織如下:第二節介紹相關工作;第三節介紹了本文提出的異常檢測模型的架構;第四節描述了相關算法的原理;第五節介紹了實驗以及對模型的評估;第六節總結了本文,并介紹了今后的工作.
目前異常檢測領域已有一些研究成果,同時深度置信網絡(Deep Belief Network,DBN)也已經用于異常檢測領域,既可以類似于一個自編碼機用于無監督學習,進行高維數據的特征提取;也可以用于監督學習,作為分類器使用[2].文獻[3]提出一種基于DBN和線性單分類支持向量機(One-Class Support Vector Machine,OCSVM)相結合的高維數據異常檢測模型,底層的DBN由兩個受限玻爾茲曼機(Restricted Boltzmann Machine,RBM)堆疊而成,在OCSVM中,使用無監督算法基于超球面的支持向量描述法進行異常檢測.文獻[4-6]同樣利用支持向量機(Support Vector Machine,SVM)做異常檢測分類器,SVM在對少數類樣本數據進行異常檢測時,效果很好,但是由于其算法的復雜性,不適合處理數量龐大的運維數據.文獻[7]提出了一種基于合成少數類過采樣技術(Synthetic Minority Oversampling Technique,SMOTE)和DBN相結合的入侵檢測方法,選擇的分類器是softmax,以適應多分類問題.但DBN結構參數是人工隨機設定,所以該網絡結構不一定是最優,同時SMOTE算法也不適用于解決大規模數據集的樣本均衡問題.文獻[8]提出了 DBN-KELM 入侵檢測算法,采用核極限學習機進行分類的最大特點就是學習速率快、泛化性能好,但是最優核函數的選擇比較困難.文獻[9]提出了一個OpenStack拓撲異常檢測框架,其中包括三個功能組件:圖形生成器、統計監視器和異常檢測器,圖形生成器創建進程之間的關系圖,統計監視器收集統計數據并計算與典型統計行為的差異程度,異常檢測器接收圖表和差異程度,并識別異常進程.文獻[10]提出了一種使用DBN和概率神經網絡(Probabilistic neural network,PNN)的入侵檢測方法,用PNN做分類器,學習速度快,且不易陷入局部最優.文獻[11]同樣使用softmax作為DBN的分類器,用于在線實時入侵檢測,但其所用數據集樣本數量較少,不能體現真實運維數據數量龐大的特點.
上述文獻提到的異常檢測模型,多數沒有同時考慮實際情況下正負樣本不平衡、數據維度高以及數據量龐大的問題,不能滿足處理真實運維數據的要求.因此,本文提出了基于DBN-LR集成學習的異常檢測模型,該模型有效解決了云環境下真實運維數據的KPI異常檢測問題.
針對實際運維數據的特點,本文提出的異常檢測模型主要考慮三方面內容:
1)用以解決正負樣本不平衡的數據預處理算法:考慮到運維數據集規模較大、鄰近時間窗口內數據點具有相似性的概率很大以及正常樣本數量遠高于異常樣本數量的特點,可以認定在正常樣本中存在大量無用重復特征.因此,正常樣本欠采樣的方法更適合進行樣本平衡.又因為異常類樣本一旦出現必定是連續時間段內都為異常,所以類似于文獻[12]提出的距離少數類樣本平均距離最近的多數類樣本采樣方法不再適用;而數據清洗技術[13,14]無法控制欠采樣的數量,某種程度上都是使用K-鄰近法,由于大部分正常類樣本附近也都是正常類,因而剔除的正常類樣本有限.EasyEnsemble[15]思想是將多數類樣本隨機劃分成N個子集,每個子集的數量等于少數類樣本的數量,然后將每個子集與少數類樣本結合起來分別訓練一個模型,從而放大少數類樣本數量,以達到欠采樣的目的,最后再將N個模型集成.雖然每個子集的樣本少于總體樣本,但集成后總信息量并不減少,故本文選用此方法解決KPI數據集中正負樣本不平衡的問題.
2)用于特征提取的數據降維算法:高維數據分析中面臨的首要難題是“維度災難”的問題[16].隨著數據維度的增高,數據的分布會變的越來越稀疏、數據的組織效果急速下降,從而所需的樣本數會呈指數級增長.經典的數據降維算法主成分分析(primary component analysis,PCA)[17,18]和線性判別分析(Linear Discriminant Analysis,LDA)[19]等均屬于線性降維算法,不能抽象數據維度間的非線性關系.而DBN通過訓練網絡結構中的神經元間的權重使得整個神經網絡依據最大概率生成訓練數據,形成高層抽象特征,從而提升模型的分類性能.DBN最大的特點就是利用其自身非線性的結構進行特征提取,將數據從高維空間映射至低維,這種非線性降維方法可以在最大程度上保留原始數據的特征,并且相比于其他深度算法,學習用時較少;其次,由于深度網絡是分層訓練的,故可以按照需求選擇分類器進行單獨訓練.因此本文選擇DBN進行特征提取.
3)用于異常檢測的分類算法:由于可用數據樣本數量龐大,所以在分類器的選擇上,相對于分類性能,本文更關注于分類速度和易用性.基于伯努利分布建模的邏輯回歸(Logistic Regression,LR)分類算法速度較快,簡單易用,并且容易吸收新數據更新模型,而當邏輯回歸單獨處理高維度數據時,又很難獲得問題的全局最優解[20],因此本文選擇LR作為DBN的輸出層對樣本數據進行分類.
綜上,本文提出的基于DBN-LR集成學習的異常檢測模型如圖1所示.首先通過采樣的方式根據數據比例將正常數據劃分多份,分別與異常數據結合訓練多個弱分類器,然后運用多數投票集成方法將多個弱分類器集成為一個強分類器.訓練步驟如下:
1)樣本均衡化.歸一化以后的數據通過EasyEnsemble基于無放回隨機采樣的方式從正常類樣本中生成N個子集分別與異常類樣本結合進行多個子模型訓練.
2)訓練DBN進行特征提取.通過多個RBM堆疊形成DBN網絡,進行數據的特征提取.采樣后得到的新數據逐層通過RBM,分別經一步對比散度RBM學習完成預訓練,獲得RBM網絡預訓練參數,再由輸出層的分類器模型反向傳播誤差對模型參數進行微調,訓練獲取高維數據的較優低維表示.

圖1 基于DBN-LR集成學習的異常檢測模型Fig.1 Anomaly detection model based on DBN-LR integrated learning
3)通過邏輯回歸進行二分類.將邏輯回歸LR作為DBN的輸出層,通過多個RBM得到的低維數據,已經能較好的表示原始數據,再由邏輯回歸算法進行樣本分類識別異常.
4)多數投票集成弱分類器.經各個數據子集訓練得到的弱分類器對測試集預測的結果作為最終的類標,進行多數投票表決,判斷樣本是否異常.
本文主要是根據EasyEnsemble思想集成多個深度置信網絡和Logistic回歸相結合的模型進行運維數據的異常檢測.本章簡介建模相關算法.
EasyEnsemble思想是從數據集多數類中進行隨機采樣生成多個多數類子集,分別與少數類結合訓練分類器,生成的多個弱分類器最終結合成一個強分類器,這種方法用到了集成學習的思想.可以將每個弱分類器看成是基于不同訓練子集中得到的特征的線性分類器,集成的分類器看成是不同特征的組合.
DBN是由多層RBM堆疊而成.RBM通過無監督訓練優化特征提取能力,根據能量模型中能量最低原理求得一個最接近訓練樣本分布的聯合概率分布,構建出具有多隱層的非線性網絡結構,進而對變量之間的依賴關系進行編碼,更抽象地提取訓練集特征.
RBM[21,22],本質上是一種自編碼網絡,是一種基于能量的模型,在能量最小化時網絡模型達到理想狀態.其網絡結構由一層用于數據輸入輸出的可視層v∈{0,1}m和一層用于數據內在表達的隱藏層h∈{0,1}n構成的層內無連接、層級間全連接的結構,如圖2所示.
RBM學習的目標是讓RBM網絡表示的Gibbs分布最大程度的擬合輸入樣本,即求出合適的參數θ={W,a,b}來擬合給定的樣本數據,其中,W為可視層神經元到隱藏層神經元的權值連接矩陣,向量a和b分別為可視層和隱藏層神經元的乘性偏置.根據相對熵原理,參數是通過最大化RBM在訓練集上的對數似然函數學習中得到的.相對熵的計算公式如下:

圖2 RBM網絡結構Fig.2 Network structure of RBM

(1)
其中,N表示樣本空間,Q代表輸入樣本的分布,P是RBM網絡表示的Gibbs分布的邊緣分布.式中第一項則是輸入樣本的熵,第二項可用:

(2)
來估算,其中,l表示訓練樣本個數,最后要使KL最小,即需要最大化對數似然函數∑x∈NlnP(x).
在最大化對數似然函數的過程中,涉及歸一化因子的計算,需要遍歷可視層單元和隱藏層單元所有可能的組合狀態,因此很難獲取,只能通過采樣的方法求得一個近似值.Hinton在文獻[23]中提出一種基于對比散度(contrastive divergence,CD)的RBM學習方法,用訓練樣本去初始化可視層,通常進行一次采樣就能達到很好的擬合效果.基于一步對比散度的的RBM學習流程如圖3所示.
將若干個RBM串連起來則組成了一個DBN,其中,上一個RBM的隱層作為下一個RBM的顯層,上一個RBM的輸出作為下一個RBM的輸入.DBN和傳統神經網絡的訓練過程一致,首先充分訓練每一層RBM作為預訓練權值,然后輸出層將誤差反向傳播對網絡各層進行參數微調.
邏輯回歸常用于處理二分類問題,其實就是將分類問題數學化.它假設數據服從伯努利分布,通過極大化似然函數的方法,運用梯度下降來求解參數得出分類概率,通過閾值過濾來達到將數據二分類的目的.面對一個二分類問題,邏輯回歸的過程是先建立代價函數,然后通過優化方法迭代求解出最優的模型參數,最后驗證所求解模型的優劣.
邏輯回歸算法基于Sigmoid函數,函數形式為:
(3)
根據Sigmoid函數構造預測函數為:
(4)
其中x為樣本輸入,hθ(x)為模型輸出,即為某一分類的概率大小,而向量θ為分類模型要求的模型參數.由于最終任務是要實現二分類,這里假設分類任務為1和0兩類,那么結果為類別1和類別0的概率分別為:
1https://www.kaggle.com/anomalydetectionml/features
P(y=1|x,θ)=hθ(x)
(5)
P(y=0|x,θ)=1-hθ(x)
(6)
將式(5)和式(6)合并為一個式子:
P(y|x,θ)=hθ(x)y(1-hθ(x))1-y
(7)
其中,y的取值只能是0或者1.
不同于線性回歸使用模型誤差的的平方和定義損失函數,邏輯回歸不是連續的,只能通過對數似然函數取反進一步得到損失函數.似然函數的代數表達式為:
(8)
其中,m為樣本的個數.
似然函數對數化取反的表達式,即損失函數如下:
(9)
然后對損失函數極小化,即利用梯度下降法對式(9)求解獲得使誤差函數最小的θ,θ的更新公式為:
(10)
其中,α為梯度下降的學習率.

圖3 基于一步對比散度的RBM學習流程圖Fig.3 RBM learning flow chart based on one-step contrast divergence
5 實驗及分析
本文實驗環境是Windows 10 (64位)操作系統,硬件配置為Intel(R)Core(TM)i7-8700 CPU @3.20GHz,16G RBM以及237G固態硬盤,開發語言python3.5,開發框架Tensorflow 1.10.0.
本次實驗采用的數據集是某匿名企業真實運維數據1,樣本數量達到750萬條以上,且正負樣本比例極度不平衡,如圖4所示,異常樣本占比不到整個數據集的2%.該數據集中每一項數據共有231維數據特征和1維數據標簽,特征屬性包括CPU負載、內存和線程池的利用率以及到不同數據源的連接時間等.數據中的異常既包括對系統正常運行產生致命影響的資源瓶頸,也包括掛起負載在后臺對資源的持續消耗等.本次實驗按照原數據集比例,隨機采樣100萬條數據進行模型驗證.

圖4 樣本分布比例圖Fig.4 Graph of Sample distribution ratio
由于可用數據數量龐大,本次實驗按照7∶3的比例進行訓練集和測試集的劃分,并且測試集保留了原始數據樣本比例特點.
實驗前先對KPI樣本數據集進行歸一化處理,使用min-max標準化方法,對原始數據的每一個特征屬性作線性變換,將結果映射到[0,1]之間.公式如下:
(11)
其中x為原始數據屬性值,min為對應列特征的最小值,max為對應列特征的最大值,x*是歸一化以后的數據屬性值.
在對弱分類器的訓練過程中,DBN網絡的訓練參數以及微調迭代次數都會影響異常檢測的結果.本文經過多次重復試驗,在平衡耗費時間和分類效果的前提下,設置DBN的參數如表1所示.同時固定參數,驗證微調迭代次數對檢測結果的影響,損失函數和準確率隨迭代次數增加的變化曲線如圖5所示.
表1 實驗參數
Table 1 Experimental parameters

實驗參數參數值實驗參數參數值輸入層節點數231預訓練迭代次數5第一層隱藏層神經元個數170預訓練學習率0.001第二層隱藏層神經元個數50微調學習率0.01輸出層節點數10
由圖5可知,在第9次迭代后損失函數和準確率曲線趨于平穩,因此在所有子模型的訓練過程中微調迭代次數都設置為10.

圖5 loss-acc曲線圖Fig.5 Graph of loss-acc
根據EasyEsemble思想,本實驗采用無放回采樣方法對訓練集中正常樣本進行采樣.根據正負樣本比例,將正常樣本分為50個樣本子集,分別和異常樣本集合并成一個子訓練集,并且每個子訓練集中的正常樣本數量和異常樣本數量相等.把每個訓練子集輸入DBN-LR網絡進行學習.實驗結果見表2.
表2 弱分類器分類效果
Table 2 Classification effect of weak classifier

訓練集n評估指標 123…4950預訓練時間s20.1920.2620.47…20.4320.51微調時間s28.5428.6628.26…28.3728.67總時間s48.7348.9248.73…48.8849.18正常類識別率%96.8396.4096.77…96.6696.65異常類識別率%99.3199.3899.41…99.3899.46平均準確率%96.8896.4596.83…96.7196.70
由表2可知每個弱分類器對異常樣本的識別率都在99%以上,而對正常類的識別率和平均準確率都略低.在對弱分類器預測的結果和原測試集標簽進行比對中發現,每個弱分類器都存在將正常樣本預測為異常的情況.
由表2可知每個子模型對樣本預測準確的概率都在96%~97%之間,相差不大,故采用多數投票算法(Majority Vote Algorithm)即少數服從多數的方法進行投票表決來判斷一個樣本是否為異常.分別由每個子模型預測出測試集對應的標簽,然后統計每一條測試集數據的預測結果.對每一條數據預測為1的次數大于等于閾值n/2(其中n的范圍就是弱分類器的個數,由數據比例決定),則該條數據的最終預測結果為1,否則為0.結果表明,利用多數投票表決方法集成多個子模型以后,在保證模型異常識別率的基礎上,平均準確率相比單個弱分類器提高了一百分點以上,達到了98.35%,提高了整體泛化性.
為了驗證集成模型的有效性,本文采用受試者工作特征曲線(Receiver operating characteristic curve,簡稱ROC曲線)和AUC(Area Under Curve)值對集成以后的強分類器進行性能評估.AUC值即ROC曲線與橫軸和縱軸圍成的面積,AUC值越接近1,表明當前的分類算法越有可能分類正確,模型的穩健性越好.真正例率(True Positive Rate,TPR)和假正利率(False Positive Rate,FPR)兩個指標分別為ROC曲線的橫縱坐標.計算公式分別如下:
TPR=TP/(TP+FN)
(12)
FPR=FP/(FP+TN)
(13)
其中,TP(True Positive)為真正例;FP(False Positive)為假正例;TN(True Negative)為真負例;FN(False Negative)為假負例.
集成模型ROC曲線如圖6所示.
由圖6可知,集成模型的AUC值為0.9825,由此證明該模型的異常識別效果較好,且穩健性較強.
1)對比實驗1
本文集成多個DBN-LR弱分類器的目的是為了在樣本極度不平衡且維度較高的運維數據中檢測出異常,由于支持向量機(SVM)算法對少數類樣本數據的異常檢測效果好,且應用廣泛,所以本實驗使用SVM算法,在相同數據集上進行對比實驗,結果如表3所示.

圖6 集成模型ROC曲線圖Fig.6 ROC graph of integrated model

表3 與SVM對比實驗結果Table 3 Comparison of experimental result with SVM
由表3可知,兩種方法在預測平均準確率方面,SVM方法要略高于本文方法,但是在異常識別率方面,SVM方法遠遠低于本文方法,在分類器模型的訓練時間上,本文提出的異常檢測方法中,多個弱分類器模型的訓練總時間少于2500秒,而SVM的訓練時間在32000秒以上,因此在時效性方面,本文提出的異常檢測模型表現更好.綜合來看,本文方法更適合用于異常檢測.
2)對比實驗2
本文DBN模型由三個RBM堆疊而成,未必是最優結構,所以本次實驗在相同子數據集下,對比了不同DBN結構對弱分類器結果的影響,表4記錄了同一個子數據集在不同結構的DBN模型下,訓練得到的弱分類器的異常識別率、平均準確率以及訓練耗時.
表4 不同DBN結構對比實驗結果
Table 4 Comparison of experimental results of different DBN structures

RBM個數異常識別率平均準確率訓練耗時s399.38%96.71%48.88499.17%97.01%71.55599.08%97.37%78.326098.07%89.76
由表4可知,當RBM的個數為3~5時,弱分類器的異常識別率略微有所下降,而平均準確率略微有所提升,但是從耗時來看,4~5個RBM的結構下,耗時遠高于3個RBM結構所用的時間.所以,在3~5之間選擇RBM的個數構造DBN模型,結果不會產生太大浮動,而從時效性方面考慮,3個RBM結構還是可選的.當RBM的個數為6時,弱分類器準確率達到98.07%,但是異常識別率為0表明模型已經不識別異常,這也證明了當DBN隱藏層數和神經元個數達到一定峰值后,再增加并不會帶來識別性能的提升[24-26].
3)對比實驗3
由于本文提出的模型用到了集成學習的思想,目前比較常用的集成算法有Adaboost集成算法、Bagging集成算法,所以本次實驗在相同數據集上對比了Adaboost集成邏輯回歸以及Bagging集成邏輯回歸和本文模型進行了對比,結果如表5所示.
表5 集成學習對比實驗結果
Table 5 Integrated learning comparison experiment results

算法 平均準確率異常識別率本文方法98.35%99.23%Adaboost98.03%28.62%Bagging98.34%64.94%
由表5可知,在平均準確率方面,Adaboost方法和Bagging方法都和本文方法相差不大,但是在異常識別率方面,Adaboost方法和Bagging方法都遠遠低于本文方法,所以綜合來看,本文方法更適合于異常檢測.
本文提出了一種基于DBN-LR集成學習的異常檢測方法,有效解決了企業運維數據的KPI異常檢測問題,通過EasyEsemble集成學習的思想,對正負樣本不平衡數據進行樣本均衡化,解決了分類器傾向于將少數類異常樣本識別為正常數據的問題,同時將LR作為DBN網絡的輸出層,既達到了高效特征提取的目的,又實現了快速準確的異常識別,而且在處理百萬級運維數據時,耗時較少.
本文在進行數據處理時,沒有考慮數據的時序性關系,所以下一步工作將對運維數據進行時序異常檢測.