智能運(yùn)維(AIOps)實(shí)戰(zhàn)
洞察與觀點(diǎn) 2022.06.17

 

智能運(yùn)維(AIOps)實(shí)戰(zhàn)

王肇剛(梓弋)阿里云高級(jí)技術(shù)專家

 

 摘要:業(yè)務(wù)通過產(chǎn)品技術(shù)發(fā)揮價(jià)值的一個(gè)必要條件就是可以在線上穩(wěn)定持續(xù)的運(yùn)行,這一直是運(yùn)維人員的終極目標(biāo)。相信大家在使用天貓、淘寶、支付寶時(shí)幾乎沒有遇到過無法使用的情況,阿里是如何做到的呢?AIOps又是什么?本文主要關(guān)注線上業(yè)務(wù)的研發(fā)和運(yùn)維流程,由阿里云高級(jí)技術(shù)專家向大家介紹如何將機(jī)器學(xué)習(xí)算法引入運(yùn)維中的監(jiān)控和故障分析領(lǐng)域,探索智能運(yùn)維解決方案。

 

 本文將圍繞一下幾個(gè)方面進(jìn)行介紹:

一.阿里巴巴故障治理業(yè)務(wù)流程及挑戰(zhàn)

二.智能運(yùn)維實(shí)戰(zhàn)

三.AIOps智能運(yùn)維解決方案

 

本文主要關(guān)注線上業(yè)務(wù)的研發(fā)和運(yùn)維流程,如今有很多工具可以幫助大家研發(fā)協(xié)同和部署,但業(yè)務(wù)通過產(chǎn)品技術(shù)發(fā)揮價(jià)值的一個(gè)必要條件就是可以在線上穩(wěn)定持續(xù)的運(yùn)行。如果業(yè)務(wù)運(yùn)行出現(xiàn)故障,業(yè)務(wù)價(jià)值將無法得到保障和發(fā)揮。相信大家在使用天貓、淘寶、支付寶時(shí)幾乎沒有遇到過無法使用的情況,這有兩個(gè)原因:一是阿里的系統(tǒng)穩(wěn)定性非常好,二是一些局部故障在用戶感知之前已經(jīng)由內(nèi)部的監(jiān)控系統(tǒng)發(fā)現(xiàn)并解決了。大家一定熟知DevOps一詞,而本文標(biāo)題中的AIOps則是DevOps未來發(fā)展的一個(gè)趨勢(shì)。AIOps將機(jī)器學(xué)習(xí)算法引入了運(yùn)維中的監(jiān)控和故障分析領(lǐng)域,探索更有效穩(wěn)定的線上運(yùn)行效果。

 

一.阿里巴巴故障治理業(yè)務(wù)流程及挑戰(zhàn)

1. 面臨的挑戰(zhàn)

首先雙十一極具震撼力的數(shù)字給阿里帶了了巨大的穩(wěn)定性挑戰(zhàn)。

 


 

但更大的挑戰(zhàn)來自于日常阿里業(yè)務(wù)的多樣和復(fù)雜。首先,阿里業(yè)務(wù)數(shù)量巨大,包括2萬多名技術(shù)工程師,50+ BU,40000+ 應(yīng)用程序。其次,業(yè)務(wù)形態(tài)差異較大。隨著阿里經(jīng)濟(jì)體的壯大,出現(xiàn)了許多與傳統(tǒng)電商、金融、云計(jì)算等不一樣的業(yè)務(wù)形態(tài),例如優(yōu)酷是文娛,釘釘是社交,還有阿里體育、阿里健康等更多新的業(yè)務(wù)。業(yè)務(wù)形態(tài)的差異會(huì)導(dǎo)致用戶行為的多樣性。并且阿里國(guó)際化業(yè)務(wù)例如LAZADA、速賣通AE等,也為監(jiān)控系統(tǒng)帶來了許多挑戰(zhàn)。最后,業(yè)務(wù)關(guān)聯(lián)復(fù)雜。程序之間需要互相調(diào)用,阿里的幾萬個(gè)程序間的調(diào)用已經(jīng)構(gòu)成了非常復(fù)雜的網(wǎng)絡(luò),這種牽一發(fā)而動(dòng)全局的情況會(huì)給穩(wěn)定性帶來極大的挑戰(zhàn)。并且實(shí)際情況可能更為復(fù)雜,因?yàn)槌藘?nèi)部關(guān)聯(lián),還有外部關(guān)聯(lián)。例如用戶可能習(xí)慣使用淘寶的搜索框?qū)ふ蚁胍?gòu)買的商品,若某日搜索功能出現(xiàn)故障,那么便會(huì)直接導(dǎo)致淘寶交易量降低。這是因?yàn)榇蟛糠钟脩羰峭ㄟ^搜索功能進(jìn)入交易頁(yè),出現(xiàn)故障會(huì)導(dǎo)致用戶找不到其他措施進(jìn)行交易。應(yīng)用程序之間的鏈路復(fù)雜和用戶行為對(duì)業(yè)務(wù)的影響都會(huì)導(dǎo)致業(yè)務(wù)關(guān)聯(lián)復(fù)雜。

 


 

因此,阿里需要一個(gè)對(duì)線上故障進(jìn)行統(tǒng)一治理的機(jī)制。首先,業(yè)務(wù)故障需要統(tǒng)一的發(fā)現(xiàn),然后跨BU故障協(xié)同處理,故障的影響面和根因需要統(tǒng)一收口和推送,最后當(dāng)確定故障后,第一選擇是使用統(tǒng)一的機(jī)制快速恢復(fù),只有無法快速恢復(fù)的故障才會(huì)去分析原因。那么如何在這種復(fù)雜的業(yè)務(wù)流程下實(shí)現(xiàn)統(tǒng)一故障處理機(jī)制呢?

 

 

2. 故障治理業(yè)務(wù)流程

阿里巴巴全局故障治理流程如下所示:

 


 

發(fā)現(xiàn)故障后,需要對(duì)故障進(jìn)行定級(jí)、通告、輔助定位、處理決策、快速恢復(fù)、復(fù)盤,以及為了防止下次故障進(jìn)行的演練。阿里的工程師和更多的內(nèi)部成員共同協(xié)作,通過一個(gè)龐大而完備的平臺(tái)保證該故障處理流程。盡管如此,仍然存在一些人力難以企及的業(yè)務(wù)痛點(diǎn)。例如,傳統(tǒng)的監(jiān)控系統(tǒng)誤報(bào)漏報(bào)較多。因?yàn)闃I(yè)務(wù)飛速的變化,監(jiān)控系統(tǒng)的報(bào)警閾值也會(huì)飛速變化導(dǎo)致監(jiān)控維護(hù)成本較大。發(fā)現(xiàn)故障后需要梳理雜亂的信息才能定位故障。除此之外,還有故障等級(jí)定義差異較大、實(shí)時(shí)決策觸發(fā)切換難以實(shí)現(xiàn)等諸多問題。為了解決這些業(yè)務(wù)痛點(diǎn),阿里引入了智能運(yùn)維AIOps的概念,即將機(jī)器學(xué)習(xí)和一些工程框架引入故障管理流程中。

該故障治理流程的首要目標(biāo)是實(shí)現(xiàn)故障的精準(zhǔn)報(bào)警。由下圖可見,改進(jìn)的效果十分明顯,故障發(fā)現(xiàn)的準(zhǔn)確率從40%提升至80%,故障通告耗時(shí)從5分鐘減少為小于1分鐘,按照該效率一周可以節(jié)約29人時(shí),極大的提升了企業(yè)的效率。根因推薦從依賴人的經(jīng)驗(yàn)改進(jìn)至系統(tǒng)自動(dòng)推薦可疑事件,這為大型故障中的指揮調(diào)度提供了較好的支持。那么該如何真正實(shí)現(xiàn)智能運(yùn)維呢?

 


 

二.智能運(yùn)維實(shí)戰(zhàn)

1. 時(shí)間序列異常檢測(cè)

阿里中有成千甚至上萬個(gè)核心業(yè)務(wù)指標(biāo),例如淘寶的成交量、菜鳥裹裹的包裹量等。如何定義何時(shí)出現(xiàn)問題,這其實(shí)是一個(gè)艱難的行為。因此希望可以將業(yè)務(wù)上的一個(gè)問題通過監(jiān)控轉(zhuǎn)化為一個(gè)技術(shù)問題。這里需要澄清的一點(diǎn)是,大家經(jīng)常需要監(jiān)控的一些指標(biāo),例如集群的CPU利用率、網(wǎng)絡(luò)流量或者應(yīng)用程序的response time等,都是系統(tǒng)和應(yīng)用層面的監(jiān)控,不是業(yè)務(wù)層監(jiān)控。有時(shí)系統(tǒng)應(yīng)用出現(xiàn)問題時(shí)業(yè)務(wù)有可能并不受其影響,例如高可用集群的異地容災(zāi)切換保證中,局部集群掛掉可能用戶使用并不會(huì)出現(xiàn)問題,但另一角度看,可能系統(tǒng)任何問題都沒有出現(xiàn)但是業(yè)務(wù)受到影響,例如運(yùn)營(yíng)商的骨干網(wǎng)出現(xiàn)問題,這種情況下仍然需要采取措施來防止流量下降。因此監(jiān)控的目標(biāo)需要直達(dá)業(yè)務(wù)結(jié)果,業(yè)務(wù)量下跌即為出現(xiàn)故障,雖然故障可能不是由于系統(tǒng)本身引起,但仍需要發(fā)現(xiàn)并定位該故障。如此將一個(gè)對(duì)業(yè)務(wù)的監(jiān)控通過以下流程進(jìn)行轉(zhuǎn)換,首先對(duì)故障進(jìn)行等級(jí)定義,對(duì)時(shí)間序列的業(yè)務(wù)指標(biāo)監(jiān)控,定位異常點(diǎn),做出故障通告。

 

 

但在實(shí)現(xiàn)以上流程中,出現(xiàn)了兩大難點(diǎn)。一是無法確定基線。如果判定下跌一定的數(shù)值為出現(xiàn)故障,那么下跌的數(shù)值該是和什么相比較呢?尤其是高靈敏度的監(jiān)控基線確定更加艱難。因?yàn)闃I(yè)務(wù)影響因素眾多,受到人的影響尤為明顯。如下圖中所示,圖中每個(gè)周期為一天,每天不完全相同,有不同的毛刺和尖刺,由于一些業(yè)務(wù)變化和營(yíng)銷因素的影響,曲線并不是完全的上揚(yáng)和下跌,而是有一定的起伏,此時(shí)簡(jiǎn)單的一條橫線或者分段的靜態(tài)閾值已經(jīng)無法應(yīng)對(duì)業(yè)務(wù)局部的趨勢(shì)變化。同比和環(huán)比也同樣無法應(yīng)對(duì)業(yè)務(wù)整體的起伏趨勢(shì)。

 

 

難點(diǎn)二為假設(shè)設(shè)定了某個(gè)基線,如何判定異常。業(yè)務(wù)異常的判定尺度眾多,包括曲線本身波動(dòng)程度、曲線宏觀業(yè)務(wù)量、時(shí)間點(diǎn)、業(yè)務(wù)特性等。當(dāng)然也可以不考慮這些因素,那么一天的100條報(bào)警中可能65-70條都為誤報(bào)。

 


 

接下來就借助機(jī)器學(xué)習(xí)來解決該問題。這里可以有兩種途徑供選擇,各有優(yōu)劣。途徑一是通過端到端分類,不計(jì)算基線直接判斷異常;途徑二通過回歸擬合基線判斷異常。阿里采用的是途徑二,對(duì)業(yè)務(wù)更可控,擬合出的基線對(duì)能否準(zhǔn)確的判定異常至關(guān)重要。途徑二可以通過基于時(shí)間序列分解或者機(jī)器學(xué)習(xí)/深度學(xué)習(xí)實(shí)現(xiàn)。阿里業(yè)務(wù)中,通過基于時(shí)間序列分解來進(jìn)行擬合回歸,機(jī)器學(xué)習(xí)/深度學(xué)習(xí)來解決判斷異常。

 


 

整體算法框架如下圖所示。首先對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,包括差值補(bǔ)缺和平滑去噪。然后基于優(yōu)化后的時(shí)間序列分解Seanonal Trend LOESS方法進(jìn)行基線擬合,滑動(dòng)平均使曲線平滑。然后結(jié)合時(shí)間序列分析、機(jī)器學(xué)習(xí)以及特征工程中的各種方法,判斷一個(gè)時(shí)間片段是否需要報(bào)警。開始設(shè)計(jì)時(shí)并未確定該算法應(yīng)采取哪些方法,而是被阿里巴巴各行業(yè)的業(yè)務(wù)、形態(tài)各異的數(shù)據(jù)以及判斷標(biāo)準(zhǔn)訓(xùn)練出來的。它的優(yōu)勢(shì)在于對(duì)各行業(yè)的數(shù)據(jù)有較高的適配性,對(duì)非技術(shù)性的曲線波動(dòng)有較強(qiáng)的抗干擾能力。此外,該算法會(huì)輸出擬合的基線,并且內(nèi)部系統(tǒng)中可以通過該基線提前100分鐘預(yù)測(cè)趨勢(shì),當(dāng)然距離越近的預(yù)測(cè)越準(zhǔn)確,預(yù)測(cè)時(shí)會(huì)將歷史波動(dòng)和局部變化趨勢(shì)都考慮在內(nèi),每個(gè)瞬間都會(huì)判斷這個(gè)時(shí)刻是否需要報(bào)警。出現(xiàn)報(bào)警后,可以回溯到該報(bào)警的開始時(shí)間和結(jié)束時(shí)間,由此達(dá)到整體的報(bào)警功能。

 


 

該算法達(dá)到的效果十分明顯,故障發(fā)現(xiàn)準(zhǔn)確率由40%提升至80%,故障發(fā)現(xiàn)召回率從30%提升至80%,每周因誤報(bào)而花費(fèi)的流程操作時(shí)間下降了29小時(shí)。

 


 

2. 智能根因推薦

發(fā)現(xiàn)故障后若無法快速切換恢復(fù)正常運(yùn)行則需要深入分析原因。但是在智能根因推薦中也存在眾多難點(diǎn)。首先,故障分析定位的范圍及邊界難以確定。例如,是否需要定位到bug存在于哪段代碼,發(fā)布的哪個(gè)版本,但這個(gè)定位范圍并不是這里需要的。這里的邊界是阿里自定義后的邊界。確定邊界后,需要通過日志、監(jiān)控、報(bào)警信息及一些集群圖表來收集故障定位信息。然后進(jìn)行定位判斷和邏輯決策,判斷哪些是出現(xiàn)該問題最可疑的部分并且提出解決策略。在IT行業(yè)的技術(shù)棧架構(gòu)下,阿里的應(yīng)用程序及業(yè)務(wù)是依靠下圖所示的技術(shù)基礎(chǔ)設(shè)施分層搭建出的。

 


 

這個(gè)框架從一個(gè)業(yè)務(wù)故障出發(fā),從中找出可能導(dǎo)致該故障的應(yīng)用、中間件或數(shù)據(jù)庫(kù)。那么bug具體在哪段代碼中并不是這個(gè)框架關(guān)注的重點(diǎn)。但是這已經(jīng)可以幫助大家解決兩個(gè)問題,一是快速了解該問題的影響面,二是快速鎖定問題范圍。這對(duì)業(yè)務(wù)非常復(fù)雜的一些大型企業(yè)來說有非常重要的優(yōu)勢(shì)和價(jià)值。在實(shí)現(xiàn)這個(gè)框架時(shí),主要按照以下流程。首先,通過時(shí)間序列異常檢測(cè)發(fā)現(xiàn)業(yè)務(wù)異常。然后查詢拓?fù)滏溌?,獲取可疑應(yīng)用及相關(guān)上下游應(yīng)用。接著查詢運(yùn)維數(shù)據(jù)倉(cāng)庫(kù),獲取可疑事件。最后根據(jù)故障定位算法,給出可疑程度排序。

 


 

了解故障智能分析流程后,其中仍有一些基礎(chǔ)的細(xì)節(jié)仍需要詳細(xì)介紹,例如運(yùn)維數(shù)據(jù)倉(cāng)庫(kù),數(shù)據(jù)倉(cāng)庫(kù)是指為了解決某一領(lǐng)域的專業(yè)問題將一些在線數(shù)據(jù)作匯聚和整理。但為了故障定位而設(shè)置數(shù)據(jù)倉(cāng)庫(kù),并不只是簡(jiǎn)單的將可能影響線上業(yè)務(wù)穩(wěn)定性的所有數(shù)據(jù)匯聚。這里的數(shù)據(jù)倉(cāng)庫(kù)是希望實(shí)現(xiàn)自動(dòng)檢索與故障相關(guān)的事件。因此,運(yùn)維數(shù)據(jù)倉(cāng)庫(kù)不僅需要匯聚這些數(shù)據(jù),也需要耦合對(duì)這些數(shù)據(jù)的組織關(guān)系,即metadata元數(shù)據(jù),運(yùn)維中特指CMDBConfiguration Management Database)。相信大家會(huì)使用文字的形式記錄每次的故障報(bào)告,但這些文字不可編程也不可檢索,那么運(yùn)維數(shù)據(jù)倉(cāng)庫(kù)便可以幫助大家實(shí)現(xiàn)技術(shù)化的、結(jié)構(gòu)化的故障快照。

 


 

接下來通過一個(gè)案例展示其效果。下圖中,第一個(gè)子圖是阿里巴巴全局業(yè)務(wù)狀態(tài)監(jiān)控。空白處表示無異常,出現(xiàn)異常時(shí)跳出紅色柱狀。此時(shí)便自動(dòng)開展上述故障智能分析,推薦相關(guān)可疑事件,并且展示相關(guān)的應(yīng)用鏈路追蹤。對(duì)某些受眾來說,比起故障原因更關(guān)心這個(gè)故障的影響面,這也會(huì)實(shí)時(shí)展現(xiàn),包括影響的應(yīng)用及其功能點(diǎn)列表。

 


 

三.AIOps智能運(yùn)維解決方案

1. 核心功能

上述內(nèi)容給大家介紹了在故障發(fā)現(xiàn)和原因分析中引入機(jī)器學(xué)習(xí)算法和一些工程框架,這也就是AIOps理念實(shí)際落地的產(chǎn)品。阿里希望可以借助阿里云平臺(tái)孵化AIOps智能運(yùn)維解決方案,將這個(gè)企業(yè)產(chǎn)品賦能給客戶,進(jìn)而共同提升企業(yè)穩(wěn)定性。AIOps智能運(yùn)維解決方案的核心功能有三個(gè)。一是異常檢測(cè)。下圖為客戶實(shí)際測(cè)試得出的一個(gè)例子,通過預(yù)測(cè)來判斷曲線本應(yīng)趨勢(shì)如何,學(xué)習(xí)歷史殘差,避免過于靈敏造成誤報(bào),即存在某些毛刺是視為無異常情況的。一旦發(fā)現(xiàn)明顯的趨勢(shì)偏離,便可以立刻識(shí)別和報(bào)警,并且在持續(xù)偏離的情況下識(shí)別異常區(qū)間抑制重復(fù)報(bào)警。

 


 

第二個(gè)核心功能是基線預(yù)測(cè)??梢酝ㄟ^回歸擬合預(yù)測(cè)距當(dāng)前時(shí)間100分鐘內(nèi)的趨勢(shì),這對(duì)處理業(yè)務(wù)有極大的幫助。如上文所說,該算法通過學(xué)習(xí)和訓(xùn)練各行業(yè)的數(shù)據(jù)得出,因此即使數(shù)據(jù)有較多的毛刺和抖動(dòng),歷史趨勢(shì)完全不同,該框架都能較好的適應(yīng),均方誤差較小。直觀來說,擬合出的紅線一定是大家理想的檢測(cè)業(yè)務(wù)下跌的基準(zhǔn),因此為它命名為智能基線。

 


 

當(dāng)出現(xiàn)故障時(shí),還有另一核心功能為多維分析。數(shù)據(jù)是由分布式系統(tǒng)的日志流式計(jì)算匯集,因此數(shù)據(jù)中會(huì)存在某些字段可以進(jìn)行維度拆解。例如淘寶流量來自于全國(guó)各省市各地區(qū),來自于安卓用戶和IOS用戶,來自于電信或聯(lián)通。那么流量出現(xiàn)故障時(shí)會(huì)自動(dòng)判斷這次的流量下跌主要來自哪個(gè)省市或應(yīng)用商,例如是否來自江蘇省的移動(dòng)用戶中的安卓用戶。這可以幫助運(yùn)維人員快速的鎖定故障對(duì)象。

 


 

2. 典型場(chǎng)景

在各行業(yè)中采集了一些典型場(chǎng)景如下所示:

 


 

圖一中為爬蟲現(xiàn)象,若機(jī)器學(xué)習(xí)到的結(jié)果通常顯示為該現(xiàn)象,那么就認(rèn)為這不是業(yè)務(wù)異常。圖二所示現(xiàn)象是否應(yīng)視為異常如今在阿里內(nèi)部仍沒有定論,對(duì)此可以設(shè)置一些靈敏度選擇,根據(jù)不同情況設(shè)置為不同結(jié)果。圖三所示的周期性探測(cè)中,大多數(shù)業(yè)務(wù)都以天或者星期為周期,但該業(yè)務(wù)更多的與月初月末相關(guān),例如信用卡還款、話費(fèi)流量充值等,因此這種業(yè)務(wù)是日周期、周周期和月周期的疊加。上文中的算法具備自動(dòng)探測(cè)周期的能力。圖四是最經(jīng)典的探測(cè)到交易量的驟然下跌。由此可見,該算法模型可以適配各行業(yè)的業(yè)務(wù)數(shù)據(jù)。對(duì)于底層的系統(tǒng)級(jí)數(shù)據(jù)也有相對(duì)應(yīng)的特定算法。

綜上,阿里的AIOps智能運(yùn)維解決方案有以下三大特點(diǎn):故障探測(cè)、智能調(diào)參、自動(dòng)進(jìn)化。故障探測(cè)中,精準(zhǔn)全面報(bào)警,鮮有誤報(bào)漏報(bào),沒有人工配置成本,所有流程自動(dòng)化學(xué)習(xí)。即使業(yè)務(wù)發(fā)生了巨大的變化,例如阿里的釘釘在這一年中的發(fā)展非常迅速,在三個(gè)月前業(yè)務(wù)量可能處于一個(gè)量級(jí),三個(gè)月后就上升到另一個(gè)量級(jí),該算法也會(huì)在極短的時(shí)間內(nèi)自動(dòng)適應(yīng),不需要人工修改調(diào)整閾值。智能調(diào)參是指根據(jù)趨勢(shì)預(yù)測(cè)的變化自動(dòng)調(diào)節(jié)參數(shù)。自動(dòng)學(xué)習(xí)是指,當(dāng)大家對(duì)是否報(bào)警持有爭(zhēng)議時(shí),可以采取不同靈敏度報(bào)警方案,并且將報(bào)警結(jié)果反饋回算法,那么該算法會(huì)不斷學(xué)習(xí)報(bào)警的尺度,優(yōu)化報(bào)警模型,進(jìn)而提升故障報(bào)警的覆蓋面和準(zhǔn)確性。

 


 

 

本文由云棲志愿小組郭雪整理,編輯百見

分享到微信