雲計算

應用運維智能化的關鍵技術——《應用智能運維實踐(試讀版)》

點擊免費下載《應用智能運維實踐(試讀版)》https://developer.aliyun.com/topic/download?id=1193

本章內容簡介

前面介紹了應用智能運維發展演進的歷史,回答了應用智能運維是什麼、為什麼、有什麼價值、能幹什麼的問題。為了指導企業實踐、落地,本章圍繞應用場景,從技術角度總結歸納了相比於傳統的監控運維技術,應用智能運維繫統特有的幾個關鍵技術特徵,以及介紹瞭如何用這些技術來解決實際應用運維問題。

智能運維的核心思想是利用算法來處理海量運維數據,積累運維經驗,從而代替人工思考判斷,以自動化的過程實現風險的預防、發現、定位和處理。在應用運維場景下實現智能化,判斷研究用哪些技術來解決實際問題,需要從具體應用場景出發,匹配現有可行的技術。圖4-1中總結了當前常見的應用智能運維場景,其中包括用於主動發現

image.png

圖4-1  常見的應用智能運維場景

潛在風險的應用運行期風險主動探傷、用戶數字體驗保障與優化、風險定位與根源問題分析,以及應用運行期負載趨勢預測與容量規劃等。圍繞這些場景,我們需要從當前可用的統計、機器學習、人工智能和自治控制技術堆棧中匹配相關的算法。總的來說,當前能夠匹配企業應用運維場景、可以用來解決實際運維問題的技術有面向海量實時指標數據的異常檢測、發現異常後的關聯及根源問題定位、風險處理方案決策支持及預防性維護的探傷檢測等。

4.1  異常檢測:篩選時間序列數據,發現潛在風險

4.1.1  技術簡介

隨著互聯網和大數據的發展,數據在現實生活中發揮著日益重要的作用。其中,大部分數據都是流式傳輸的時間序列數據(將同一統計指標的數值按其發生的時間先後順序排列而成的數列)。針對時間序列數據的數據挖掘已經應用於許多領域,其旨在找到一些頻繁出現的模式。當從這些模式中發現某種規律時,異常數據通常被作為噪聲而忽略。但是,在龐大的數據量背後,難免會存在異常數據,從數據的異常中往往能夠獲得更有價值和參考性的信息[1]。快速準確地檢測數據中的異常,既能及時減少損失,又方便在短時間內採取適當的應對策略。尤其是在企業應用中,如果能準確地發現系統中出現的異常,對於系統狀態的檢測及對系統錯誤的處理將起到積極的推動作用。特別是若能夠在異常發生的短時間內檢測且報告異常,然後根據以往的異常數據對異常進行分析,推斷異常出現的位置及原因,並給予初步的建議解決方案,則將對系統狀態穩定起到巨大的作用。

傳統的時間序列數據異常檢測方法通常聚焦在一維場景下,根據不同時間點數據樣本間的關聯來對異常進行判斷。這個方面的工作經過多年的發展已經相對成熟,其中較為簡單的方法包括自適應閾值法、聚類法和指數平滑法等。Smith等人利用三次指數平滑法實現異常檢測,利用歷史數據中的不同特徵來推測當前的數據值,這在商業領域十分有效[2];Stanway等人提出了針對流數據異常檢測的Skyline項目,其包含一組簡單的檢測器和一個投票方案,以輸出最終的異常評分,該項目在監測高流量網站的實時異常方面卓有成效[3];Bianco等人提出的ARIMA算法是一種針對具有季節性的時間序列數據建模的通用技術,它對於檢測有規律的數據效果較好,但無法動態地確定季節性數據中的異常[4]。另外,在一些特定領域,有許多基於模型的方法已經投入應用,但這些方法往往只針對它們建模的領域,如雲數據中心的溫度檢測[5]、飛機發動機測量中的異常檢測[6]和ATM欺詐檢測[7]等。雖然這些方法在特定的異常檢測系統中可能是成功的,但它們無法應用於通用領域。

循環神經網絡(Recurrent Neural Network,RNN)等神經網絡在時間序列數據異常檢測方面具有一定的優勢,是對於時間序列數據訓練最常見的算法模型之一。然而,由於梯度消失問題的存在,傳統的RNN在處理存在長期依賴問題的數據時會遇到巨大的困難[8]。近年來,長短期記憶網絡(Long Short Term Memory Network,LSTM)由於其在處理時間序列數據方面的優勢而受到廣泛關注,LSTM本身的特點使得其極適用於處理時間序列數據,同時LSTM克服了RNN無法處理長距離依賴的缺點,因此,許多學者提出了基於LSTM的異常檢測方法。Numenta公司提出了基於RNN的層級實時記憶HTM算法,並提出了公開數據集NAB,在NAB數據集上驗證了HTM算法的性能[9];Pankaj Malhotra等人利用基於LSTM的異常檢測方法在四個不同領域的數據集上取得了極好的效果[10];Sucheta Chauhan等人定義了5種不同的異常類型,並修改獲得了一種LSTM變體以對其進行區分[11]。類似的工作還有:Anvardh Nanduri 通過添加GRU來改造LSTM,從而實現了對飛機航班的異常檢測[12];Jihyun Kim等人實現了一種無監督的異常檢測方法,並在真實的工業數據集上進行了驗證[13]等。

近年來,隨著數據樣本量級與維度的迅速增長,多元時間序列數據異常檢測的需求日益增加。諸多機構與學者在多元時間序列數據異常檢測的研究方面取得了極大進展。Pavel Filonov等人利用將多元向量合成一元向量的方法處理多元數據,再用常規一元數據異常檢測方法進行檢測[14]。這種將多維數據轉化為一維數據再進行異常檢測的方法在維數不多的情況下可行,且通常要求不同維度數據之間具有一定的關聯性。類似的工作還有Han Bao等人通過多維特徵序列變換算法、增量特徵選擇算法以無損方式將時間序列數據轉換為特徵向量,再基於C-SVM的異常檢測方法進行異常檢測[15]。近年來,業內一些學者提出了一些具有創新性的方法,如Jones等人將8維數據擴展至32維,再結合一維異常檢測方法,根據不同維度之間關聯性的變化進行多維度的異常檢測[16]。該方法既適用於一維時間序列數據,也適用於多維時間序列數據,是一種極具創造性的方法。

4.1.2  深入淺出應用實踐

目前,異常檢測方法很多。人們對一元時間序列數據的異常檢測研究較多,對多元時間序列數據的異常檢測研究較少,並多采用降維方法來處理多元時間序列數據。下面介紹幾種常用的異常檢測方法。

1. 基於曲線擬合的檢測算法

對於時間序列數據來說,t時刻的數值對於t-1時刻的數值有很強的依賴性。例如,某個遊樂園的人在8:00這一時刻很多,在8:01時刻其人很多的概率是很大的;但如果其在7:01時刻的人較多,這對於其在8:01時刻人數的多少影響不是很大。

針對最近時間窗口內的數據遵循某種趨勢的現象,可以使用一條曲線對該趨勢進行擬合。如果新的數據打破了這種趨勢,使曲線變得不平滑,則該點就出現了異常。

曲線擬合的方法有很多,如迴歸、滑動平均等。本書用EWMA,即指數權重移動平均方法來擬合曲線。EWMA的遞推公式:

EWMA(1)=p(1)                                                                 (4-1)

EWMA(i)=αp(i)+(1-α)EWMA(i-1)                           (4-2)

其中,α是一個0~1的小數,稱為平滑因子。EWMA(1)有時也會取前若干值的平均值。α越小,EWMA(1)的取值越重要。從式(4-2)可知,下一點的平均值是由上一點的平均值加上當前點的實際值修正而來的。對於每個EWMA值,每個數據的權重是不一樣的,越近的數據擁有越大的權重。

有了平均值之後,就可以使用3-σ理論來判斷新的輸入是否超過了容忍範圍。根據實際的值是否超出了容忍範圍就可以知道是否可以告警:若超出了上界,可能是流量突然增加了;若低於下界,可能是流量突然降低了,這兩種情況都需要告警。可以使用Pandas庫中的ewma函數來實現上面的計算過程。

EWMA的優點如下。

(1)其可以檢測到在一個異常發生較短時間後發生的另一個(不太高的突變型)異常。

(2)因為它更多地參考了突變之前的點,所以它能更快地對異常做出反應。

(3)其非常敏感,歷史數據如果波動很小,那麼方差就很小,容忍的波動範圍也會非常小。

EWMA的缺點如下。

(1)其對漸進型(而非突發型)的異常檢測能力較弱。

(2)異常持續一段時間後可能被判定為正常。

(3)其業務曲線自身可能有規律性的陡增和陡降。

(4)其過於敏感,容易誤報,因為方差會隨著異常點的引入而變大,所以很難使用連續三點才告警這樣的策略。

考慮到這些缺點,需要引入週期性的檢測算法來針對性地處理具有週期性趨勢的曲線。

2. 基於同期數據的檢測算法

很多監控項都具有一定的週期性,其中以一天為週期的情況比較常見,如淘寶VIP流量在早晨4點最低,而在晚上11點最高。為了將監控項的週期性考慮進去,可以選取某個監控項過去14天的數據。對於某個時刻,將得到的14個點作為參考值,記為,其中

用靜態閾值方法來判斷輸入是否異常(突增和突減)。如果輸入比過去14天同一時刻的最小值乘以一個閾值還小,那麼就認為該輸入為異常點(突減);如果輸入比過去14天同一時刻的最大值乘以一個閾值還大,那麼也認為該輸入為異常點(突增)。

靜態閾值方法中的閾值是根據歷史經驗得出的值,實際中如何給出(最大閾值)和(最小閾值)是一個需要討論的問題。根據目前靜態閾值方法的經驗規則,取平均值是一個比較好的思路。

靜態閾值方法的優點如下。

(1)其反映了週期性。

(2)其可以確保發現大的故障,給出告警的一定是大問題。

靜態閾值方法的缺點如下。

(1)其依賴週期性的歷史數據,計算量大,而且無法對新接入的曲線告警。

(2)其非常不敏感,無法發現小波動。

3. 基於同期振幅的檢測算法

基於同期數據的檢測算法遇到如圖4-2所示的現象就無法檢測出異常。例如,今天是11月11日,過去14天淘寶VIP流量的歷史曲線必然會比今天的曲線低很多,如果11月11日這天出了一個小故障,曲線下跌了,但相對於過去14天的曲線仍然是高很多的,這樣的故障使用基於同期數據的檢測算法就檢測不出來,那麼將如何改進呢?直觀來看,兩個曲線雖然不一樣高,但“長得差不多”,那麼,怎麼利用這種“長得差不多”呢?此時就可以採用基於同期振幅的檢測算法。

image.png

圖4-2  淘寶VIP流量示意

怎麼計算t時刻的振幅呢?可以使用來表示振幅。例如,t時刻有900人在線,t-1時刻有1000人在線,那麼,可以計算出掉線人數是100。如果參考過去14天的數據,那麼可得到14個振幅值。使用14個振幅的絕對值作為標準,如果m時刻的振幅大於振幅閾值m時刻的振幅大於0,那麼認為該時刻發生了突增;如果m時刻的振幅大於m時刻的振幅小於0,那麼認為該時刻發生了突減。

            (4-3)

基於同期振幅的檢測算法的優點如下。

(1)振幅要比絕對值敏感。

(2)其利用了時間週期性,規避了業務曲線自身的週期性陡降。

基於同期振幅的檢測算法的缺點如下。

(1)其要求原曲線是平滑的。

(2)週期性陡降的時間點必須重合,否則會發生誤警。

(3)按百分比計算容易在低峰時期發生誤警。

(4)陡降不一定代表故障,由上層服務波動引起的衝高再回落的情況時有發生。

4. 基於環比數據的檢測算法

對於時間序列數據,可以利用最近時間窗口(T)內的數據遵循某種趨勢的現象來進行檢測。如將T設置為7,取檢測值()和過去7個點的值(記為i)進行比較,如果結果大於閾值,將count加1,若count超過了設置的,則認為該點是異常點。

                        (4-4)

式(4-4)涉及threshold(動態閾值)和兩個參數,可以根據需求進行設置,如果對異常比較敏感,可以將設置得小一些;如果對異常不敏感,可以將設置得大一些。業界關於threshold設置的方法有很多,下面介紹一種比較常用的閾值設置方法:通常閾值設置方法會參考過去一段時間內的均值、最大值及最小值,取過去一段時間(如窗口T)的平均值(avg)、最大值(max)及最小值(min),然後取max-avg和avg-min的最小值作為閾值[見式(4-5)]。之所以取最小值,是要讓篩選條件設置得寬鬆一些,讓更多的值通過此條件,從而減少漏報。

              (4-5)

5. 基於Ensemble的檢測算法

iForest算法是南京大學的周志華於2010年設計的一種異常檢測算法,該算法利用數據構建iTree,進而構建iForest,是一種無監督的檢測算法,具有很好的效果,具體可參見http://www.cnblogs.com/fengfenggirl/p/iForest.html

iForest是由iTree構建而成的。iTree是一種隨機二叉樹,其每個節點要麼有兩個子節點,要麼為葉子節點。對於給定的數據集D,數據集中的所有的特徵都是連續變量,iTree的構造如下。

(1)在數據集D中隨機選擇一個特徵A

(2)隨機選擇特徵A的一個可能取值v

(3)根據特徵A及值v將數據集D分為兩個子集,將特徵A的值小於v的樣本歸入左子節點,餘下部分歸入右子節點。

(4)遞歸構造左、右子樹,直至滿足以下的終止條件:

①傳入的數據集只有一條記錄或多條相同的記錄;

②樹的高度達到了限定高度。

iTree建好以後,就可以對數據進行預測了,預測的過程就是將測試記錄在iTree上走一遍。iTree能有效地檢測異常點是基於異常點都很稀有這一假設的,異常點應該在iTree中很快被劃分到葉子節點,因此,可以利用檢測點被分入的葉子節點到根的路徑長度h(x)來判斷檢測點x是否為異常點。

在構建好iTree後,就可以構建iForest。在構造iForest中的每棵樹時,並不是要將所有的數據都用上,而是隨機採樣,抽取一部分構造iTree,並儘量保證每棵樹都不相同。事實上,如果iTree在構造時運用了很多數據點,反而不能得到很好的效果,這主要是因為數據點會有重疊。因為由iTree變成了iForest,所以S(x,n)的計算公式也要改變,將h(x)變為E[h(x)],它就是檢測點x在每棵樹上的平均高度。iForest算法在Python中有現成的包可以調用。

利用iForest算法進行判斷時,如果檢測點的孤立森林分數為正數,那麼,檢測點為正常點;否則,檢測點為異常點。

6. 基於神經網絡的檢測算法

人工神經網絡(Artificial Neural Networks,ANN)是20世紀40年代後出現的。它是由眾多的神經元可調的連接權值連接而成的,具有大規模並行處理、分佈式信息存儲、良好的自組織和自學習能力等特點。BP(Back Propagation)算法又稱為誤差反向傳播算法,是人工神經網絡中的一種監督式的學習算法。BP算法在理論上可以逼近任意函數,其基本的結構由非線性變化單元組成,具有很強的非線性映射能力,而且其網絡的中間層數、各層的處理單元數及網絡的學習係數等參數可根據具體情況設定,靈活性很大,在優化、信號處理與模式識別、智能控制、故障診斷等許多領域都有廣闊的應用前景。

當前用於異常檢測的基於神經網絡的檢測算法有很多,其中比較常見的是卷積神經網絡(CNN)算法、循環神經網絡(RNN)算法、深度神經網絡(DNN)算法等,下面介紹一種稱為長短期記憶網絡(LSTM)的算法。

LSTM是一種改進後的RNN,可以解決RNN無法處理長距離依賴的問題,目前比較流行。其思路:原始RNN的隱藏層只有一個狀態,即h,它對於短期的輸入非常敏感,現在再增加一個狀態,即c,讓它來保存長期的狀態,稱它為單元狀態(Cell State),如圖4-3所示。

image.png

圖4-3  從RNN到LSTM

把圖4-3按照時間維度展開,如圖4-4所示,在t時刻,LSTM的輸入有三個:當前時刻網絡的輸入值、上一時刻LSTM的輸出值,以及上一時刻的單元狀態。LSTM的輸出有兩個:當前時刻LSTM的輸出值和當前時刻的單元狀態

為了控制單元狀態c,LSTM使用了三個“門”作為開關,如圖4-5所示。

image.png

圖4-4  LSTM示意

image.png

圖4-5  LSTM的“門”開關

遺忘門(Forget Gate):負責控制繼續保存單元狀態c,它決定了上一時刻的單元狀態有多少保留到當前時刻的單元狀態

輸入門(Input Gate):負責控制把即時狀態輸入到單元狀態c,它決定了當前時刻網絡的輸入有多少保存到單元狀態。

輸出門(Output Gate):負責控制是否把單元狀態c作為當前的LSTM的輸出,它決定了單元狀態有多少輸出到LSTM的當前輸出值

遺忘門的計算如式(4-6)所示。

                                     (4-6)

其中,是遺忘門的權重矩陣;表示把兩個向量連接成一個更長的向量;是遺忘門的偏置項;是sigmoid函數。

輸入門和一個tanh函數配合控制該加入哪些新信息。tanh函數產生一個新的候選向量,輸入門為中的每項產生一個0~1的值,用於控制新信息被加入的多少。至此,已經有了遺忘門的輸出(用來控制上一單元被遺忘的程度)和輸入門的輸出(用來控制新信息被加入的多少),此時就可以更新本記憶單元的單元狀態了:

                                                

輸出門用來控制當前的單元狀態有多少被過濾掉。先將單元狀態激活,輸出門為其中每項產生一個0~1的值,用來控制單元狀態被過濾的程度。

                               

上面描述的LSTM是一個標準版本,並不是所有LSTM都和上面描述的一模一樣。事實上,每個人所使用的LSTM都有一些細微的不同,有人專門比較總結過LSTM的各種變體,並比較了其效果,結果顯示,這些變體在多數公開數據集上的表現差異不大。[17]

上面介紹了六種檢測算法,每種算法都有其優缺點,都有能檢測和不能檢測的範圍。在應用時,應根據實際情況來選擇具體的算法,也可以使用多種算法進行綜合檢測,更多的檢測算法可以參考開源項目Skyline中的算法庫。

4.1.3  應用案例

異常檢測的應用場景極為廣泛,其中針對時間序列數據的異常檢測在工業、金融、軍事、醫療、保險、關鍵系統安全、機器人、多智能體、網絡安全和物聯網等多個領域具有極其重要的地位與意義[18]。斯坦福大學的Melvin Gauci等人將1000個智能體組成系統,通過模擬實驗證明不加限制的單個短時異常會在群體內快速傳播,最終導致系統的崩潰[19],從而說明異常檢測效果是諸多場景安全交互的核心。鑑於異常檢測在實際應用中的重要意義,開發性能更優、速度更快、檢測更精準的異常檢測算法急迫且意義重大。

1. 面向大數據應用的異常檢測

隨著計算機和互聯網信息技術的迅猛發展與普及應用,各行各業的數據均呈現爆炸式增長,巨大的數據資源被很多國家和企業視為戰略資源,大數據己經成為目前互聯網領域的研究熱點之一,這也標誌著全球已經進入大數據時代[20]

數據挖掘是從海量異構的數據中挖掘出未知的、潛在的信息和知識的過程。數據規模大、數據多樣性是大數據的基本特點。海量複雜的數據中可能存在一些數據對象,這些數據對象與普通數據的期望行為模式並不一致,被稱為異常值或離群點。隨著數據規模和數據多樣性的不斷增加,數據中異常值(或離群點)的個數也會不斷增加,合理有效地處理和應用這些異常值對大數據挖掘具有重要的意義[21]。針對大數據中異常值的識別和挖掘稱為異常檢測。雖然數據中的異常值是不尋常的,但如果考慮的數據量多達數十億,則可能性為“千分之一”的異常值也可能是百萬量級,在大數據挖掘過程中,這些異常值是不能忽視的。因此,異常值檢測在大數據挖掘中有著至關重要的作用[22]

2. 面向車聯網應用的異常檢測

近年來,隨著信息化時代的到來及社會經濟的高速發展,人們對交通的需求日漸增長,致使車輛運輸效率不斷下降,能源消耗持續高漲,運輸環境日益惡化,交通擁堵越發嚴重,交通事故愈發頻繁,這些成為我國許多城市的普遍性問題。因此,智能交通系統(Intelligent Traffic System,ITS)應社會對交通發展的需求而產生。車聯網(Internet of Vehicles,IoV)作為物聯網(Internet of Things,IoT)在智能交通系統中的一個主要組成部分,其發展對於智能交通系統的發展具有推動作用。車聯網將目前的新一代信息技術,如移動互聯網、人工智能、物聯網等相互融合,給傳統汽車生產商帶來了全新的變革,智能化和網絡化已成為全球汽車與交通領域發展的主流趨勢。預計2020年,全球將有超過500億個智能設備接入物聯網中,其中很大一部分便是車聯網設備。車輛傳感器的聯網率將由現在的10%增加到90%,中國將有超過35%的汽車實現網絡互聯[23]

然而,由於車聯網的特殊性,即開放的無線傳輸介質、車輛節點的高速移動性、網絡拓撲結構的頻繁變化、易受環境影響及人為的信息干擾,使得傳感器或傳輸線路可能出現故障,從而引起數據被篡改、失真或丟失。如果一個突發交通事故的數據在傳送過程中混入了其他虛假雜亂的數據,那麼可能會造成交通堵塞,更有甚者會威脅司機的生命安全。此外,異常數據的存在會影響數據分析的完整性和準確性[24]。2016年,騰訊科恩實驗室通過車輛之間的無線連接和蜂窩連接漏洞兩次成功破解了特斯拉MODEL S,其向汽車網絡中發送惡意軟件並將破解程序滲透到CAN總線,從而獲得了剎車系統的遠程操控權。這些遠程控制車輛的案例說明外設人員篡改車輛數據成為可能,進而導致車聯網中數據的安全性和可靠性受到嚴重的威脅。

因此,對車聯網實時數據的異常檢測及恢復迫在眉睫,它可以有效地提高數據質量,確保交通分析模型的準確性和智能交通系統的實用性,進而有效協助司機做出適當的駕車行為,合理調度交通資源,實時監測車輛故障並在必要時發出警告,避免發生交通事故,對交通安全、環境保護及人員健康都有著極其重要的作用和意義。

3. 面向工業應用的異常檢測

近幾年,傳統工業控制系統和互聯網、雲平臺逐漸連接起來,構成了工業互聯網平臺。工業互聯網平臺將現場設備、生產物料、網絡系統連接成一個整體的系統,實現了工業數據的動態採集和實時分析,用智能控制替代了原來的人為操作,提高了工廠生產效率,是工業生產佈局的新方向。工業互聯網平臺集海量數據採集和分析於一體,能夠精準高效地對數據進行實時處理,推進了製造業發展的新徵程[25]

工業互聯網在給工業控制系統帶來便捷操作的同時,也引入了一系列的安全問題,各種入侵、攻擊手段層出不窮,建設滿足工業需求的安全體系是保障工業互聯網平臺正常運行的前提。各種網絡入侵技術的發展已對工業互聯網平臺造成了嚴重的威脅,工業控制系統的現場設備、控制系統及網絡設備都存在被攻擊的風險,一旦這些設備出現異常,將會給工業帶來不可估量的經濟損失,影響生產進度,甚至危害人員的生命安全[26]。2010年,在著名的“震網”病毒事件中,攻擊者利用4個“0day”漏洞,致使伊朗核設施的離心機出現了故障,震驚了全球。因此,應對各種網絡攻擊已經成為保障國家關鍵基礎設施安全的基本需求。

 

4.2 關聯分析:實現全景化應用監控的基礎

4.2.1  技術簡介

應用運維智能化技術和相關軟件系統是伴隨應用系統複雜度、運維工作量和技術難度激增而出現的,因此,通過人工智能算法來代替人工融合和分析數據、推理、決策、處理問題是建設應用智能運維繫統需要考慮的關鍵問題之一。

傳統應用運維過程中常用的監控運維繫統一般是針對特定場景、特定資源建設的。例如,日誌分析平臺採集分析應用日誌;APM監控代碼鏈路和對全量用戶請求的處理情況;網絡性能管理(NPM)平臺追蹤網絡中的交易情況和網絡異常;IT資源監控系統監控服務器、網絡設備、雲環境和應用運行依賴的中間件等。要做到智能化,首先要有運維數據治理平臺的支撐,將離散、豎井式的監控系統關聯打通,構建同構的、一致的全景化應用監控視圖,這樣才能為運維人員過濾冗餘信息,提供精準的風險態勢監控和定位決策支持。

4.2.2  深入淺出應用實踐

關聯分析是整合應用運行期生成的各層級全棧數據、關聯打通豎井式監控系統的關鍵。目前可以用來關聯應用運維數據的方法主要有如下幾種。

(1)讀取配置管理數據庫(CMDB)信息。CMDB是一個數據庫,其中包含有關組織 IT服務中使用的硬件和軟件組件,以及這些組件之間關係的所有相關信息。信息系統的組件稱為配置項(CI)。CI可以是任何可以想象的IT組件,包括軟件、硬件、文檔和人員,以及它們之間的任意組合或依賴關係。應用運行期依賴物理IT基礎設施設備、虛擬IT基礎設施設備與應用之間的部署關係,網絡拓撲關聯關係可以從CMDB中定義的CI關聯讀取出來。一旦設備出現故障,這些關係可以用來輔助找出影響範圍。

(2)監控分析網絡流量。NPM工具可以通過旁路鏡像網絡流量來監控網絡上應用中的服務接口之間、應用與用戶之間的交互關係,獲取網絡層的關聯關係。利用深度網絡包檢測(Deep Packet Inspection,DPI)技術,甚至可以將網絡報文中的業務交互信息解析出來,補充業務層的調用關係。

(3)追蹤應用代碼鏈路。APM工具提供了對應用程序性能深入分析的能力,當用戶嚮應用程序發出請求時,APM工具可以通過探針看到分佈式部署的應用系統中的接口調用關係、代碼鏈路執行過程和方法調用關係,並且可以顯示有關此請求發生的系統數據、參數和與數據庫交互的SQL語句。應用白盒監控能力提供的關聯關係,可以在排查代碼缺陷導致的故障時,快速定位根源問題。

(4)利用人工智能算法計算關聯關係。以上三種方法利用傳統運維監控工具提供的數據關聯和檢索能力構建了覆蓋物理部署、網絡交互、接口交互與代碼交互的關係圖結構(見圖4-6),基於此視圖可以實現在異常情況下的信息關聯。但是,一旦出現未能直接監控的問題導致的應用故障,就需要用算法來輔助分析海量歷史監控數據,發現數據中隱含的關係,並根據發現的問題及已知事件推理進行決策。常用的技術是查找時間序列指標數據波動之間的相似性、相關性等關聯關係(主要方法有Pearson、Granger Kendall、Spearman等)。基於關聯關係構建的因果推理分析模型,可以基於概率圖模型(如Bayesian Networks、Markov Random Fields等)建模來實現因果關係發現和推理。

image.png

圖4-6  應用全景監控數據關聯關係建模的策略

相關性是一種雙變量分析,用於測量兩個變量之間的關聯強度和關係方向。就關聯強度而言,相關係數的值在 +1 和 -1 之間變化,其值為1表示兩個變量之間完全關聯;值為 0 表示兩個變量之間的關聯較弱。關係方向由相關係數的符號指示:“+”表示正關係;“-”表示負關係。通常,利用統計學方法可以計算以下幾種相關性:皮爾森相關性(Pearson Correlation)、斯皮爾曼相關性(Spearman Correlation)和格蘭傑因果關係檢驗(Granger Causality)。

皮爾森相關性是使用最廣泛的相關統計,用於測量持續變化的變量之間的線性相關程度。例如,在股票市場中,如果想要測量兩隻股票之間的關係,那麼就可以使用皮爾森相關性。

斯皮爾曼相關性評估兩個連續變量之間的單調關係。在單調關係中,變量往往一起變化,但不一定以恆定速率變化。斯皮爾曼相關係數是基於每個變量的排名值而不是原始數據的。斯皮爾曼相關性通常用於評估正數變量的關係。

格蘭傑因果關係檢驗是經典方法,在計量經濟學的時間序列分析中有較多的應用。除此之外,還有收斂交叉映射(Convergent Cross Mapping,CCM)方法。格蘭傑因果模型的前提假設是事件是完全隨機的,但現實情況是很多事件是非線性、動態且非隨機的,格蘭傑因果模型對這類情況不適用。CCM方法則適用於這一類場景,其可在多組時間序列中構建因果網絡。

4.3  數據統計:敏捷高效的信息提取手段

4.3.1  技術簡介

雖然人工智能算法具有識別複雜模式、可替代人腦進行推理分析等優勢,但目前由於缺少通用的人工智能平臺,其計算複雜度和實施成本相對較高,在某些運維場景下並不適用,而某些統計學方法簡單高效,與人工智能算法結合的效果很有可能出人意料。

Google前SRE工程師Tom Limoncelli在編著The Practice of Cloud System Administration: Designing and Operating Large Distributed Systems一書[27]中講過一個故事:“當有人問我建議平時都要監控什麼時,我會開玩笑地跟他們說,理想情況下,我會首先要求他們刪掉監控系統裡的所有數據採集和告警策略,當再次發生故障時,想想什麼指標可以預測這次故障的發生,然後把這個指標監控和告警策略加回到監控系統中來。如此不斷積累,現在監控系統中只存在能夠預測各種不同故障的指標和告警,從而當故障發生時,監控系統不會被大量告警信息淹沒。”

還有一種更加簡便的方法也能達到預期效果,但要有完整的歷史數據支撐,即查看歷史30天或半年的故障恢復記錄,看哪些指標對發現並解決特定問題和特定故障有用。例如,如果我們發現一臺Web服務器停止響應了,首先要查找的是發現這一現象的相關指標數據,而且這些指標未必是從Web服務器本身採集的,例如:

(1)應用層:Web頁面加載時間持續增加;

(2)操作系統層:服務器內存使用率無波動,磁盤讀寫無波動;

(3)數據庫層:數據庫事務執行時間持續升高;

(4)網絡層:負載均衡器掛載的活躍計算節點數量降低。

以上這些指標異常都有可能提前反映某些潛在的應用故障。對於之前發生過的每種故障類型,找到其對應的能提前反映異常的指標,定義告警策略。如果日常運維持續這個過程,積累經驗數據,那麼能提前發現的異常類型就會越來越多,由於應用故障導致直接影響用戶的情況就會越來越少,運維體系的工作負荷就會越來越低。

使用平均值和標準差檢測呈高斯分佈的指標異常是行之有效的方法。但是,對於其他非高斯分佈的指標,有可能達不到預期效果,一旦指標數據的概率分佈不符合高斯鐘形曲線,基於平均值和標準差來過濾異常數據的手段就不適用。例如,要監控某網站上每分鐘下載特定文件次數這一用戶行為,可定位下載次數異常增高的時間窗口,即過濾大於平均值3倍標準差下載量的時間段。在圖4-7中,灰色柱形圖展示了用戶每分鐘下載量的時間序列分佈,上方黑色滑動窗口序列對應標識了下載量大於平均值3倍標準差的時間段,灰色未標識窗口對應的下載量則小於平均值3倍標準差。

image.png

圖4-7  每分鐘下載量指標使用平均值3倍標準差規則時過度警報的效果截圖

從圖中可以看出,如果用大於平均值3倍標準差策略生成告警,很明顯的一個問題是,大多數時間段都需要產生告警。為了更明顯地展示此問題,我們將該指標數據的概率分佈可視化,如圖4-8所示。圖4-8中,橫軸是指標可能出現的數值,縱軸是一段時間內該值出現的次數統計值。很明顯,其並不是對稱的高斯鐘形曲線。通常情況下,文件下載頻率都比較低,但高於平均值3倍標準差的下載任務,在時間軸上的分佈規律性相對較強。

image.png

圖4-8  每分鐘下載量指標數據直方圖

像這種非高斯分佈的指標,在生產環境中並不是少數。對這種現象,Simple Math for Anomaly Detection[30]一書的作者Toufic Boubez博士認為,“在運維過程中,我們採集的很多指標數據滿足‘卡方(Chi Squared)’分佈的概率分佈。在這類指標上使用平均值3倍標準差做異常檢測和告警,會導致告警風暴或乾脆檢測不出來” 。她認為,“如果過濾小於平均值3倍標準差的數據,我們將得到負數,得到的結果很明顯也沒有什麼意義” 。

告警風暴是運維人員不願意遇到的情況,一些故障有時並不嚴重,或者根本沒有必要深夜起床處理。而若出現風險跡象或已經發生故障未檢測出來,後果則更為嚴重。假如我們要監控已經完成的用戶提交事務指標,由於系統軟件出現故障,該指標陡降50%,如果我們使用平均值3倍標準差的統計學方法檢測異常,則監控指標值在正常範圍內,不會產生告警。後果就是,用戶將先發現此問題,接近50%的用戶提交事務將返回執行失敗的提示,該問題造成的損失會更大。我們需要用其他方法來發現這類問題。

 

案例

Scryer是Netflix開發的用來解決Amazon AWS雲平臺Amazon Auto Scaling(AAS)功能缺陷、提升應用服務質量的工具。AAS可以探測AWS雲上的應用負載,自動增加或減少應用雲上彈性集群的計算能力。Netflix開發的Scryer在AAS功能的基礎上,可以通過分析歷史數據的趨勢和規律對應用未來的負載進行預測,預先彈性控制集群規模,分配或回收資源。總的來說,Scryer彌補了AAS以下三個不足。一是AAS對用戶併發訪問量突發峰值處理方面的不足。由於併發量突然增加,持續時間較短,而AAS處理採用彈性控制策略,創建、啟動新AWS EC2計算節點的速度要持續幾分鐘甚至幾十分鐘時間。等集群節點創建完畢,也錯過了併發訪問量激增的時段。二是由於AAS判斷策略簡單,用戶訪問量的突然減少會使AAS消減過多的集群節點,以至於其不足以處理即將發生的用戶訪問。三是AAS不能從歷史用戶訪問數據中找到趨勢和規律來指導未來的容量規劃。

Netflix用戶訪問數據的概率分佈並不符合高斯分佈,但數據規律性較明顯,每天分時段訪問量、節假日和工作日的訪問量都有明顯的規律可循,因此可預測性較強。可通過使用多種異常檢測策略監測突發的訪問量激增,結合快速傅里葉變換(Fast Fourier Transform,FFT)、線性迴歸平滑處理數據,同時保留合理的有規律激增點。通過這些處理技術,Netflix能夠在處理併發訪問量激增時預測趨勢,獲得一些提前量來增加資源(見圖4-9),從而保障用戶體驗流暢。在Scryer系統上線第一個月,Netflix就監測到了明顯的用戶體驗和服務質量的提升,AWS EC2計算資源的使用成本也有所降低。

image.png

圖4-9  Netflix Scryer預測用戶流量和生成的 AWS 計算資源計劃

對於規律性不是很明顯的非高斯分佈的時間序列指標數據的異常檢測,常採用指定時間窗口平滑處理,即選定一個時間窗口,沿時間軸滑動,將每個點的監控值替換為時間窗口內所有點的平均值。這麼處理可以將指標曲線波動劇烈的鋸齒狀波形平滑掉,突出曲線趨勢和規律。圖4-10所示為原始曲線和經過平滑處理的曲線的對比,灰色為原始數據曲線,黑色為經過30天時間窗口平滑處理後的曲線。

除了平滑處理,類似常用的處理方法還有KS檢驗(Kolmogorov-Smirnov Test,用於檢測數據是否符合指定分佈)、快速傅里葉變換(Fast Fourier Transforms)等。大多數和用戶觸發任務執行相關的指標都是存在規律性的,通過學習歷史數據中每天、每週、每年的規律,就能夠發現實時數據是否異常。例如,若週六晚上的用戶成功交易量相比於歷史同期下降了50%,則有可能存在系統異常,導致用戶請求執行緩慢或失敗。

image.png

圖4-10  原始曲線和經過平滑處理的曲線對比

4.3.2  深入淺出應用實踐

2014年,在Monitorama公司,Toufic Boubez博士介紹了使用KS檢驗方法實現異常檢測的案例[28]。KS檢驗方法在統計學中通常用於檢驗兩個數據集的相似性,使用這種方法的常用運維監控工具有側重數據採集與存儲的Graphite和側重分析展現的Grafana。

圖4-11所示為某電子商務網站的交易筆數指標的月交易量時間分佈。從指標曲線變化趨勢能直觀看出,箭頭所指處的交易量異常,並沒有往常那麼多。

如果使用平均值3倍標準差規則判斷異常,將收到2次告警,週一交易量未恢復正常值的異常會被忽略掉。在理想情況下,若交易量與歷史同期的平均值相差太大,我們也希望收到告警通知。Boubez博士在Simple Math for Anomaly Detection一書中提到,“KS檢驗方法對運維人員分析監控指標數據非常有幫助,因為其不需要預先判斷分析的指標是否符合正態分佈或其他概率分佈,這對了解複雜系統的監控數據規律很關鍵,可以幫助運維人員找出週期性指標數據的週期波動變量。”

圖4-12所示為通過KS檢驗方法處理交易筆數指標數據的效果。圖中與時間軸平行的灰色時間序列代表處理後的正常狀態,其中,黑色區域是檢測出異常的時間窗口。目前有三個檢出異常的黑色窗口,分別對應1次週二交易量增加、1次週二交易量降低和1次週一交易量降低。這些異常是人眼觀察不到的,用平均值3倍標準差規則也無法檢測出來。如果這些異常是由系統運行異常導致的,接收到告警後,運維人員及時介入就有可能降低影響範圍,保障未來交易量不會受到更大的影響,從而提升用戶數字體驗。

image.png

圖4-11  某電子商務網站的交易筆數指標的月交易量時間分佈

image.png

圖4-12  使用KS檢驗方法對交易筆數指標異常情況發出告警

時間序列數據異常檢測中的一個重要問題是概念漂移,時間序列中的數據是流動的,有實時性且數據量龐大;隨著時間變化,時間序列中數據的分佈及標籤可能發生變化,出現概念漂移及異常現象。針對概念漂移及異常問題,很多學者提出瞭解決方法。解決概念漂移及異常的方法大致可分為兩類:①對概念漂移及異常進行檢測,在檢測到發生概念漂移及異常的位置調整學習策略,以適應新的數據;②實時動態調整學習器以適應新數據,不需要考慮是否發生了概念漂移及異常。

所謂時間序列概念漂移及異常是一種數據隨時間而發生變化的現象。對於時間序列相關的挖掘來說,當發生概念漂移及異常時,已構建模型的性能指標會隨時間而降低,甚至導致模型完全失效。因此,準確檢測和判斷是否發生概念漂移及異常,對於時間序列相關的挖掘來說是至關重要的一環,對於概念漂移及異常的檢測成為近年來學術界研究的熱點問題之一。

由於發生概念漂移及異常時,模型只能通過自我更新的方式來適應新的數據環境,因此,對概念漂移及異常進行實時檢測,從而控制模型進行更新,是克服概念漂移及異常最好的方法。傳統的概念漂移及異常檢測往往通過對模型內部參數的監控來達到檢測概念漂移及異常的目的。例如,對於時間序列分類問題,通過監控模型的分類準確率來判斷是否發生了概念漂移及異常,這種方式的優點是實現簡單、直觀,缺點是檢測往往由於受噪聲的影響而發生誤判,且具有滯後性。

高維監控數據的概念漂移及異常時間序列學習是一個很重要的課題,高維數據帶來的維數災難使得傳統的機器學習方法不再適用。一個比較經典的檢測概念漂移及異常的方法是由Dasu等人提出的一種用於檢測高維時間序列的概念變化問題的信息理論方法。該方法基於空間分割方案,運用KL散度度量兩個經驗分佈之間的距離。但是,該方法在離散化劃分之後才能求得概率密度,經過離散化後運用Bootstrap,使算法需要花費較大的時間代價。另外,該方法只能判斷兩類情況下的概念漂移及異常,對多類情況只能兩兩判斷或採用其他策略。

綜上所述,對於高維時間序列的概念漂移及異常檢測問題,關鍵是找到既能滿足時間序列的實時性要求,又能準確判斷概念漂移及異常是否發生的方法,從而為模型更新提供幫助。儘管目前有不少檢測方法,但受時間序列自身特點的限制,其尚無法很好地解決概念漂移及異常問題。另外,大數據下的概念漂移及異常呈現多樣化的特點,不同類型的概念漂移及異常所需方法也無法統一。

時間序列概念漂移的研究在機器學習和數據挖掘領域的重要性與日俱增,並在處理途徑方面呈現多樣化的趨勢,從近年來機器學習與數據挖掘領域的一些國際權威期刊論文和國際頂級會議論文來看,時間序列概念漂移的挖掘和分類研究正日益成為學術界關注的焦點,對數據流概念漂移的研究已經開始與轉移學習、進化計算、特徵選擇、聚類、時間複雜度分析、社會計算等結合。因此,從趨勢上來說,已有各種模式分類的理論和算法都可與概念漂移相結合,從而引出更多新的研究問題。


 

 

4.4  預測分析:使應用性能風險防患未然

4.4.1  技術簡介

面對智能、互聯時代更廣泛的用戶群、更多類型的終端接入、更復雜的應用技術架構,採用數據驅動、機器分析決策代替人工運維方式建設運維繫統、保障服務質量目標、提供應用運維服務已是大勢所趨。下面介紹如何利用現有的開源、商業版工具分析監控數據,發現應用潛在風險,規避故障。分析手段涉及統計學方法、人工智能算法。

在用戶受影響之前,預先發現問題並處理的能力對提供在線互聯網服務的企業尤為重要。畢竟用戶體驗下降,甚至服務中斷會直接影響企業營收。在互聯網公司中,通過分析監控數據實現主動探傷、預防風險的公司已經非常普遍,Netflix(面向全球的在線視頻服務提供商)就是其中之一。Netflix 依賴互聯網在線平臺向全球用戶提供影音視頻服務,非常重視這方面能力的建設,已經實現了一定範圍的應用異常預警和預處理。由於需要面向海量終端用戶提供在線服務,應用性能和用戶數字體驗直接決定企業營收,互聯網行業對運維繫統建設的重視程度相比於製造業、政府等要高。2015年,Netflix在線用戶數達到7500萬,年營業額達到62億美元,其經營的首要目標是為用戶提供極致用戶體驗的在線視頻服務。為達到此目標,應用運維至關重要。Roy Rapoport形象地將Netflix基於雲平臺的視頻服務運維保障面臨的挑戰描述為“從一群長相和行為都相似的牛群中,找出最與眾不同的那頭牛”。如果應用系統包含上千個無狀態的計算集群節點,所有節點都在運行同樣的代碼,分擔相同規模的計算負載,那麼從這些集群中選出異常節點並不容易。

4.4.2  深入淺出應用實踐

為了解決上千節點運行期的海量監控數據篩選問題,Netflix於2012年引入了異常檢測算法。約克大學(University of York)的Victoria J. Hodge 和Jim Austin 將異常檢測(Outlier Detection)定義為“檢測導致明顯性能下降的運行期異常事件,如自動檢測飛機發動機運轉過程中的異常的傳感器指標數據”。Netflix使用的方法類似,即首先利用算法識別節點反饋的監控指標正常運行的狀態數據模式,然後過濾集群中監控指標狀態數據模式類似的節點,將其識別為正常,剩下的就是疑似異常節點。

Netflix已經能夠在不需要人工定義什麼是正常節點運行行為的情況下,自動找出異常狀態節點。由於計算集群部署在雲端,其實現了集群規模的可伸縮彈性控制功能。異常節點由系統自動清除處理,負載自動由新創建的或其他正常的節點接替。因此,不需要通知任何人干預處理。為了排查故障原因,自動處理過程和異常節點的狀態數據會被保存並通知相關工程師。通過應用異常檢測算法,計算集群中異常節點定位、故障排查和恢復的人工工作量大幅度降低了,服務質量也有了顯著提升。Netflix在利用異常檢測算法檢測監控數據方面的嘗試驗證了通過智能運維繫統替代人工運維、實現大規模複雜應用運維管理的可行性。

分析指定時間範圍內應用指標數據是否存在異常最簡單的統計學方法是計算指標的平均值和標準差。通過這種方法,我們能很快發現持續採集的監控數據中指標波動異常的時間範圍。例如,用戶請求併發量的平均值環比顯著升高,則應用有可能受到惡意攻擊,需要定義告警策略並通知相關責任人。

當關鍵產品服務發生異常時,在凌晨或其他任何時間生成告警短信或電話以通知責任人都是有必要的。但是,當產生的告警並沒有明確指出異常原因,或者根本就是錯誤告警時,就沒有必要推送了。例如,某彈性組計算集群服務節點的CPU使用率升高,導致使用率升高的原因很多,且集群節點故障宕機並不影響應用業務正常運行,因此,基於此指標告警就意義不大。如開發運維一體化領導者、資深應用運維工程師John Vincent所說:“告警疲勞是我們現在唯一待解決的問題,我們需要讓告警更智能,否則我們就得瘋掉!”

從理論上說,好的告警需要有較高的信噪比,能指示關鍵KPI指標上實時產生的異常數據點,並能與明確有所指的告警信息匹配,引導責任人快速定位、修正問題。假如要監控某應用未授權用戶嘗試非法登錄系統的行為,採集的指標數據的概率分佈為高斯分佈,概率密度函數如圖4-13所示,其中,µ為指標平均值,σ為標準差。越靠近高斯分佈鐘形曲線邊緣的取值,為異常數據的可能性越高。在運維數據分析場景下,這種方法最常用的場景是利用一段時間的監控數據,計算概率分佈,並通過標準差設置告警閾值,然後計算實時採集的數據偏離平均值的程度來判斷是否觸發告警。例如,若監控的未授權登錄量指標符合高斯分佈,則可以設置告警策略為篩選未授權登錄量比平均值3倍標準差大的時間。

對於統計學方法,要圍繞實際場景,本著計算簡單、結果有效的原則進行選擇。因為我們面對的是幾萬甚至百萬級別的指標,過於複雜的統計學方法會給監控系統帶來巨大的負擔,影響產生結果的時效性,我們也不可能對每個甚至每類指標都定義統計學方法。

image.png

圖4-13  呈高斯分佈的指標的概率密度函數

4.5  因果推理:專家經驗輔助決策支持

4.5.1  技術簡介

在實際運維場景下,很多應用故障的原因相當複雜,故障不能被直接監控到,或者不能靠設計確定性計算方法來分析現有監控數據,找到問題線索。在這種情況下,利用知識工程手段建設專家系統,利用非確定性計算方法積累專家經驗,並基於經驗推理來分析解決應用運維場景下的風險管理問題,是應對未來應用系統複雜度快速增長、運維成本增加的可行的技術手段。實現具備推理分析能力的應用智能運維繫統,需要突破的技術難點主要有:①積累專家經驗知識,形成專家系統知識庫,為構建知識型人工智能運維繫統提供基礎支撐;②利用知識庫中積累的知識,在出現異常時自動推理分析以找到最優解決方案。

尋找第一個難點的解決途徑,需要首先從現有知識工程領域的研究成果下手。在人工智能領域,通過積累經驗知識提升人工智能的水平已經不是一個新話題。早在1977年,美國斯坦福大學的計算機科學家、圖靈獎獲得者愛德華·費根鮑姆(Edward A. Feigenbaum)教授就提出,傳統的人工智能忽略了具體的知識,人工智能必須引進知識。在第五屆國際人工智能會議上,費根鮑姆教授第一次提出了知識工程的概念,並帶領團隊研發了第一代知識工程驅動的專家系統。如今盛行的知識圖譜又將知識工程推向了一個新高度。

在IT運維領域,經驗知識的積累主要體現在數據採集策略、指標告警策略、分析儀表盤、報表模板和CMDB方面。這些專家知識以結構化、半結構化的方式定義了針對不同類型的應用中間件和運行環境支撐設備如何採集指標、如何判斷異常狀態,以及如何管理應用部署配置等相關知識。

這些知識固化在運維軟件系統中,對輔助運維人員監控應用、發現風險發揮了重要作用。但是,應對技術架構、拓撲結構較為複雜的互聯網應用,微服務架構已經力不從心。要找出包含幾十種中間件和數據庫、對接公有云服務和私有云服務、連接手機和汽車等多種智能終端的應用的潛在風險,定位故障原因,需要更加智能的專家系統。這些專家系統不但要能積累海量知識,而且要能基於條件自動關聯知識進行因果推理分析,替代人腦在海量知識中找出答案。

1. 具有應用運維經驗知識的專家系統

專家系統作為早期人工智能的重要分支,是一種在特定領域解決問題的能力達到專家水平的程序系統。專家系統一般由兩部分組成:知識庫與推理引擎。它根據一個或多個專家提供的知識和經驗,通過模擬專家的思維過程進行主動推理和判斷,從而解決問題。第一個成功的專家系統DENDRAL於1968年問世。1977年,費根鮑姆將其正式命名為知識工程。目前獲得廣泛關注的知識圖譜技術是在當前技術的發展背景下,知識工程演進到新階段的產物。

對於應用運維場景,知識圖譜提供了一種定義運維領域的經驗知識,以及應用實體及其相互間部署、交互、網絡拓撲等關係的結構化方法。知識圖譜對應用本身及其相關的實體範圍內可以識別的客觀對象和關係進行規範化描述,形成運維智能化支撐的知識庫。知識圖譜本質上是一種語義網絡,其中的節點代表實體或概念,邊代表實體/概念之間的各種語義關係。

2. 使用知識對非確定性問題進行因果推理分析

因果推理分析是UCLA教授、圖靈獎獲得者Judea Pearl在Probabilistic Reasoning in Intelligent Systems一書中提出的,其將人工智能領域處理非確定性問題的方法劃分為三個學派:邏輯主義學派(Logicist)、新計算學派(Neo-Calculist)和新概率論(Neo-Probabilist)[29]

邏輯主義學派試圖用非數字技術來處理不確定性,主要運用非單調邏輯。新計算學派使用不確定性的數值表示不確定性,但認為概率積分(Probabilistic Calculus)不足以完成這項任務,因此,其發明了全新的微積分,如Dempster-Shafer理論、模糊邏輯和確定性因素。新概率論仍然存在於概率理論的傳統框架中,同時試圖用執行人工智能任務時所需的計算工具來支持其理論。處理不確定性的延伸方法(也稱為生產系統、基於規則的系統和基於程序的系統)將不確定性視為附加到公式的廣義真理值,並將任何公式的不確定性計算轉化為其子公式的不確定性計算。在有意的方法(也稱為聲明性或基於模型的方法)中,不確定性與可能的世界狀態或子集相連。

對於運維場景,推理任何現實問題總需要對目標場景進行一些抽象、對高維數據進行一些降維以簡化計算。準備知識來支持推理的行為要求我們留下許多未知、未說或粗略的總結事實。例如,如果我們定義“HTTP-500錯誤代表服務器端頁面ASP、JSP代碼解析錯誤”或“應用可用性終端和服務端節點日誌中同時出現Out of Memory異常,代表內存溢出導致的應用宕機”等規則來對知識和行為進行編碼,那麼將有許多我們無法列舉的例外情況及規則適用條件。

要實現人工智能驅動的運維,知識是不可缺少的。在設計運維繫統的智能化處理過程時,只採用過程性方法來定義風險是不夠的。應對複雜策略,還必須使用說明性方法及積累的歷史經驗和領域知識。當解決問題時,單純設計算法來實現高效率的求解,而不考慮由於數據維度的增加、條件組合數的無限增加而導致的搜索量增加,也是不切實際的。

網絡表示不是人工智能系統外在的。大多數推理系統使用複雜的指針系統(將事實分組為結構,如框架、腳本、因果鏈和繼承層次結構)的索引網絡來編碼相關性。這些結構雖然被純粹的邏輯學家所迴避,但在實踐中已經證明是不可或缺的,因為它們將執行推理任務所需的信息放在接近任務所涉及的命題的位置。事實上,人類推理的許多模式只能用人類遵循這種網絡所制定的途徑的傾向來解釋。

本書討論的網絡的特點是它們具有明確的語義。換句話說,它們不是為使推理更有效率而設計的輔助設備,而是知識庫語義中不可或缺的一部分,它們的大部分功能甚至可以從知識庫派生出來。

4.5.2  深入淺出應用實踐

在特定場景下面向具體問題的應用實踐中,對於不確定性推理,可按照是否採用數值描述不確定性來選擇不同的方法:一種是數值方法,它是一種用數值對不確定性進行定量表示和處理的方法;另一種是非數值方法,它代表除數值方法以外的其他各種對不確定性進行表示和處理的方法。

對於數值方法,其又可以根據所依據的理論分為兩種不同的類型:一種是基於概率論的有關理論發展起來的方法,如確定性理論、主觀Bayes方法、證據理論和概率推理等;另一種是基於模糊邏輯理論發展起來的方法,如模糊推理,它可以用來對由於操作系統最大線程數限制,或者應用系統線程數過多導致的服務異常問題進行推理判斷。如果採用傳統的根據預定義條件判斷的方法枚舉這種操作系統配置導致的異常,那麼前期需要配置的數據量將非常龐大。

考慮投入產出比,我們不可能為每種可能發生的異常情況和每個監控指標設計特定的數據採集策略與異常檢測算法。因此,基於先驗知識,使用由現象到本質的不確定性推理(Induction)來解決更為合適,這樣雖然不能保證完全準確,但能在一定程度上替代運維專家輔助決策,給出解決問題的正確方向。

推理過程實質上是不斷尋找和運用可用先驗知識的過程。在應用運維場景下,可用先驗知識是指根據經驗積累的風險現象、應用配置前提條件,以及可與歷史風險處理知識庫匹配的知識。類似採用推理解決應用系統線程數過多的問題,針對運維過程中需要採用不確定性推理方法處理的場景,需要考慮的基本問題包括以下方面。

1. 不確定性的表示

不確定性的表示包括知識不確定性的表示和證據不確定性的表示。知識不確定性的表示通常需要考慮兩方面的問題:如何能夠比較準確地描述問題本身的不確定性,以及如何定義能便於推理過程中不確定性的計算。

知識的不確定性通常是用一個數值來描述的,該數值表示相應知識的確定性程度,也稱為知識的靜態強度。證據的不確定性表示推理中的證據有兩種來源:第一種是應用出現故障後在求解問題的原因的過程中所提供的初始證據,如系統內存溢出問題、內存使用率超閾值等先驗知識;第二種是推理過程中得出的中間結果。通常,證據的不確定性應該與知識的不確定性表示保持一致,以便推理過程能對不確定性進行統一處理。

2. 不確定性的匹配

推理過程實質上是不斷尋找和運用可用知識的過程。可用知識是指其前提條件與綜合數據庫中的已知事實相匹配的知識。那麼如何匹配呢?目前常用的解決方案是,設計一個用來計算匹配雙方相似程度的算法,並給出一個相似的限度,如果匹配雙方的相似程度落在規定的限度內,那麼稱雙方是可匹配的。

3. 組合證據不確定性的計算

在不確定性系統中,知識的前提條件既可以是簡單的單個條件,也可以是複雜的組合條件。匹配時,一個簡單條件只對應一個單一的證據,一個組合條件將對應一組證據,而結論的不確定性是通過對證據和知識的不確定性進行某種運算得到的。所以,當知識的前提條件為組合條件時,需要有合適的算法來計算組合證據的不確定性。


 

4. 不確定性的更新

由於證據和知識都是不確定的,那麼就存在兩個問題:如何利用證據和知識的不確定性更新結論的不確定性;在推理過程中,如何把初始證據的不確定性傳遞給最終結論。

對於第一個問題,一般的做法是按照某種算法,由證據和知識的不確定性計算結論的不確定性。對於第二個問題,一般的做法是把當前推出的結論及其不確定性作為新的證據放入綜合數據庫。

目前已有一些解決此類問題的研究成果,如墨爾本大學CLOUDS實驗室的Rajkumar Buyya等人[30]分析了以服務等級協議(SLA)感知方式解決計算資源分配問題的關鍵挑戰,提出了基於計算風險管理的SLA感知推理資源分配策略。為利用雲計算的資源動態分配能力,一些文獻[31]分別介紹了集群系統及多層應用的資源的隨需分配實現策略,詳述了以SLA及QoS事件觸發方式實現雲計算資源動態調配的主要機制。

為實現服務質量感知的資源自適應配置,Amir Vahid等人[32]通過語義查找、分析和匹配用戶需求,實現了多雲環境下的QoS感知雲服務選擇;針對私有云環境中資源交付與調度的高效實現問題,我們提出了一種基於分裂聚類的雲應用的資源交付與配置方法,優化了虛擬機與虛擬設備的資源配置[33];為了優化雲應用在多種雲環境下的部署策略, Grozev Nikolay等人針對多雲聯邦環境下部署的三層Web應用性能進行了性能建模,並給出了跨多雲部署的三層Web應用運行期基於負載的資源動態響應是資源優化策略的結論[34]。現有文獻研究成果[35]主要通過事件或人工觸發被動調整資源配置的方式來實現資源與負載適配,存在響應不及時、調整效果不明顯的問題。

所述目標應用場景如圖4-14所示。由基礎設施提供商(InP)提供的物理網絡(SN)、虛擬網絡(VN),以及由服務提供商(SP)通過部署雲應用提供的服務之間的關係可抽象為相互依賴的三個層疊平面結構。其中,服務層實例由服務提供商以預定義模板的形式通過IaaS平臺部署雲應用來構建。在此過程中,雲應用運行期所需的虛擬網絡通過將模板中包含的依賴資源描述文件轉換為虛擬網絡來構建請求,然後由IaaS平臺處理並創建對應的虛擬網絡實例。運行期間,服務提供商可根據業務目標調整預期的服務質量目標,雲管理系統則定期根據服務質量目標和歷史監控指標數據生成虛擬網絡重配置請求,修正虛擬網絡配置以規避風險。

image.png

4-14  基於虛擬網絡的服務部署邏輯層次映射

服務質量目標是服務提供商向其用戶提供的請求響應時間、請求併發量等業務服務質量承諾。基礎設施提供商以虛擬網絡的形式向服務提供商交付所需資源。為了方便計算,所有網絡資源量(網絡帶寬、計算資源)被抽象定義為整數。在圖4-14中的物理網絡層中,標註於物理網絡節點和物理網絡鏈路之上的以斜線分隔的數字分別代表可用資源和資源總量;在虛擬網絡層中,標註於虛擬網絡節點和虛擬網絡鏈路之上的數字代表需要的資源量。

4.6  自治控制:應用運維過程的自動化管理

4.6.1  技術簡介

基於自治控制的理念實現應用智能運維繫統也是降低人工運維工作量的一種思路,對該課題的研究已存在一些行之有效的研究成果。其中,大多數成果集中在通過經典控制理論、自治計算和機器學習來實現集中式的資源管理方面。D.Ionescu等人[36]提出了一種基於IBM MAPE-K[37]自治控制框架的虛擬環境管理平臺設計方案,其能夠通過集中控制節點實現資源的自交付(Self-Provisioning)及自優化(Self-Optimization)。自治計算的處理被視為一種具有持續線性參變不確定性的非線性不確定系統。P.T.Endo等人[38]設計了面向雲計算基礎設施的自治雲管理系統,該系統能夠對雲基礎設施的資源使用率做持續優化,並降低運維管理成本。為了研究雲計算服務自治管理的可觀測性和可控制性,L.Checiu等人[39]提出了基於自治計算模型的輸入-狀態-輸出(Input-State-Output)數學模型。通過預定義策略實現自治管理是一種簡潔有效的手段,M. Sedaghat等人[40]基於這種理念提出了基於策略的自治雲環境管理方案。該方案利用更高層次的管理系統監控整個雲計算環境與其中部署的服務的狀態,當發現服務狀態不能滿足業務目標時,則調整底層資源控制策略來適應變化。Wenjie Liu[41]則利用不同類型的應用(如計算密集型應用、存儲密集型應用)對不同類型的資源的消耗程度存在差異的特點,將不同類型的應用系統自動調配部署,從而提高了資源使用率和提升了應用可用性,達到了雲計算環境下自治管理雲計算資源的目標。

自治管理是為了降低日益複雜的數據中心環境中人工干預管理的複雜度,通過自動化的監控、管理和控制手段來代替傳統人工手動處理異常、管理配置等的過程。當前常用的自治管理技術是IBM提出的MAPE-K自治計算框架(Autonomic Computing Framework)。MAPE-K是Monitor、Analysis、Plan、Execution and Knowledge Base的縮寫,其主要設計理念是以知識庫為核心構建集監控、分析、計劃和控制於一體的閉環自動控制系統,從而實現能夠自配置(Self-Configuration)、自恢復(Self-Healing)、自優化(Self-Optimization)和自保護(Self-Protection)的自治控制系統。自治計算的層次可分為以下兩種。

(1)自治元素(Autonomic Elements):自治元素是組成自治系統的基本元素,如具有自治功能的服務器、路由器等設備。

(2)自治系統(Autonomic Systems):自治系統給自治元素提供一個相互合作、通信的環境,並且提供人機界面。

每個自治元素擁有一個MAPE-K閉環自動控制系統。在結構上,自治元素包含傳感器、執行器及知識庫(Knowledge Base)三部分。傳感器負責感知周圍環境,執行器通過推理分析得到需要執行的動作集合以調整和控制外部環境。推理和分析過程是依靠知識庫中記錄的數據來完成的。在一個自治計算環境中,新加入的元素將被自動設置,不同的自治元素間相互合作完成一個任務,這個任務可能由管理員通過所謂的政策來指定,但這個政策的定義是用高層語言編寫的。各自治元素通過項目合作、諧調、優化來完成任務。

4.6.2  深入淺出應用實踐

通常,部署在雲環境下的互聯網應用所面臨的環境是開放的、動態的,雲與雲應用之間應能按多種靜態鏈接和動態合作方式,在開放的網絡環境下實現互連、互通、協作和聯邦。這就要求建立能夠支撐雲環境下服務交互的雲服務管理框架,採用面向服務的方式動態組織應用系統之間的服務交互,並且能夠面向特定的應用場景,基於語義知識自主地做出交互服務決策。這種具有自適應服務交互特性的運行支撐框架涉及的研究內容包括以下幾方面。

(1)自適應組合服務技術。對於公共雲服務,用戶的業務目標通常需要通過多個服務的組合來實現,這就需要建立一種被調用者和調用者一對多的關聯關係,並提供相應的組合策略。這一過程涉及的需要突破的關鍵技術有面向服務的業務目標分解技術、聚合服務技術和多目標服務組合技術。

(2)雲協同服務技術。公共雲服務是一個複雜的需求形態,需要跨機構、跨領域的服務協同才能完成。因此,運行支撐框架,需要研究能支持服務需求特徵提取,業務流程編排,跨域服務交互,協同運行監控,實現跨組織、跨地域、多應用系統協同服務的技術,從而滿足雲計算複雜應用系統的業務敏捷化的需要。

(3)服務動態演化技術。服務的動態演化是支持雲計算多變環境下自適應特徵的一個良好體現。互聯網的開放、動態和多變,以及用戶使用方式的個性化要求,決定了雲應用下的服務構件在發佈之後,會在長時間內持續不斷地演化;不同服務之間的運行、調整和演化並不是獨立的,需要相互協作。服務的動態演化包含了服務構件本身的演化及聚合服務的動態演化,主要需要解決兩方面的技術問題:服務調用的透明性技術和服務狀態轉換技術。

在典型的能夠支撐多個雲應用運行的多主機集群雲計算環境下,基於集中部署的管理系統提供了對負載及資源使用率都在動態變化的雲應用的性能和穩定性的保障能力。同時,提升主機、網絡設備的資源使用率需要考慮很多動態變化的不確定因素,採用集中控制邏輯實現會非常困難。基於多智能體系統,利用多智能體協作方式解決此類問題,能夠有效降低集中控制策略的複雜度和系統實現的工作量,被業界廣泛採納。

多智能體技術是實現軟件系統自治的一個主流技術,也是解決複雜應用運維行之有效的技術方案。軟件智能體能夠系統化地開發可以適應隨機的、動態的變化環境和情況的複雜應用。智能體的主要特徵可歸納為封裝、面向目標、反應性、自治性、主動性、交互性和持久性[42]。與對象相比,智能體間的交互更像請求服務而不是方法調用。關鍵是,與智能體交互相比,面向對象的方法缺少能夠靈活控制方法雙向調用通信的概念和機制。面向對象的構件的元素都是在設計期預定義好的、靜態的;而在面向智能體的軟件工程中,元素是動態創建的,因此,智能體比傳統構件顯示了更多的行為和靈活性。智能體間的交互需要一個智能體平臺,智能體的通信通常採用智能體通信語言(ACL)。隨著智能體理論和技術研究的不斷深入,許多學者將智能體的概念、理論和技術引入軟件工程領域,出現了面向智能體的軟件工程。近年來,面向智能體的軟件工程受到了學術界和工業界的高度關注與重視。至今,人們已經提出了許多面向智能體的開發方法學、程序設計語言,以及CASE工具和集成開發環境。研究人員正試圖從更廣的範圍系統地開展面向智能體軟件工程方面的研究,包括面向智能體的軟件複用、項目管理、形式化規範、系統驗證和模型檢測。領域內也湧現出一批面向智能體軟件系統的專業化公司及產品,如Agent Oriented Software Ltd。IBM、Microsoft、Fujitsu和Toshiba等著名軟件產品生產商也紛紛加強在該領域的技術和產品研發。OMG和FIPA等國際標準化組織也開始致力於智能體技術的標準化工作,並推出了一系列關鍵的智能體技術規範和標準,如FIPA提出了智能體通信語言。如今,面向智能體的軟件工程正與其他計算機技術進行著更加緊密的結合,如面向服務的計算、語義Web、對等計算、普適計算、網格計算和自治計算等[43]。一些開源的智能體平臺產品,如JADE、Tryllian智能體軟件開發包、KATO也逐漸獲得了業界的廣泛應用。

 

案例

虛擬化技術的快速發展使得應用與基礎設施環境解耦,為實現更靈活的資源配置交付奠定了基礎。雲計算使得將虛擬化的計算、存儲、網絡資源以隨需即取的服務形式交付給目標用戶成了可能。這種商業模式使企業用戶能夠以更低的成本靈活、快速地開發和部署應用系統。藉助雲服務,應用部署人員能以更加敏捷的方式配置和部署具有隨需動態伸縮、遷移能力的雲應用。當前,基礎設施即服務(Infrastructure as a Service,IaaS)平臺已被廣泛應用,雲應用開發平臺即服務(Platform as a Service,PaaS)服務平臺及直接面向終端用戶的軟件即服務(Software as a Service,SaaS)也逐漸成熟。然而,由於不同雲平臺在相同配置下存在計算、存儲、網絡性能的差異,且雲應用負載和資源使用率隨時間動態變化,如何實現雲應用運行期資源的自適應配置,在保障預定義應用服務質量目標的前提下支撐雲應用資源分配策略隨負載動態衍化以提升資源使用率,是目前該領域需要攻克的關鍵難題之一。

為了實現雲應用資源的自適應配置,首先要能夠實時探查雲應用的運行期狀態,通過分析歷史指標數據推理判斷雲應用資源是否處於資源超配或資源配置不足的狀態,之後生成對應的任務,自動調整資源配置。為實現目標效果,需要構建具備運行期監控指標採集、監控數據存儲分析和管理控制能力的跨平臺監管系統。

雲計算環境將物理設備和應用解耦,應用運行直接依賴雲計算環境,間接依賴物理設備。雲計算環境為多應用提供運行期支撐服務,物理設備不再被一個應用獨佔。當物理設備、雲計算環境中的虛擬設備或應用本身發生資源配置風險時,將影響應用的直接運行。為了有效監管雲應用與雲計算環境的運行狀態,自動發現並處理資源配置風險,本書提出瞭如圖4-15所示的雲應用運行期管理系統模型。該模型分為應用層風險分析子系統和環境層管理子系統,兩個子系統通過消息通信來交換監控指標數據集和風險處理任務。

image.png

圖4-15  雲應用運行期管理系統模型

環境層管理子系統包含的關鍵組件如下。

環境監視器:部署在雲計算環境中的環境管理節點(可以是物理服務器或虛擬服務器),定期採集環境中各資源(物理主機、虛擬主機、網絡、操作系統等)運行期的監控指標並將指標數據保存在雲環境知識庫中,以便供應用處理器查詢。

環境控制器:部署在雲計算環境中的環境管理節點,接收任務處理器發送的環境控制指令(如遷移虛擬機、提高虛擬機CPU的配額、重啟虛擬機等),將指令轉換成可直接執行的程序,並通過接口調用執行動作。

任務處理器:部署在雲計算環境中的環境管理節點,與雲應用中的應用風險分析器通信,向其發送指定資源運行期的指標數據集;接收應用風險分析器發送的環境控制任務。

應用層風險分析子系統包含的關鍵組件如下。

應用監視器:部署在雲應用中,定期採集雲應用中各服務運行期的監控指標,並將指標數據保存在雲應用知識庫中,供應用風險分析器查詢。

應用知識庫:部署在雲應用中,存儲應用監視器定期採集的指標數據。

應用風險分析器:部署在雲應用中,負責維護雲應用運行期監控指標的關聯推理模型,定期讀取雲應用知識庫中的監控指標數據集和環境層管理子系統從雲應用運行支撐的雲環境中採集的監控指標數據集,以便更新模型屬性;定期執行告警判斷策略,並在告警觸發時執行風險自動處理,推理任務執行策略,然後向環境層管理子系統中的任務處理器發送任務。應用風險分析器由如圖4-16所示的三個核心模塊組成。

image.png

圖4-16  應用風險分析器的組成

概率推理模型生成模塊:通過分析定期採集的包含虛擬設備指標歷史數據及服務質量指標歷史數據的歷史數據集,生成基於貝葉斯網絡的概率推理模型。

虛擬設備重置請求推理模塊:部署在雲應用中,存儲應用監視器定期採集的指標數據;基於服務等級協議中的服務質量目標定義,利用隨機本地搜索算法搜索給定的數學模型,查找資源超配與資源不足概率最大的虛擬節點及虛擬鏈路,同時通過計算找到各虛擬節點及虛擬鏈路需要追加或釋放的資源量。

虛擬設備重配置請求處理模塊:基於推理結果對指定虛擬設備進行重配置。

本章小結


應用智能運維繫統能夠在降低應用運維繫統日常工作壓力的同時,賦予運維人員、應用開發人員在發現、處理更復雜的應用系統故障或優化系統性能和穩定性過程中更準確的判斷能力。本章深入淺出地介紹了一些常用的應用智能運維技術與實踐案例,分別從技術原理和技術應用落地的角度做了介紹,希望能為企業規劃應用智能運維繫統的前期技術預研提供參考。


Leave a Reply

Your email address will not be published. Required fields are marked *