百度云曲顯平:AIOps時代下如何用運維數(shù)據(jù)系統(tǒng)性地解決運維問題?
百度云智能運維負(fù)責(zé)人 曲顯平
本文是根據(jù)百度云智能運維負(fù)責(zé)人曲顯平10月20日在msup攜手魅族、Flyme、百度云主辦的第十三期魅族技術(shù)開放日《百度云智能運維實踐》演講中的分享內(nèi)容整理而成。
內(nèi)容簡介:本文主要從百度運維技術(shù)的發(fā)展歷程、如何做智能運維、故障管理場景、服務(wù)咨詢場景和面對的挑戰(zhàn)等幾個方面介紹了百度云智能運維實踐。
百度運維技術(shù)的三個階段
***階段:基礎(chǔ)運維平臺 2008年~2012年
2008年,在百度運維部建立之前,還沒有一個標(biāo)準(zhǔn)而統(tǒng)一的運維平臺。例如,搜索、廣告、貼吧都有各自的運維平臺。
存在的問題:
技術(shù)和平臺能力無法復(fù)用,業(yè)務(wù)之間需要交互時比較復(fù)雜。
解決方法:
①為幫助業(yè)務(wù)解決問題,我們把各個分散在不同業(yè)務(wù)的運維平臺整合起來做成一套標(biāo)準(zhǔn)化運維平臺;
②有了統(tǒng)一運維平臺后,運維部門內(nèi)的角色就分為了兩個,即標(biāo)準(zhǔn)的運維工程師和運維平臺研發(fā)工程師。
第二階段:開放的運維平臺 2012年~2014年
***階段仍然存在的問題:
①個性化需求很多,統(tǒng)一平臺很難全部解決
②PaaS出現(xiàn)之后,運維平臺和PaaS的關(guān)系
解決方法:
①開放運維平臺,即全部API化。
②通過提供標(biāo)準(zhǔn)化的監(jiān)控數(shù)據(jù)的采集、計算、報警能力,最基礎(chǔ)的程序分發(fā)、數(shù)據(jù)分發(fā)、任務(wù)調(diào)度能力,解決自身平臺的需求。
③利用PaaS方法,把一些研發(fā)的技術(shù)平臺和運維技術(shù)平臺整合在一起,解決重復(fù)造輪子的問題。
第三階段:AIOps階段 2014年開始
百度從2014年就開始了智能運維的實踐。最早的時候,我們更多是通過完善底層的大數(shù)據(jù)平臺能力,提供一些數(shù)據(jù)分析和挖掘的算法和工具,解決運維數(shù)據(jù)沒有得到合理運用,運維人工效率低等問題,這是偏大數(shù)據(jù)的方法。
百度對于AIOps的理解
在2015年,AI變得異常火熱,百度也是想將自身先進(jìn)的機器學(xué)習(xí)算法應(yīng)用到運維領(lǐng)域之中,于是我們和百度的大數(shù)據(jù)實驗室、深度學(xué)習(xí)實驗室進(jìn)行了合作。運維研究人員把需求和歸整好的數(shù)據(jù)提交給實驗室的人員,然后他們會根據(jù)數(shù)據(jù)訓(xùn)練模型,最終提供一些庫和方法供業(yè)務(wù)使用。2016年,Gartner提出了AIOps這個詞,也就是我們說的智能運維,這和百度的實踐是不謀而合的。
三個核心內(nèi)容
隨著智能運維的發(fā)展,百度也是把數(shù)據(jù)、工程和策略三個,作為最核心內(nèi)容來系統(tǒng)地解決運維行業(yè)的應(yīng)用。從數(shù)據(jù)角度來講,首先要構(gòu)建一個完整的數(shù)據(jù)倉庫,接著要建設(shè)運維知識庫。知識庫是在數(shù)據(jù)倉庫上抽象進(jìn)行的。從工程角度,一方面,分析數(shù)據(jù)和訓(xùn)練算法模型需要大數(shù)據(jù)平臺和框架,另一方面,運維業(yè)務(wù)研發(fā)人員還做了一套運維工程研發(fā)框架,用以解決標(biāo)準(zhǔn)化、可擴展和復(fù)用的問題。這個框架十月份剛剛開源,感興趣的朋友可以看下。
在百度內(nèi)部,一致的運維“語言”非常關(guān)鍵。我們要統(tǒng)一不同的工具和平臺,形成一致的運維模式。所以不管是故障感知、故障診斷決策、彈性伸縮決策還是運維操作和執(zhí)行,只有統(tǒng)一起來才能解決這個問題。一致不僅是數(shù)據(jù)一致、工程一致,還需要策略本身的一致性。
自動駕駛分級
在構(gòu)建整個百度智能運維體系的過程中,我們重點參考了自動駕駛里的分級理論。百度是有這樣兩個部門的,一個叫L3,一個叫L4。L3部門重點在做類似于輔助駕駛或者高度輔助駕駛;L4部門做的是高度完全自動駕駛。下圖是關(guān)于自動駕駛的分級。
運維能力分級
自動化運維能力分級
當(dāng)時我們團隊參照這個自動駕駛分級,構(gòu)建出了一個自動化運維能力的分級標(biāo)準(zhǔn),用以評估我們各個方向的自動化水平,一共分為六個能力等級,即人工、工具輔助、部分自動化、有條件的自動化、高速自動化和完全自動化。
關(guān)鍵點:決策規(guī)劃由運維系統(tǒng)做出,而不是人
人負(fù)責(zé):制定優(yōu)化目標(biāo)(比如,可用性、效率、成本等)
運維系統(tǒng)負(fù)責(zé):根據(jù)其對待處理的需求、待解決的問題的理解,以及對運維對象的認(rèn)知(經(jīng)驗),自主做出解決方案(規(guī)劃)并在控制執(zhí)行過程中根據(jù)目標(biāo)和運維對象的狀態(tài)反饋來適時調(diào)整執(zhí)行規(guī)劃。
智能化運維能力分級
在自動化能力分級之中,我們還細(xì)化出了一個智能化運維能力分級(我們始終認(rèn)為智能運維是實現(xiàn)完全自動化運維的一種手段)。實現(xiàn)智能化能力,重點解決的是在運維感知和決策過程中,人工效率低和準(zhǔn)確率不足的問題。
關(guān)鍵點:決策規(guī)劃由運維系統(tǒng)做出,而不是人
人負(fù)責(zé):制定優(yōu)化目標(biāo)(比如,可用性、效率、成本等)
運維系統(tǒng)負(fù)責(zé):根據(jù)其對待處理的需求、待解決的問題的理解,以及對運維對象的認(rèn)知(經(jīng)驗),自主做出解決方案(規(guī)劃)并在控制執(zhí)行過程中根據(jù)目標(biāo)和運維對象的狀態(tài)反饋來適時調(diào)整執(zhí)行規(guī)劃。
如何做運維
我們希望每一個運維工具都像一個小型的運維機器人一樣,解決運維的問題。運維工程師需要把每一個運維工具抽象化,同時也要像一個標(biāo)準(zhǔn)框架一樣,可以在代碼庫里克隆,把框架代碼復(fù)制下來。通過三個基本核心,感知、決策和執(zhí)行來進(jìn)行編寫執(zhí)行器,接著可以通過配置實現(xiàn)一些具體任務(wù)調(diào)度的配置或者并發(fā)執(zhí)行的配置;每一個運維工程師要實現(xiàn)感知邏輯、決策邏輯、執(zhí)行邏輯,利用運維核心解決可靠性的問題。在測試方面,要在線下建立看代碼的邏輯去驗證。結(jié)合這個看代碼,把比較核心的運維故障抽象出來,再把一些常見的故障模擬出來,具體的情況可以在這里面運行;寫完一個運維工具或者算法,需要直接在上面運行,從而檢測出是否有效。
故障處理場景
百度內(nèi)部如何解決故障處理場景
故障處理場景一般分四個主要階段:故障發(fā)現(xiàn)、服務(wù)止損、服務(wù)恢復(fù)、故障總結(jié)。
在服務(wù)止損方面,核心是如何讓用戶感知不到這個故障,對于運維來講,更多用的方法是隔離、降級,而非從代碼BUG入手解決的問題。
在服務(wù)恢復(fù)方面,這個一般是在服務(wù)止損或者說故障被隔離之后,很大程度上需要運維和研發(fā)共同合作,比如定位代碼的BUG,最終要決定如何把線上的問題真正解決掉。恢復(fù),更多用的是修復(fù)來解決。在百度,大多數(shù)的故障都是可以用隔離和降級解決的,只有那些極特殊的case,才會通過程序回滾來恢復(fù)。回滾風(fēng)險很大,而且效率很低。
在整個解決故障處理場景的階段,每一個階段都可以結(jié)合智能運維的方法。從開始服務(wù)部署、監(jiān)控添加、故障發(fā)現(xiàn)、止損決策、止損操作、根因診斷、恢復(fù)操作,***報告自動生成。
把AIOps應(yīng)用到故障處理最核心的基礎(chǔ)是,全面覆蓋監(jiān)控。在百度,做的最全面的是云上的監(jiān)控,所以包含這四個維度的監(jiān)控:系統(tǒng)監(jiān)控、業(yè)務(wù)監(jiān)控、內(nèi)網(wǎng)監(jiān)控和外網(wǎng)監(jiān)控。
系統(tǒng)監(jiān)控主要的監(jiān)控對象是機器/容器和服務(wù)的動態(tài)內(nèi)容;業(yè)務(wù)監(jiān)控針對業(yè)務(wù)和用戶的訪問日志等;內(nèi)網(wǎng)監(jiān)控則針對IDC內(nèi)網(wǎng)設(shè)備和內(nèi)網(wǎng)鏈路;外網(wǎng)監(jiān)控為了保障用戶、運營商鏈路到百度IDC中間的狀態(tài)。
有了全面的監(jiān)控之后,才能開始現(xiàn)在業(yè)界常提到的一個智能運維技術(shù),自動異常檢測。
典型的異常檢測場景
有關(guān)異常檢測場景,我為大家舉三個典型的例子,***個,周期波動的數(shù)據(jù)。

上圖中的藍(lán)、綠、黃三條線分別代表著今天、昨天、上周的時間線,藍(lán)線比較明顯,后面還有綠線和黃線。它們相對來說周期性體現(xiàn)得特別強。這種數(shù)據(jù)很難用傳統(tǒng)的計算方法設(shè)置閾值。針對這種場景,我們會使用不同類的算法,專門解決這種問題。
第二個,關(guān)心突變的數(shù)據(jù)。

突變的數(shù)據(jù)也是一個比較典型的場景,周期性數(shù)據(jù)更多參考的是天級和周級的數(shù)據(jù),而這個場景更多說的是某一個細(xì)節(jié)層面,可以理解為它是對一小塊數(shù)據(jù)的放大。
第三個,關(guān)心是否超出了一定波動范圍的數(shù)據(jù)。

這種場景是我們用普通的監(jiān)控方法很難覆蓋的,很多情況下,其均值或基線不會有特別明顯的變化,但系統(tǒng)現(xiàn)在確實出現(xiàn)了很大的不同狀態(tài),可能僅僅是波動更劇烈了,對于這類場景,我們更多的是去看波動的情況,就是除基線以外的一些特征。
今年八月份,百度云開源了一個數(shù)據(jù)標(biāo)注的工具-Curve 。我們始終覺得算法雖然很重要,但遠(yuǎn)沒有數(shù)據(jù)本身重要。做機器學(xué)習(xí)時,數(shù)據(jù)的建設(shè)才是最需要花時間解決的問題,百度的運維工程師也是重點在解決數(shù)據(jù)標(biāo)準(zhǔn)和數(shù)據(jù)獲取的問題。
如何應(yīng)對報警風(fēng)暴
當(dāng)出現(xiàn)大規(guī)模報警時,手機可能會直接被打爆。異常檢測重點解決的是故障感知的問題。當(dāng)故障被感知后,需要通知給運維工程師。首先,做逐級通告,對報警進(jìn)行分級。接著做數(shù)據(jù)的整理,整理出每一個數(shù)據(jù),***抽象化數(shù)據(jù)的特征,按照每個維度或特征進(jìn)行報警的歸并。

完成前兩步之后,報警會有一定改善。***要用數(shù)據(jù)分析方法或者機器學(xué)習(xí)的方法處理。數(shù)據(jù)的特征已經(jīng)被抽象化,所以有很多方法可以解決,***種方法是傳統(tǒng)數(shù)據(jù)挖掘,比如關(guān)聯(lián)分析,頻繁項集挖掘是最被廣泛使用到的方法,它可以有效將同類報警進(jìn)行合并。第二種方法是機器學(xué)習(xí),因為前面抽象出了特征,那做分類聚類都是比較直接的事情。從我們的實踐情況看,***的效果兩者相差不大,大家都可以嘗試。
報警產(chǎn)生后,就相當(dāng)于感知階段結(jié)束,之后就到達(dá)故障處理階段。接下來,我分享幾個百度內(nèi)部覺得效果***的處理方法。
***個方法,多維度定位。這個更多偏業(yè)務(wù)問題的定位。業(yè)務(wù)都有訪問日志,日志由各個不同維度的數(shù)據(jù)組成。一個故障的出現(xiàn)可能有不同維度,運維工程師需要通過訪問日志的數(shù)據(jù)進(jìn)行計算分析,分析出真正影響故障的維度。

在這個基礎(chǔ)上,可以做可視化。這是一類結(jié)合業(yè)務(wù)特征的可視化方法,如上圖,這是一個模塊拓?fù)鋱D,很多圈圈,很多研發(fā),這里有健康度、響應(yīng)時間等等各種維度的展示。像模塊響應(yīng)時間,又可能會分很多類、很多維度或者很多模塊,底下是每一個不同的模塊,都可能產(chǎn)生對應(yīng)的一些情況。
接下來,百度現(xiàn)在大部分在用的是基于信息熵的維度特征推薦。例如,一個出現(xiàn)故障問題的指標(biāo),大的流量下降,可能有不同的維度。運維工程師會對每一個維度里的子維度數(shù)據(jù)進(jìn)行分析,分析下降的程度,以及對于現(xiàn)在整個流量總體的下降程度的不同占比,然后做一個排序,就可以得到故障影響較高的某幾個維度,從而幫助工程師盡快定位到這個問題或者縮小問題的范圍。
第二個方法,基于服務(wù)拓?fù)浠蛘叻?wù)關(guān)聯(lián)做定位。這是內(nèi)部比較重要的故障判斷基礎(chǔ)和指導(dǎo)意見。百度運維傾向于把一個問題的分析分成六個維度:
①時間維度,縮小時間范圍;
②網(wǎng)絡(luò)拓?fù)淠P停s小空間范圍,區(qū)分整體和局部故障;
③服務(wù)管理模型,推導(dǎo)異常集群、實例或者機器;
④變更關(guān)聯(lián)模型,定位程序、配置、數(shù)據(jù)、運營活動上線;
⑤模塊關(guān)聯(lián)模型,上下游關(guān)聯(lián)服務(wù)的異常傳播鏈;
⑥多維度模型,維度關(guān)聯(lián)層級分析,縮小業(yè)務(wù)范圍。
上圖是一類典型的故障診斷框架。我們可能有很多故障的分類,比如有網(wǎng)絡(luò)故障,細(xì)分一點是有交換機故障、鏈路故障,可能有系統(tǒng)故障,業(yè)務(wù)問題、操作問題等各種各樣的,都是屬于假說生成,可能都是備選故障問題。中間有一個證據(jù)評分,相當(dāng)于基于前面的模型拓?fù)潢P(guān)系,對不同的故障做評分,把拓?fù)潢P(guān)系的線做權(quán)重,然后做置信計算和排序,***給出***決策判斷。
有關(guān)自愈的問題
- 故障自愈
通過自動化、智能化處理故障節(jié)省人力投入,通過預(yù)設(shè)定的處理流程和只能化判斷策略,提高故障處理可靠性,同時降低故障時間,為業(yè)務(wù)可用性保駕護航。
- 智能自愈
①感知:通過監(jiān)控系統(tǒng)獲取業(yè)務(wù)運行指標(biāo)、智能異常檢測、網(wǎng)絡(luò)異常事件多種觸發(fā)方式
②決策:根據(jù)不同感知方式可以配置不同決策模型
③執(zhí)行:在單機執(zhí)行基礎(chǔ)上,提供集群級別、分布式的處理方式
在執(zhí)行故障自愈過程中,并不止是一個工具的執(zhí)行,而是包括了調(diào)度、伸縮、隔離預(yù)案處理甚至多個不同業(yè)務(wù)的聯(lián)動。自愈本身的核心并非自動化過程,更多是決策的過程。
舉一個典型案例叫單機房故障自愈。單機房,不僅僅指機房網(wǎng)絡(luò)故障,更多指的是故障范圍只要限定在一個IDC內(nèi)部,不管這個故障是代碼BUG,還是外面流量接入出了問題,還是機房整個掉電,只要故障范圍是在一個IDC內(nèi)都可以解決。

基礎(chǔ)能力達(dá)標(biāo)后,我們要設(shè)計一個故障自愈系統(tǒng),核心部分是外網(wǎng)流量調(diào)度止損決策器和內(nèi)網(wǎng)流量調(diào)度止損決策器。外網(wǎng)比較簡單,而內(nèi)網(wǎng)則涉及到一些負(fù)載均衡策略、彈性伸縮策略、主備切換策略等。
盲測驗收
***講一下盲測驗收。有了故障自愈的系統(tǒng)后,怎么證明你的方案好用呢?在不通知業(yè)務(wù)的情況下,我們會和IDC同事進(jìn)行配合,拔網(wǎng)線或是制造網(wǎng)絡(luò)擁塞,這時候才能進(jìn)行完整的切換,從而可以證明基礎(chǔ)能力是否達(dá)標(biāo)。
百度現(xiàn)在單機房故障自愈已經(jīng)覆蓋了所有核心業(yè)務(wù)線,自愈時效控制在5分鐘內(nèi),并且對于非數(shù)據(jù)庫依賴的業(yè)務(wù),可以做到1-2分鐘完成機房級自愈。
咨詢服務(wù)場景
服務(wù)咨詢的場景可分為以下三種:
①通過聊天窗口(IM軟件、瀏覽器等)實時查詢業(yè)務(wù)狀態(tài),用戶可視化、可追查各種問題;
②通過聊天窗口(IM軟件、瀏覽器等)實時觸發(fā)運維操作,運維工程師可遠(yuǎn)程上線、啟停任務(wù)等;
③當(dāng)運維操作完成,出現(xiàn)狀態(tài)變化或異常等情況時,運維工程師可主動發(fā)送相關(guān)通知,或按照策略自動進(jìn)行后續(xù)操作。
在百度內(nèi)部,我們將這種場景稱為ChatOps:
- “放心”:分級發(fā)布和可用性干預(yù)、保障
- “貼心”:監(jiān)控、部署一站式集成,信息主動推送和確認(rèn)
- “省心”:高度自動化,減少人工介入和等待
- “開心”:助力業(yè)務(wù)發(fā)展,如迭代效率提升
- 將運維人員從日漸瑣碎、枯燥、疲憊、低價值、高事故率的工作中解放出來
- 實現(xiàn)運維人員的轉(zhuǎn)型和增值
AIOps的挑戰(zhàn)
***說一下AIOps的挑戰(zhàn)。現(xiàn)有的AIOps技術(shù),比如指標(biāo)異常檢測、故障自愈等,更多解決的是數(shù)據(jù)本身的特征和問題,還沒抽象到服務(wù)、程序本身的特征這個層次上,也就是說,我們并沒有真正地了解和解決問題本身。比如,不同類的服務(wù)所產(chǎn)生的故障和表征是不一樣的,我們希望讓數(shù)據(jù)更多、業(yè)務(wù)場景可擴展,而非針對幾個橫向的場景;在業(yè)務(wù)運營方面,我們不僅僅局限在IDC、操作系統(tǒng)、機器,而是注重資源和性能優(yōu)化,運維還可以繼續(xù)拓展。對內(nèi),可以做系統(tǒng)優(yōu)化、成本優(yōu)化;對外,幫助所有用戶做云服務(wù)資源池優(yōu)化,讓大家更好的節(jié)約成本,提升服務(wù)能力。
以上內(nèi)容來自曲顯平老師的分享。





















