智能運(yùn)維在百度日常業(yè)務(wù)監(jiān)控中的探索
原創(chuàng)隨著互聯(lián)網(wǎng)產(chǎn)品規(guī)模的爆發(fā)式增長(zhǎng),大型分布式系統(tǒng)的監(jiān)控復(fù)雜性也日益顯現(xiàn)。工程師們發(fā)現(xiàn):監(jiān)控遺漏導(dǎo)致宕機(jī)的黑天鵝現(xiàn)象頻繁發(fā)生;出現(xiàn)故障時(shí)很難從海量監(jiān)控指標(biāo)中迅速找到故障根因;報(bào)警風(fēng)暴極大地干擾了工程師定位問題的速度;故障恢復(fù)速度基本依賴于工程師的操作速度。由此,我們嘗試建立一個(gè)智能運(yùn)維監(jiān)控系統(tǒng),希望用智能化的手段去幫助工程師解決這些問題。
一、嘉賓介紹
曲顯平 百度運(yùn)維部資深研發(fā)工程師
百度智能運(yùn)維監(jiān)控負(fù)責(zé)人,在運(yùn)維監(jiān)控、大數(shù)據(jù)處理與分析方向有著豐富的經(jīng)驗(yàn)。
二、百度數(shù)據(jù)情況
隨著百度各產(chǎn)品的蓬勃發(fā)展,百度的服務(wù)器數(shù)量也呈現(xiàn)出爆發(fā)式增長(zhǎng),最近5年增長(zhǎng)了大概20倍的規(guī)模。與產(chǎn)品規(guī)模不斷增長(zhǎng)相對(duì)應(yīng)地,運(yùn)維人員每天會(huì)收到越來越多的監(jiān)控報(bào)警,面對(duì)海量的運(yùn)維指標(biāo),如何快速定位問題所發(fā)生的業(yè)務(wù)層面,達(dá)到精準(zhǔn)化報(bào)警、快速解決問題的目標(biāo)就成為運(yùn)維監(jiān)控常態(tài)化的需求。
百度監(jiān)控系統(tǒng)數(shù)據(jù)規(guī)模,單以時(shí)間序列數(shù)據(jù)為例,不包含日志類數(shù)據(jù)。
- 服務(wù)器指標(biāo)數(shù)量:>1億
- 業(yè)務(wù)指標(biāo)數(shù)量:>8千萬
- 數(shù)據(jù)增長(zhǎng)速度:50TB/日
三、運(yùn)維中面臨的監(jiān)控問題
當(dāng)前,面對(duì)復(fù)雜的業(yè)務(wù)監(jiān)控和問題診斷,運(yùn)維人員想找到指標(biāo)和事件之間的關(guān)聯(lián)關(guān)系,進(jìn)行因果關(guān)系推導(dǎo),并最終定位故障,基本依靠人的經(jīng)驗(yàn)來進(jìn)行。但隨著業(yè)務(wù)和監(jiān)控規(guī)模的膨脹,運(yùn)維也希望能夠更加自動(dòng)化、智能化地達(dá)成保證服務(wù)高可用性的目標(biāo),即快速的問題發(fā)現(xiàn)、分析定位或止損。
下面,我們可以從發(fā)現(xiàn)問題—分析問題—解決問題的思路出發(fā),逐步給出遞進(jìn)的解決方案。
四、發(fā)現(xiàn)問題篇:異常自動(dòng)檢測(cè)
日常運(yùn)維的業(yè)務(wù)指標(biāo)數(shù)據(jù)會(huì)出現(xiàn)一些環(huán)比昨日的明顯異常、持續(xù)偏離的明顯問題和隨著時(shí)間周期漂移的指標(biāo)數(shù)據(jù)等問題,以前這些監(jiān)控的配置基本靠工程師經(jīng)驗(yàn)或持續(xù)的迭代修正,甚至純?nèi)斯づ挪?。隨著監(jiān)控系統(tǒng)的發(fā)展,可以通過制定監(jiān)控標(biāo)準(zhǔn)和自動(dòng)化監(jiān)控部署實(shí)現(xiàn)運(yùn)維的標(biāo)準(zhǔn)化和自動(dòng)化,最終的目標(biāo),是希望用智能化的方法徹底解決這個(gè)問題。
一般,在系統(tǒng)出現(xiàn)指標(biāo)數(shù)據(jù)波動(dòng)時(shí),需要先判定是否確實(shí)為異常情況,確定異常后再實(shí)現(xiàn)精準(zhǔn)報(bào)警。那么,怎么自動(dòng)檢測(cè)業(yè)務(wù)的異常指標(biāo),幫助運(yùn)維工程師和開發(fā)工程師處理問題呢?
這里主要有兩個(gè)策略,自動(dòng)恒定閾值設(shè)定與動(dòng)態(tài)閾值設(shè)定:
1.恒定閾值設(shè)定法
對(duì)于普通數(shù)據(jù),運(yùn)維人員在服務(wù)器端設(shè)定服務(wù)器應(yīng)用指標(biāo)超過某合理數(shù)值自動(dòng)報(bào)警,并對(duì)服務(wù)器異常的波動(dòng)狀態(tài)進(jìn)行報(bào)警。這個(gè)可使用一些標(biāo)準(zhǔn)的統(tǒng)計(jì)學(xué)方法去自動(dòng)計(jì)算這個(gè)閾值,取代人工配置成本。
參考方式:
- 基于歷史數(shù)據(jù)統(tǒng)計(jì)
- 假設(shè)正態(tài)分布
- 3-sigma策略
2.動(dòng)態(tài)閾值設(shè)定法
百度大多數(shù)業(yè)務(wù)數(shù)據(jù)的流量呈現(xiàn)很強(qiáng)的天周期特性,在某時(shí)刻出現(xiàn)數(shù)據(jù)波峰的驟降或波谷數(shù)據(jù)的驟增等變動(dòng)情況時(shí),恒定閾值法很難解決這類問題的精準(zhǔn)異常判斷。那么我們可以把上述方法衍變升級(jí)一下,采用動(dòng)態(tài)時(shí)間窗口的閾值設(shè)定法來解決周期性數(shù)據(jù)的異常判斷。
參考方式:
- 多分布形式:將數(shù)據(jù)分段
- 按天同期計(jì)算統(tǒng)計(jì)閾值
- 分段3-sigma策略
#p#
3.恒定閾值和動(dòng)態(tài)閾值的使用
針對(duì)以上兩種閾值劃分方式,異常檢測(cè)系統(tǒng)如何知道應(yīng)該對(duì)每組數(shù)據(jù)進(jìn)行什么樣的異常檢測(cè)策略呢?這就需要一種方法提前對(duì)數(shù)據(jù)進(jìn)行分類,可以采用一種可判斷數(shù)據(jù)是否具有周期性趨勢(shì)的分類器方式來解決。如果數(shù)據(jù)具有很強(qiáng)的周期性特征,建議使用動(dòng)態(tài)閾值設(shè)定法;如果數(shù)據(jù)分析后沒有周期性特征,那么使用恒定閾值就可以了。
另外,我們還會(huì)遇到這種特殊的情況,數(shù)據(jù)會(huì)隨時(shí)間出現(xiàn)漂移。比如某產(chǎn)品流量,會(huì)按照工作日、周末、傳統(tǒng)長(zhǎng)假等時(shí)間呈現(xiàn)出不同的數(shù)據(jù)特征,產(chǎn)生階段性變化。這個(gè)時(shí)候要進(jìn)行異常檢測(cè),就不僅要考慮數(shù)據(jù)的普通周期性,還要考慮季節(jié)性和趨勢(shì)性的變化。監(jiān)控系統(tǒng)可通過對(duì)日常數(shù)據(jù)進(jìn)行分析,采用三次指數(shù)平滑等方法,對(duì)數(shù)據(jù)本身的趨勢(shì)性進(jìn)行學(xué)習(xí)。
當(dāng)然,上述方法都是基于從歷史數(shù)據(jù)進(jìn)行學(xué)習(xí)分析從而進(jìn)行異常檢測(cè)的,如果缺少歷史數(shù)據(jù),那么對(duì)于這些指標(biāo),基于歷史數(shù)據(jù)進(jìn)行同環(huán)比分析的意義就不大,核心就轉(zhuǎn)化為檢測(cè)數(shù)據(jù)有沒有突升和突降異常??刹捎妙愃朴诰植科交姆椒ú榭凑鎸?shí)數(shù)據(jù)與局部平滑后數(shù)據(jù)有沒有大的出入,如果差距較大,可判斷為有大的突升和突降,可以標(biāo)識(shí)數(shù)據(jù)異常。
參考方式:
- 局部平滑法
- 速度法
經(jīng)過經(jīng)驗(yàn)的積累,對(duì)于核心產(chǎn)品的流量變動(dòng),即使波動(dòng)不大,監(jiān)控系統(tǒng)也可以做到靈敏且精準(zhǔn)的指標(biāo)監(jiān)控,能夠快速發(fā)現(xiàn)異常情況。當(dāng)然,全自動(dòng)的異常檢測(cè)系統(tǒng)難免會(huì)出現(xiàn)誤報(bào)、漏報(bào)等情況,這就要求異常檢測(cè)系統(tǒng)需要支持工程師的標(biāo)注與反饋,百度監(jiān)控系統(tǒng)的自學(xué)習(xí)能力可以根據(jù)工程師的需求進(jìn)行動(dòng)態(tài)調(diào)整,可同時(shí)支持人為調(diào)整和系統(tǒng)自動(dòng)參數(shù)學(xué)習(xí)調(diào)整,系統(tǒng)可自動(dòng)根據(jù)工程師的標(biāo)注或報(bào)警量的多少,進(jìn)行參數(shù)訓(xùn)練,把異常檢測(cè)參數(shù)調(diào)整到合理的范圍。
工程師標(biāo)注
- 修改參數(shù)
- 標(biāo)記未檢測(cè)到的異常
- 標(biāo)記錯(cuò)誤的報(bào)警
機(jī)器學(xué)習(xí)
- 標(biāo)注報(bào)警 => 參數(shù)訓(xùn)練
綜合上述方法,百度智能監(jiān)控系統(tǒng)中的自動(dòng)異常檢測(cè)最終形成兩種狀態(tài)的結(jié)合:離線狀態(tài)和在線狀態(tài),離線部分可根據(jù)歷史數(shù)據(jù)進(jìn)行分類學(xué)習(xí)、參數(shù)訓(xùn)練,而在線部分能夠進(jìn)行最終的異常檢測(cè)和報(bào)警。
具體的組成如圖所示:
五、發(fā)現(xiàn)問題篇:精準(zhǔn)報(bào)警
監(jiān)控系統(tǒng)僅僅發(fā)現(xiàn)了問題還不夠,由于指標(biāo)數(shù)量太過繁雜,為了起到輔助工程師快速解決問題的效果,還需要做到精準(zhǔn)化報(bào)警。百度的精準(zhǔn)報(bào)警主要分成兩個(gè)層面,一個(gè)是單個(gè)指標(biāo)的報(bào)警是否足夠精準(zhǔn);這里需要考慮兩個(gè)問題,一是是否每次異常都應(yīng)該報(bào)警?需要容忍系統(tǒng)毛刺的存在;二是異常過濾,把離散的異常點(diǎn)轉(zhuǎn)化為異常事件或狀態(tài),找到指標(biāo)和事件的關(guān)聯(lián)關(guān)系。
在單一指標(biāo)的報(bào)警足夠精準(zhǔn)的基礎(chǔ)上,另一個(gè)是把不同指標(biāo)的報(bào)警結(jié)合起來做到足夠精準(zhǔn)。如何把多個(gè)指標(biāo)的報(bào)警綜合起來呢?簡(jiǎn)單策略是固定時(shí)間窗口來報(bào)警,時(shí)間相近的報(bào)警可進(jìn)行一定的合并,只要將首先出現(xiàn)的指標(biāo)報(bào)警送達(dá)給到運(yùn)維人員即可。從整個(gè)監(jiān)控策略來看,把報(bào)警綜合起來,同類的報(bào)警進(jìn)行合并來報(bào)給運(yùn)維人員。復(fù)雜一些的策略是關(guān)聯(lián)挖掘,把歷史上產(chǎn)生的運(yùn)維報(bào)警和事件關(guān)聯(lián)起來報(bào)警,同時(shí),某些報(bào)警經(jīng)常頻繁地一起出現(xiàn),可以認(rèn)為這是同一個(gè)報(bào)警,不再單獨(dú)分別進(jìn)行報(bào)警。
采用的具體策略有:
1. 報(bào)警合并簡(jiǎn)單策略
- 固定時(shí)間窗口
- 相同監(jiān)控策略
- 相同監(jiān)控對(duì)象
2. 報(bào)警合并復(fù)雜策略
- 關(guān)聯(lián)挖掘
- 合并置信度較高的頻繁項(xiàng)集
3. 報(bào)警依賴
- 策略依賴
- 異常依賴
六、分析問題篇:關(guān)聯(lián)分析
監(jiān)控系統(tǒng)不僅需要幫助工程師發(fā)現(xiàn)問題,同時(shí)還需要通過建立關(guān)聯(lián)分析,進(jìn)行輔助問題定位,甚至迅速找到相關(guān)的指標(biāo)或影響。那么,如何為復(fù)雜多樣的運(yùn)維數(shù)據(jù)建立關(guān)聯(lián)呢?
產(chǎn)品服務(wù)層級(jí)的關(guān)聯(lián)關(guān)系圖:
運(yùn)維工程師可以把一些基礎(chǔ)的關(guān)聯(lián)關(guān)系配置到監(jiān)控系統(tǒng)中,可以讓監(jiān)控系統(tǒng)明白一些常態(tài)化的運(yùn)維指標(biāo)與其它指標(biāo)是否存在關(guān)聯(lián),比如多個(gè)模塊的異常是否存在關(guān)聯(lián)、服務(wù)器升級(jí)或者部署產(chǎn)生問題是否與數(shù)據(jù)中心或交換機(jī)異常有關(guān)等。
具體的實(shí)現(xiàn)策略有:
1.關(guān)聯(lián)挖掘
(1)事件和事件間的關(guān)聯(lián)
- 頻繁項(xiàng)集挖掘
- 所有運(yùn)維事件
(2)事件和時(shí)序間的關(guān)聯(lián)
- 指標(biāo)異常經(jīng)常與部署升級(jí)事件相伴發(fā)生
- 問題診斷&故障定位
(3)多時(shí)序間的關(guān)聯(lián)
#p#
2.關(guān)聯(lián)可視化
通過關(guān)聯(lián)變動(dòng),幫助運(yùn)維人員分析重點(diǎn)數(shù)據(jù)的變動(dòng)情況。
(1)事件&事件關(guān)聯(lián)
(2)事件&時(shí)序關(guān)聯(lián)
3.服務(wù)透視定位問題
運(yùn)維事件多是與時(shí)間持續(xù)緊密關(guān)聯(lián),我們可以把運(yùn)維事件按照時(shí)間軸演進(jìn)順序進(jìn)行展示。同時(shí),運(yùn)維工程師常常接觸的服務(wù)拓?fù)?,本身也是一種運(yùn)維模塊的關(guān)聯(lián)關(guān)系。把這些離散的運(yùn)維數(shù)據(jù)通過模塊關(guān)聯(lián)、時(shí)間關(guān)聯(lián)、數(shù)據(jù)流關(guān)聯(lián)等緊密地聯(lián)系起來,構(gòu)成一個(gè)完整的服務(wù)透視圖,如果異常發(fā)生在關(guān)系透視圖中的某個(gè)部分,就可以按照周邊關(guān)系的通路來快速定位問題。
(1)模塊調(diào)用關(guān)系
(2)事件和模塊關(guān)聯(lián)
六、分析問題篇:故障定位
僅僅找到關(guān)聯(lián)還不夠,真正分析業(yè)務(wù)問題解決問題才是關(guān)鍵。這里介紹兩個(gè)常用的輔助定位問題策略。
1.多維數(shù)據(jù)分析
監(jiān)控系統(tǒng)采集到的很多指標(biāo)具備包含關(guān)系,很多情況下,一個(gè)總體指標(biāo)是由許多子指標(biāo)加和構(gòu)成的,或者也可以說成是總體維度是由許多子維度組成的。監(jiān)控系統(tǒng)可以計(jì)算出每個(gè)子指標(biāo)或子維度占總指標(biāo)總維度的百分比,并按照影響權(quán)重去進(jìn)行分析,當(dāng)某個(gè)子指標(biāo)的變化幅度對(duì)總體指標(biāo)影響權(quán)重***,我們就傾向于認(rèn)為這個(gè)指標(biāo)可能是問題的原因。
舉個(gè)例子,百度的總體流量指標(biāo)對(duì)應(yīng)每個(gè)地域的流量之和,總體流量有問題有可能是某個(gè)地域流量出現(xiàn)問題,找到目前對(duì)總體流量變化影響***的地域進(jìn)行問題處理就可以解決問題。同樣的道理也可以推廣到其它情況。
2.故障診斷樹
運(yùn)維人員可以通過數(shù)據(jù)可視化(熱力圖、多維報(bào)表)的形式,結(jié)合以前發(fā)現(xiàn)問題的經(jīng)驗(yàn)沉淀模式,發(fā)現(xiàn)指標(biāo)間的強(qiáng)相關(guān),做出問題診斷。那我們是不是可以將運(yùn)維人員的經(jīng)驗(yàn)固化到監(jiān)控系統(tǒng)中,通過不同指標(biāo)的分析方向和下探方法可以形成樹狀結(jié)構(gòu),通過樹上的某個(gè)節(jié)點(diǎn)進(jìn)行逐級(jí)探查。最終形成故障診斷樹,通過推導(dǎo)路徑不僅可以幫助運(yùn)維人員快速完成問題出現(xiàn)時(shí)的排查過程,節(jié)省這部分的定位時(shí)間,也很有可能達(dá)到直接定位問題或加速解決故障的目的。
故障檢測(cè):
(1)領(lǐng)域?qū)<抑R(shí)
(2)邏輯推導(dǎo)引擎
(3)迅速找到問題根因
七、解決問題篇
- 監(jiān)控系統(tǒng)產(chǎn)生決策
- 部署調(diào)度系統(tǒng)執(zhí)行
1.單邊故障自動(dòng)止損
單邊故障指單個(gè)IDC故障、單個(gè)鏈路故障等。比如一個(gè)IDC或者某些IDC出現(xiàn)問題,解決辦法是切走這部分流量,利用監(jiān)控系統(tǒng)來做動(dòng)態(tài)的部署調(diào)度。通過某個(gè)數(shù)據(jù)中心或鏈路的部署調(diào)整,幫助系統(tǒng)快速恢復(fù),進(jìn)而實(shí)現(xiàn)自動(dòng)化決策和執(zhí)行來實(shí)現(xiàn)單邊故障止損。
具體策略有:
(1)實(shí)現(xiàn)自動(dòng)冗余與調(diào)度
(2)智能監(jiān)控系統(tǒng)負(fù)責(zé)動(dòng)態(tài)決策
(3)部署調(diào)度系統(tǒng)負(fù)責(zé)調(diào)度執(zhí)行
2.灰度發(fā)布自動(dòng)止損
研發(fā)工程師做灰度發(fā)布時(shí),可以先做小流量的發(fā)布,部署系統(tǒng)可以跟監(jiān)控系統(tǒng)配合,如果出現(xiàn)問題,直接進(jìn)行狀態(tài)終止或回滾,把問題控制在灰度發(fā)布范圍內(nèi)。
八、智能運(yùn)維監(jiān)控總結(jié)
通過上述說明,百度的智能運(yùn)維監(jiān)控系統(tǒng)最終形成了一個(gè)監(jiān)控閉環(huán),包含問題發(fā)現(xiàn)、分析決策和問題的解決。具體的組成包括異常檢測(cè)、報(bào)警收斂、關(guān)聯(lián)分析、故障定位和自動(dòng)處理五部分內(nèi)容。
九、未來運(yùn)維變被動(dòng)為主動(dòng)
1.全方位覆蓋
在用戶端(APP、瀏覽器等)、云端(機(jī)房、服務(wù)器、自身服務(wù)、第三方服務(wù)等)、管道(鏈路、運(yùn)營(yíng)商)等任何維度進(jìn)行數(shù)據(jù)采集并進(jìn)行異常自動(dòng)檢測(cè)。
2. 讓監(jiān)控更聰明
- 分析運(yùn)用已有數(shù)據(jù),并把服務(wù)狀態(tài)、問題影響分析等可視化
- 自動(dòng)學(xué)習(xí)并理解故障的趨勢(shì)和模式
- 自動(dòng)發(fā)現(xiàn)服務(wù)或依賴環(huán)境的變更
當(dāng)然,更進(jìn)一步地,監(jiān)控系統(tǒng)是不是可以先于故障發(fā)生而預(yù)測(cè)到故障,在故障發(fā)生之前就可以處理并解決故障,從而達(dá)成產(chǎn)品的超高可用性目標(biāo)。未來的智能監(jiān)控應(yīng)該是這樣的,運(yùn)維工程師經(jīng)過完善的監(jiān)控部署,實(shí)現(xiàn)全方位的異常自動(dòng)檢測(cè)覆蓋,同時(shí),在系統(tǒng)剛出現(xiàn)故障征兆,有損之前就進(jìn)行處理并解決,實(shí)現(xiàn)完整的智能化監(jiān)控系統(tǒng)解決方案。
歡迎所有對(duì)智能化運(yùn)維技術(shù)感興趣的同學(xué)加入百度運(yùn)維部,一起推動(dòng)智能化運(yùn)維的發(fā)展。
歡迎訪問百度運(yùn)維部博客:http://op.baidu.com