— 掃描二維碼 —加入架構集結羣web
對技術感興趣的同窗可進羣(備註:Java)後端
隨着互聯網產品規模的爆發式增加,大型分佈式系統的監控複雜性也日益顯現。工程師們發現:監控遺漏致使宕機的黑天鵝現象頻繁發生;出現故障時很難從海量監控指標中迅速找到故障根因;報警風暴極大地干擾了工程師定位問題的速度;故障恢復速度基本依賴於工程師的操做速度。由此,咱們嘗試創建一個智能運維監控系統,但願用智能化的手段去幫助工程師解決這些問題。瀏覽器
1、嘉賓介紹服務器
曲顯平 百度運維部資深研發工程師微信
百度智能運維監控負責人,在運維監控、大數據處理與分析方向有着豐富的經驗。架構
2、百度數據狀況運維
隨着百度各產品的蓬勃發展,百度的服務器數量也呈現出爆發式增加,最近5年增加了大概20倍的規模。與產品規模不斷增加相對應地,運維人員天天會收到愈來愈多的監控報警,面對海量的運維指標,如何快速定位問題所發生的業務層面,達到精準化報警、快速解決問題的目標就成爲運維監控常態化的需求。機器學習
百度監控系統數據規模,單以時間序列數據爲例,不包含日誌類數據。編輯器
服務器指標數量:>1億分佈式
業務指標數量:>8千萬
數據增加速度:50TB/日
3、運維中面臨的監控問題
當前,面對複雜的業務監控和問題診斷,運維人員想找到指標和事件之間的關聯關係,進行因果關係推導,並最終定位故障,基本依靠人的經驗來進行。但隨着業務和監控規模的膨脹,運維也但願可以更加自動化、智能化地達成保證服務高可用性的目標,即快速的問題發現、分析定位或止損。
下面,咱們能夠從發現問題—分析問題—解決問題的思路出發,逐步給出遞進的解決方案。
4、發現問題篇:異常自動檢測
平常運維的業務指標數據會出現一些環比昨日的明顯異常、持續偏離的明顯問題和隨着時間週期漂移的指標數據等問題,之前這些監控的配置基本靠工程師經驗或持續的迭代修正,甚至純人工排查。隨着監控系統的發展,能夠經過制定監控標準和自動化監控部署實現運維的標準化和自動化,最終的目標,是但願用智能化的方法完全解決這個問題。
通常,在系統出現指標數據波動時,須要先斷定是否確實爲異常狀況,肯定異常後再實現精準報警。那麼,怎麼自動檢測業務的異常指標,幫助運維工程師和開發工程師處理問題呢?
這裏主要有兩個策略,自動恆定閾值設定與動態閾值設定:
1.恆定閾值設定法
對於普通數據,運維人員在服務器端設定服務器應用指標超過某合理數值自動報警,並對服務器異常的波動狀態進行報警。這個可以使用一些標準的統計學方法去自動計算這個閾值,取代人工配置成本。
參考方式:
基於歷史數據統計
假設正態分佈
3-sigma策略
2.動態閾值設定法
百度大多數業務數據的流量呈現很強的天週期特性,在某時刻出現數據波峯的驟降或波谷數據的驟增等變更狀況時,恆定閾值法很難解決這類問題的精準異常判斷。那麼咱們能夠把上述方法衍變升級一下,採用動態時間窗口的閾值設定法來解決週期性數據的異常判斷。
參考方式:
多分佈形式:將數據分段
按天同期計算統計閾值
分段3-sigma策略
3.恆定閾值和動態閾值的使用
針對以上兩種閾值劃分方式,異常檢測系統如何知道應該對每組數據進行什麼樣的異常檢測策略呢?這就須要一種方法提早對數據進行分類,能夠採用一種可判斷數據是否具備週期性趨勢的分類器方式來解決。若是數據具備很強的週期性特徵,建議使用動態閾值設定法;若是數據分析後沒有周期性特徵,那麼使用恆定閾值就能夠了。
另外,咱們還會遇到這種特殊的狀況,數據會隨時間出現漂移。好比某產品流量,會按照工做日、週末、傳統長假等時間呈現出不一樣的數據特徵,產生階段性變化。這個時候要進行異常檢測,就不只要考慮數據的普通週期性,還要考慮季節性和趨勢性的變化。監控系統可經過對平常數據進行分析,採用三次指數平滑等方法,對數據自己的趨勢性進行學習。
固然,上述方法都是基於從歷史數據進行學習分析從而進行異常檢測的,若是缺乏歷史數據,那麼對於這些指標,基於歷史數據進行同環比分析的意義就不大,核心就轉化爲檢測數據有沒有突升和突降異常。可採用相似於局部平滑的方法查看真實數據與局部平滑後數據有沒有大的出入,若是差距較大,可判斷爲有大的突升和突降,能夠標識數據異常。
參考方式:
局部平滑法
速度法
通過經驗的積累,對於核心產品的流量變更,即便波動不大,監控系統也能夠作到靈敏且精準的指標監控,可以快速發現異常狀況。固然,全自動的異常檢測系統不免會出現誤報、漏報等狀況,這就要求異常檢測系統須要支持工程師的標註與反饋,百度監控系統的自學習能力能夠根據工程師的需求進行動態調整,可同時支持人爲調整和系統自動參數學習調整,系統可自動根據工程師的標註或報警量的多少,進行參數訓練,把異常檢測參數調整到合理的範圍。
工程師標註
修改參數
標記未檢測到的異常
標記錯誤的報警
機器學習
標註報警 => 參數訓練
綜合上述方法,百度智能監控系統中的自動異常檢測最終造成兩種狀態的結合:離線狀態和在線狀態,離線部分可根據歷史數據進行分類學習、參數訓練,而在線部分可以進行最終的異常檢測和報警。
具體的組成如圖所示:
5、發現問題篇:精準報警
監控系統僅僅發現了問題還不夠,因爲指標數量太過繁雜,爲了起到輔助工程師快速解決問題的效果,還須要作到精準化報警。百度的精準報警主要分紅兩個層面,一個是單個指標的報警是否足夠精準;這裏須要考慮兩個問題,一是是否每次異常都應該報警?須要容忍系統毛刺的存在;二是異常過濾,把離散的異常點轉化爲異常事件或狀態,找到指標和事件的關聯關係。
在單一指標的報警足夠精準的基礎上,另外一個是把不一樣指標的報警結合起來作到足夠精準。如何把多個指標的報警綜合起來呢?簡單策略是固定時間窗口來報警,時間相近的報警可進行必定的合併,只要將首先出現的指標報警送達給到運維人員便可。從整個監控策略來看,把報警綜合起來,同類的報警進行合併來報給運維人員。複雜一些的策略是關聯挖掘,把歷史上產生的運維報警和事件關聯起來報警,同時,某些報警常常頻繁地一塊兒出現,能夠認爲這是同一個報警,再也不單獨分別進行報警。
採用的具體策略有:
1. 報警合併簡單策略
固定時間窗口
相同監控策略
相同監控對象
2. 報警合併複雜策略
關聯挖掘
合併置信度較高的頻繁項集
3. 報警依賴
策略依賴
異常依賴
6、分析問題篇:關聯分析
監控系統不只須要幫助工程師發現問題,同時還須要經過創建關聯分析,進行輔助問題定位,甚至迅速找到相關的指標或影響。那麼,如何爲複雜多樣的運維數據創建關聯呢?
產品服務層級的關聯關係圖:
運維工程師能夠把一些基礎的關聯關係配置到監控系統中,可讓監控系統明白一些常態化的運維指標與其它指標是否存在關聯,好比多個模塊的異常是否存在關聯、服務器升級或者部署產生問題是否與數據中心或交換機異常有關等。
具體的實現策略有:
1.關聯挖掘
(1)事件和事件間的關聯
頻繁項集挖掘
全部運維事件
(2)事件和時序間的關聯
指標異常常常與部署升級事件相伴發生
問題診斷&故障定位
(3)多時序間的關聯
2.關聯可視化
經過關聯變更,幫助運維人員分析重點數據的變更狀況。
(1)事件&事件關聯
(2)事件&時序關聯
3.服務透視定位問題
運維事件可能是與時間持續緊密關聯,咱們能夠把運維事件按照時間軸演進順序進行展現。同時,運維工程師經常接觸的服務拓撲,自己也是一種運維模塊的關聯關係。把這些離散的運維數據經過模塊關聯、時間關聯、數據流關聯等緊密地聯繫起來,構成一個完整的服務透視圖,若是異常發生在關係透視圖中的某個部分,就能夠按照周邊關係的通路來快速定位問題。
(1)模塊調用關係
(2)事件和模塊關聯
6、分析問題篇:故障定位
僅僅找到關聯還不夠,真正分析業務問題解決問題纔是關鍵。這裏介紹兩個經常使用的輔助定位問題策略。
1.多維數據分析
監控系統採集到的不少指標具有包含關係,不少狀況下,一個整體指標是由許多子指標加和構成的,或者也能夠說成是整體維度是由許多子維度組成的。監控系統能夠計算出每一個子指標或子維度佔總指標總維度的百分比,並按照影響權重去進行分析,當某個子指標的變化幅度對整體指標影響權重最大,咱們就傾向於認爲這個指標多是問題的緣由。
舉個例子,百度的整體流量指標對應每一個地域的流量之和,整體流量有問題有多是某個地域流量出現問題,找到目前對整體流量變化影響最大的地域進行問題處理就能夠解決問題。一樣的道理也能夠推廣到其它狀況。
2.故障診斷樹
運維人員能夠經過數據可視化(熱力圖、多維報表)的形式,結合之前發現問題的經驗沉澱模式,發現指標間的強相關,作出問題診斷。那咱們是否是能夠將運維人員的經驗固化到監控系統中,經過不一樣指標的分析方向和下探方法能夠造成樹狀結構,經過樹上的某個節點進行逐級探查。最終造成故障診斷樹,經過推導路徑不只能夠幫助運維人員快速完成問題出現時的排查過程,節省這部分的定位時間,也頗有可能達到直接定位問題或加速解決故障的目的。
故障檢測:
(1)領域專家知識
(2)邏輯推導引擎
(3)迅速找到問題根因
7、解決問題篇
監控系統產生決策
部署調度系統執行
1.單邊故障自動止損
單邊故障指單個IDC故障、單個鏈路故障等。好比一個IDC或者某些IDC出現問題,解決辦法是切走這部分流量,利用監控系統來作動態的部署調度。經過某個數據中心或鏈路的部署調整,幫助系統快速恢復,進而實現自動化決策和執行來實現單邊故障止損。
具體策略有:
(1)實現自動冗餘與調度
(2)智能監控系統負責動態決策
(3)部署調度系統負責調度執行
2.灰度發佈自動止損
研發工程師作灰度發佈時,能夠先作小流量的發佈,部署系統能夠跟監控系統配合,若是出現問題,直接進行狀態終止或回滾,把問題控制在灰度發佈範圍內。
8、智能運維監控總結
經過上述說明,百度的智能運維監控系統最終造成了一個監控閉環,包含問題發現、分析決策和問題的解決。具體的組成包括異常檢測、報警收斂、關聯分析、故障定位和自動處理五部份內容。
9、將來運維變被動爲主動
1.全方位覆蓋
在用戶端(APP、瀏覽器等)、雲端(機房、服務器、自身服務、第三方服務等)、管道(鏈路、運營商)等任何維度進行數據採集並進行異常自動檢測。
2. 讓監控更聰明
分析運用已有數據,並把服務狀態、問題影響分析等可視化
自動學習並理解故障的趨勢和模式
自動發現服務或依賴環境的變動
固然,更進一步地,監控系統是否是能夠先於故障發生而預測到故障,在故障發生以前就能夠處理並解決故障,從而達成產品的超高可用性目標。將來的智能監控應該是這樣的,運維工程師通過完善的監控部署,實現全方位的異常自動檢測覆蓋,同時,在系統剛出現故障徵兆,有損以前就進行處理並解決,實現完整的智能化監控系統解決方案。
歡迎全部對智能化運維技術感興趣的同窗加入百度運維部,一塊兒推進智能化運維的發展。
點好看的同窗,今年加薪^-^↓
本文分享自微信公衆號 - 互聯網後端架構(fullstack888)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。