王 博,華慶一,南亞會,句建國
(1.西北大學(xué) 信息科學(xué)與技術(shù)學(xué)院,陜西 西安 710127;2.西安郵電大學(xué) 計算機(jī)學(xué)院,陜西 西安 710121;3.西安郵電大學(xué) 陜西省網(wǎng)絡(luò)數(shù)據(jù)智能處理重點實驗室,陜西 西安 710121)
當(dāng)前,隨著個人計算[1]向社會計算[2]的發(fā)展及工業(yè)物聯(lián)網(wǎng)的興起,海量的服務(wù)賦之云端。通過網(wǎng)絡(luò),云計算[3]可以隨時隨地、便捷地按需使用可配置的計算資源共享池,如服務(wù)器、存儲、應(yīng)用軟件和服務(wù)等模式。云計算的本質(zhì)就是一切皆服務(wù)[4](X as a Service,XaaS),XaaS強(qiáng)調(diào)下游對上游按照契約提供服務(wù),隱藏實現(xiàn)細(xì)節(jié)。隨著軟件技術(shù)的不斷發(fā)展,軟件體系結(jié)構(gòu)[5]從單體結(jié)構(gòu)、垂直結(jié)構(gòu)、面向服務(wù)的架構(gòu)(Service-Oriented Architecture,SOA )到微服務(wù)架構(gòu)[6-7],逐漸趨向于動態(tài)、離散和分布,如服務(wù)的離散化和集中化或微服務(wù)的分散化等。
近年來,人工智能(Artificial Intelligence,AI)技術(shù)取得了很大的進(jìn)展,面向互聯(lián)網(wǎng)技術(shù)(Internet Technology,IT)運營的人工智能[8-10]( Artificial Intelligence for IT Operations,AIOps)在復(fù)雜軟件系統(tǒng)的運維分析中發(fā)揮著巨大的作用,而在復(fù)雜軟件的智能運維中,根因分析[11-13](Root Cause Analysis,RCA)智能化運維提供了精確的數(shù)據(jù)基礎(chǔ)和故障定位依據(jù)。
根因分析的場景大致抽象為搜索定位、指標(biāo)關(guān)聯(lián)、調(diào)用異常和組合分析等幾大方向。在搜索定位方面,Hotspot[14]構(gòu)建了多維時間序列指標(biāo)的數(shù)據(jù)立方體,利用蒙特卡羅樹搜索(Monte Carlo Tree Search,MCTS)方法對根元素集進(jìn)行定位,是該多維指標(biāo)體系中精確高效的異常定位方法。iDice方法[15]解決了關(guān)于快速識別發(fā)行問題報告中問題產(chǎn)生數(shù)量的突然變化的問題。在指標(biāo)關(guān)聯(lián)方面,Automap模型[16]使用多維時間序列度量動態(tài)生成服務(wù)關(guān)聯(lián)并診斷根源,根據(jù)時間序列之間的異常關(guān)聯(lián)推斷出異常行為,并生成描述不同服務(wù)之間相關(guān)性的圖。MicroCause框架[17]可以準(zhǔn)確地定位導(dǎo)致微服務(wù)故障的根本原因的監(jiān)控指標(biāo)。在調(diào)用異常方面,Liu等[18]采用無監(jiān)督異常檢測系統(tǒng),通過重構(gòu)呼叫軌跡表示,并通過設(shè)計具有后向流的深層貝葉斯網(wǎng)絡(luò),以統(tǒng)一的方式準(zhǔn)確可靠地檢測軌跡異常。Cheng等[19]提出了一個基于網(wǎng)絡(luò)的擴(kuò)散框架識別和排序顯著的因果異常。Brandón等[20]提出了一個基于系統(tǒng)架構(gòu)的圖形表示的根因分析框架。在組合分析方面,Liu等[21]提出了一個可廣泛部署的框架FluxRank,其可以自動準(zhǔn)確地定位根本原因主機(jī),從而觸發(fā)某些操作減輕服務(wù)故障。Hiranya[22]提出了一種面向根的可擴(kuò)展體系結(jié)構(gòu),實現(xiàn)了系統(tǒng)的原型實現(xiàn)和性能異常檢測與診斷的統(tǒng)計方法。Wang等[23]利用eBay的生產(chǎn)數(shù)據(jù)進(jìn)行部署和評估,幫助運維人員將識別根本原因的時間從幾小時減少到幾分鐘。然而,根因分析依賴于異常檢測[24-26],上述方法均未解決在復(fù)雜微服務(wù)系統(tǒng)中的根據(jù)多元日志數(shù)據(jù)的定位根服務(wù)異常問題。
針對根因分析中的搜索定位,以往基于時間序列的異常檢測方法主要采用參數(shù)估計,如高斯模型、回歸模型和混合參數(shù)模型[27]。這些模型都需要事先假設(shè)數(shù)據(jù)的分布,而假設(shè)的分布往往與實際分布不同,數(shù)據(jù)的先驗分布難以用現(xiàn)有的函數(shù)來描述,會與準(zhǔn)確的結(jié)果有一定的偏差。并且,眾多異常檢測方法均基于二分類,只能給出異常的結(jié)果,不能給出異常的根本原因。文獻(xiàn)[28-29]通過極端學(xué)生化偏差(Extreme Studentized Deviate,ESD)方法測量了異常程度,并分析了異常的根本原因,但僅解決了簡單的單維數(shù)據(jù),無法對復(fù)雜的非結(jié)構(gòu)化高維數(shù)據(jù)進(jìn)行異常檢測。因此,針對ESD算法無法處理多元數(shù)據(jù)的問題,擬提出一種復(fù)雜微服務(wù)系統(tǒng)異常行為分析與定位(Multivariate Seasonal Hybrid ESD,M.S-H-ESD)算法。該算法先對多元微服務(wù)日志的數(shù)據(jù)進(jìn)行清洗和標(biāo)準(zhǔn)化處理,獲取每一維數(shù)據(jù)特征的貢獻(xiàn)權(quán)值,然后加權(quán)求和歸一為一元數(shù)據(jù),采用多元周期混合ESD(Seasonal Hybrid ESD,S-H-ESD)算法度量一元數(shù)據(jù)的異常度,進(jìn)而獲得異常度最高的服務(wù),通過設(shè)置置信度和異常上限,定位微服務(wù)系統(tǒng)異常的根因服務(wù)。
基于多元微服務(wù)日志的根因服務(wù)異常分析方法主要包含多元數(shù)據(jù)處理、模型訓(xùn)練和異常評分、模型評估以及故障修復(fù)等4個部分,具體過程示意圖如圖1所示。
圖1 服務(wù)異常行為分析與定位過程示意圖
1)多元數(shù)據(jù)處理?;谖⒎?wù)系統(tǒng)的半結(jié)構(gòu)化日志,通過正則表達(dá)式或自動抽取工具[34]抽取相關(guān)的重要信息,將半結(jié)構(gòu)化的日志信息轉(zhuǎn)變?yōu)榻Y(jié)構(gòu)化的數(shù)據(jù)。對結(jié)構(gòu)化數(shù)據(jù)清洗和標(biāo)準(zhǔn)化后,提取多元數(shù)據(jù)的特征值和特征根,求出每一維度數(shù)據(jù)的貢獻(xiàn)度,對多元數(shù)據(jù)進(jìn)行加權(quán)歸一處理。
2)模型訓(xùn)練和異常評分。對獲取的服務(wù)數(shù)據(jù)按調(diào)用方式分組,對每組服務(wù)使用M.S-H-ESD算法計算每個服務(wù)為其他服務(wù)調(diào)用的服務(wù)評分。根據(jù)設(shè)置的閾值得到根服務(wù)的異常和定位結(jié)果,其中異常得分的上限越高,得到的異常根因服務(wù)越緊致,反之得到的異常根因服務(wù)越松弛。最后,按照得分結(jié)果進(jìn)行排序,最有可能發(fā)生異常的根因服務(wù)就在其中,排序愈靠前,發(fā)生異常的可能性越大。
3)模型評價。常用的評價指標(biāo)有準(zhǔn)確率、查全率和F1值。準(zhǔn)確性是最常見的評價指標(biāo),精確度越高,分類器越好,在對非均衡分布數(shù)據(jù)集的召回率和F1值的應(yīng)用中,其是更客觀地反映分類器在評價方面的指標(biāo)。
4)故障修復(fù)。根據(jù)根因服務(wù)的異常分析結(jié)果進(jìn)行故障修復(fù),故障修復(fù)包括人工修復(fù)或系統(tǒng)自愈。
對多元微服務(wù)日志數(shù)據(jù)某一實體屬性的研究涉及p個指標(biāo),分別用x1,x2,…,xp表示,則p個指標(biāo)組成的p維隨機(jī)向量x=(x1,x2,…,xp)T。 設(shè)隨機(jī)向量x的均值為μ,協(xié)方差矩陣為Ψ。x的線性變換可以形成一個新的合成變量y,即新的合成變量y可以用原變量線性表示為
(1)
式中,ui=(ui1,ui2…,uip)T是一個線性變換向量,i=1,2…,p。
步驟1讀取輸入,并對輸入數(shù)據(jù)采用minmax方法標(biāo)準(zhǔn)化,將初步處理后的數(shù)據(jù)記為D。
步驟2利用主成分分析[30](Principal Components Analysis,PCA)模型得到D的協(xié)方差矩陣Ψ的特征向量X、特征值θ和方差貢獻(xiàn)率υ。
步驟3計算成分得分系數(shù)矩陣K。K由得分系數(shù)矩陣分量Kij組成,其計算表達(dá)式為
(2)
式中:Xij為第i個特征向量的第j個分量;θi為對應(yīng)的特征值;i,j∈[1,2,…,h],h為屬性的個數(shù)。
步驟4計算D中每個屬性的權(quán)重。根據(jù)得分系數(shù)矩陣K,第i個特征分量權(quán)重為
(3)
步驟5返回每一條記錄的加權(quán)歸一化數(shù)據(jù),即一元數(shù)據(jù)為
(4)
當(dāng)m≤h時,取得的特征值θ從大到小排序后前m個分量滿足特征提取要求。
步驟6根據(jù)原始數(shù)據(jù)調(diào)用服務(wù)和被調(diào)服務(wù)對一元數(shù)據(jù)Fi進(jìn)行分組。
在現(xiàn)實世界的數(shù)據(jù)集中,離群點往往是多個而不是單個的。為了對多離群點檢測,需要逐步刪除數(shù)據(jù)集中偏離均值最大值或最小值。設(shè)數(shù)據(jù)集中沒有異常值為原假設(shè),記為H0,數(shù)據(jù)集中有一個異常值為備擇假設(shè),記為H1。同步更新相應(yīng)的t分布臨界值檢驗H0是否成立。利用ESD算法獲取一元數(shù)據(jù)的異常點,具體步驟如下。
步驟1計算均值的數(shù)據(jù)序列應(yīng)先刪除上一輪最大殘差樣本數(shù)據(jù),均值偏離最遠(yuǎn)殘差的表達(dá)式為
(5)
步驟2計算臨界值
(6)
式中:n為數(shù)據(jù)集的樣本數(shù);α為置信度。
步驟3對比均值偏離最遠(yuǎn)殘差與臨界值大小,若Ri>λj,則原假設(shè)H0不成立,該樣本點為異常點。
步驟4重復(fù)以上步驟k次至算法結(jié)束。
ESD算法在處理原始數(shù)據(jù)的時候,并未考慮微服務(wù)日志數(shù)據(jù)本身具有時間序列的特征,為了更好地提取特征,在原有一元數(shù)據(jù)的基礎(chǔ)上,對數(shù)據(jù)進(jìn)行去周期和趨勢。
基于Loess的周期趨勢分解(Seasonal-Trend Decomposition Procedure based on Loess,STL)將時間序列數(shù)據(jù)分解為趨勢分量、周期分量和余項分量。將ESD算法運用于STL分解后的余項分量中,即可得到時間序列上的異常點,但在余項分量中存在著部分假異常點。為了解決這種假陽性降低準(zhǔn)確率的問題,采用中位數(shù)(median)替換趨勢分量。設(shè)原時間序列數(shù)據(jù)為T,STL分解后的周期分量ST,則殘差余項分量的計算表達(dá)式為
(7)
M=median(|Ti-median(T)|)
(8)
將式(8)代入式(7),得到去周期和趨勢后的數(shù)據(jù)為
QT=T-ST-M
(9)
對數(shù)據(jù)進(jìn)行去周期和趨勢后,采用S-H-ESD算法進(jìn)行異常服務(wù)分析和定位。使用S-H-ESD算法先為所有分組的調(diào)用服務(wù)和被調(diào)用服務(wù)獲取異常得分矩陣S,然后通過異常得分矩陣S加權(quán)獲得到每個服務(wù)i的異常度得分Gi。
設(shè)某調(diào)用服務(wù)i發(fā)生的異常數(shù)為a,被調(diào)用服務(wù)發(fā)生的異常數(shù)為b,調(diào)用服務(wù)異常得分為
式中:Si.為所有調(diào)用服務(wù)為i的異常得分;S.i為所有被調(diào)服務(wù)為i的異常得分。
由調(diào)用服務(wù)異常得分Li得到調(diào)用服務(wù)加權(quán)異常得分的表達(dá)式為
式中:?≥1為調(diào)用服務(wù)賦以較大權(quán)重。
對微服務(wù)的異常度得分Gi進(jìn)行排序,從而獲取不同參數(shù)下的根因異常服務(wù)。
M.S-H-ESD算法具體步驟如下。
步驟1讀取結(jié)構(gòu)化日志數(shù)據(jù)。
步驟2利用式(4)對讀取數(shù)據(jù)進(jìn)行加權(quán)并歸一化得到一元數(shù)據(jù)。
步驟3根據(jù)調(diào)用服務(wù)和被調(diào)服務(wù)對一元數(shù)據(jù)進(jìn)行分組提取。
步驟4將每條數(shù)據(jù)利用式(5)和式(6)分別計算均值偏離最遠(yuǎn)殘差Rj和臨界值λj。若Rj>λj,則H0原假設(shè)不為真,采樣點為異常點。調(diào)整置信度α和異常得分的上限u,會得到不同服務(wù)下異常得分的值。記錄該所有采樣點,即分組的調(diào)用服務(wù)和被調(diào)服務(wù)的異常得分矩陣S。
步驟5根據(jù)調(diào)用服務(wù)和被調(diào)用服務(wù)矩陣的異常得分S,加權(quán)得到每個服務(wù)的異常度得分Gi。
步驟6對微服務(wù)的異常度得分G進(jìn)行排序,即為獲取根本原因異常服務(wù),且異常可能性順序遞減。
仿真實驗采用的環(huán)境為64核Intel Xeon platinum 8260 MCPU、40 G內(nèi)存、Python3.7、Ubuntu18.04 、Cuda 10.2 和Pytorch 1.6.0。
為了驗證M.S-H-ESD方法的有效性,選取上證指數(shù)周期性明顯的某股票2019—2022年的股票交易數(shù)據(jù)作為實驗數(shù)據(jù),并對異常數(shù)據(jù)進(jìn)行標(biāo)記。
在模擬實驗中,分別采用K-means、PCA-Q[31-32]統(tǒng)計方法和M.S-H-ESD方法對異常進(jìn)行檢測,并對檢測結(jié)果的準(zhǔn)確性、召回率和F1等指標(biāo)進(jìn)行評估對比,結(jié)果如圖2所示。
圖2 不同算法異常檢測評估結(jié)果
從實驗結(jié)果可以看出,M.S-H-ESD方法對于多變量周期數(shù)據(jù)的異常檢測結(jié)果優(yōu)于其他異常檢測算法,并在召回率和F1評估上有較大優(yōu)勢,分別高出30%和16%。這是因為,對于時間序列數(shù)據(jù),M.S-H-ESD算法考慮了初始階段的周期和趨勢,在提取特征時,首先去除了周期和趨勢,凸顯了數(shù)據(jù)特征。
2.3.1 數(shù)據(jù)說明
在復(fù)雜微服務(wù)系統(tǒng)中,涉及到不同時間序列的服務(wù)日志數(shù)據(jù),每一個系統(tǒng)的日志數(shù)據(jù)都需要分別提取。提取日志數(shù)據(jù)并將其構(gòu)造為多元數(shù)據(jù),主要包括OSB(Oracle Service Bus)、CSF(Common Service Framework)和JDBC(Java Database Connectivity)等調(diào)用類型、開始時刻、持續(xù)時間、調(diào)用服務(wù)、被調(diào)服務(wù)以及CPU占用率、內(nèi)存占用率和頁面緩存等關(guān)鍵性能指標(biāo)(Key Performance Indicator,KPI)。部分?jǐn)?shù)據(jù)的格式和內(nèi)容如表1所示。
表1 微服務(wù)系統(tǒng)中的部分結(jié)構(gòu)化日志數(shù)據(jù)
2.3.2 微服務(wù)根因異常定位仿真結(jié)果
微服務(wù)調(diào)用的數(shù)據(jù)不能直接用于根服務(wù)異常定位。復(fù)雜微服務(wù)系統(tǒng)的調(diào)用結(jié)構(gòu)如圖3所示?;谡{(diào)用服務(wù)和被調(diào)服務(wù)分組數(shù)據(jù),使用M.S-H-ESD算法獲得每個組服務(wù)異常得分值,為分組服務(wù)對異常調(diào)用得分進(jìn)行排序,選擇前5%作為微服務(wù)根因異常的選擇對象。
圖3 復(fù)雜微服務(wù)系統(tǒng)的調(diào)用結(jié)構(gòu)
利用M.S-H-ESD算法對多元數(shù)據(jù)處理后,根因異常服務(wù)在不同參數(shù)的評分結(jié)果如表2所示。α和u值越小,需要定位的根因異常服務(wù)就越少,反之亦然。因此,根據(jù)情況,可以更準(zhǔn)確地將較小的參數(shù)分配給問題服務(wù)。調(diào)整異常的置信度α和異常得分的上限u,會得到不同服務(wù)下異常得分的值。不同配置參數(shù)下根本原因異常得分的折線圖如圖4所示。從圖4中可以看出,異常的置信度α和異常得分的上限u并沒有改變異常根因服務(wù)評估結(jié)果的趨勢。
表2 多元數(shù)據(jù)處理后的根因異常服務(wù)在不同參數(shù)的評分結(jié)果
圖4 不同參數(shù)下微服務(wù)異常評分結(jié)果折線圖
表2反映了異常根因服務(wù)得分和定位結(jié)果,其中異常得分的上限u越高,得到的異常根因服務(wù)越緊致,反之,得到的異常根因服務(wù)越松弛。按照得分結(jié)果進(jìn)行排序,最有可能發(fā)生異常的根因服務(wù)就在其中,排序愈靠前,發(fā)生異常的可能性越大。通過對服務(wù)異常的評分排序,可以得到復(fù)雜微服務(wù)系統(tǒng)的根因異常分析結(jié)果,如表3所示。
表3 根因異常分析的結(jié)果
對云平臺的微服務(wù)運維數(shù)據(jù)進(jìn)行提取,利用M.S-H-ESD算法對多元運維數(shù)據(jù)和測試數(shù)據(jù)的異常進(jìn)行得分,得到了微服務(wù)系統(tǒng)異常根因服務(wù)。實驗結(jié)果表明,M.S-H-ESD算法對時間序列多維數(shù)據(jù)的異常行為檢測具有較高的精確度、召回率和F1值,能夠準(zhǔn)確定位微服務(wù)系統(tǒng)中的異常服務(wù)。