新聞中心
隨著互聯(lián)網產品規(guī)模的爆發(fā)式增長,大型分布式系統(tǒng)的監(jiān)控復雜性也日益顯現。工程師們發(fā)現:監(jiān)控遺漏導致宕機的黑天鵝現象頻繁發(fā)生;出現故障時很難從海量監(jiān)控指標中迅速找到故障根因;報警風暴極大地干擾了工程師定位問題的速度;故障恢復速度基本依賴于工程師的操作速度。由此,我們嘗試建立一個智能運維監(jiān)控系統(tǒng),希望用智能化的手段去幫助工程師解決這些問題。

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


咨詢
建站咨詢
