做者簡介:周偉 百度高級研發工程師算法
負責百度智能運維(Noah)監控報警系統、通告平臺;在精準報警、精準通告、報警收斂、公/私有云監控等方向具備普遍的實踐經驗。安全
監控報警是故障發現的重要一環,也是百度在AIOps的最先切入方向之一,目前百度 AIOps 在監控報警方面已經有兩個場景取得突出效果:智能異常檢測和智能報警合併。網絡
如何支撐 AIOps 算法在監控報警系統的快速落地併產生業務價值,這對監控報警架構提出了很大的挑戰!本文首先介紹百度Noah監控報警的功能和業務模型,而後重點分析百度監控報警系統在落地 AIOps 過程當中遇到的挑戰。架構
首先咱們介紹下百度的標準故障處理流程,如上圖所示,主要分爲如下7個過程:運維
在整個故障處理流程中,監控系統主要負責故障發現到故障定位的環節;報警系統做爲監控系統的子系統,主要負責故障發現和故障通告。組件化
百度Noah報警系統最先服務於百度內部的監控平臺,提供從機器、實例到上層業務等全方位、立體化的監控報警能力,已經覆蓋百度的全部產品線。同時,系統面臨很大的挑戰,每秒須要處理千萬級個數據點,線上的監控配置已經達到百萬級別,天天會產生千萬個報警事件,在這麼大的量級下,還需保證秒級的報警時效性。學習
百度Noah報警系統不只爲百度內部用戶服務,咱們還同時爲公有云和私有云服務提供監控報警能力。咱們將內部強大的監控產品和運維理念輸出到業界,打造了NoahEE產品(詳見《百度雲企業級運維平臺——NoahEE》介紹 ),幫助客戶一塊兒提高運維效率和線上穩定性。另外,咱們還依託報警系統孵化出了百度AIOps智能運維產品,包括智能異常檢測、故障定位、報警合併等高級功能,已經落地金融、交通、互聯網等行業,受到客戶一致好評。測試
監控報警系統的核心使命是精準報警,那報警系統是如何進行故障發現和故障通告呢?咱們經過一個場景來了解下。spa
假設上圖中的曲線是某產品線的流量指標(簡稱PV),其中每一個點表明一個PV數據點,假設但願當PV值小於100時,異常判斷結果爲異常,並通告給業務運維人員。3d
監控報警系統會週期性地對最近一個數據點(Data)進行判斷,若是PV小於100則判斷結果爲異常,不然判斷結果爲正常。當首次異常的時候(即判斷結果從正常轉爲異常),會產生一個報警事件(Event);當異常恢復時,則將報警事件結束掉。在報警事件持續期間,會根據報警規則產生一個或多個報警消息(Message),並將報警消息渲染成容易理解的文本,經過下游發送渠道(短信、電話等)送達給運維工程師。經過這麼一個流程,監控報警系統就達到了故障發現和故障通告的目的。
相應地,咱們將監控報警系統拆分紅如下三個子系統:
將監控報警系統拆分紅三個子系統後,有如下兩個好處:
每一個子系統能夠根據自身的功能特色採用不一樣的技術棧和部署架構,由不一樣的研發工程師負責研發和維護。好比異常判斷系統更偏向計算邏輯,能夠採用Golang或C++這類更加註重執行效率的技術棧;而事件管理和報警發送系統更偏向於業務邏輯,能夠採用Java或PHP等更注重研發效率的技術棧。
每一個子系統也能夠獨立進行功能和架構升級。好比異常判斷系統須要大量的CPU資源,比較適合採用集羣架構,這樣方便橫向擴展,增長系統吞吐能力;而通告發送系統的流量相對小些,初期能夠採用主備架構,不只架構簡單可靠,並且研發和維護成本小。假設隨着業務的發展,業務須要更大的報警發送能力,通告發送系統只需保證對外接口不變,獨立將自身架構升級爲集羣架構,就可獲取更大的報警發送能力。
每一個子系統都是一個獨立的功能組件,能夠獨立部署、升級,這樣就具有靈活支持商業化交付能力。好比咱們能夠只將通告發送系統單獨交付給商業化客戶,客戶經過直接調用通告發送的接口就能夠獲取報警合併、渲染、發送等能力。
經過上面的業務模型介紹,你們已經對監控報警系統有了全局的認識,那下面來詳細分析落地AIOps遇到的問題。
咱們繼續來看PV指標,經過對歷史PV數據的觀察,咱們發現不一樣時間段的PV大小是上下波動的,好比在早上八九點是流量高峯期,在凌晨兩三點是流量低峯期,另外工做日和週末的流量大小也是不一樣的。這意味着,咱們不可能設置統一的閾值來檢測PV流量的變化狀況,那麼怎麼辦呢?
百度策略人員研發了基於魯棒迴歸的無監督突升突降檢測算法,這個算法不須要設置PV閾值,便可檢測流量的變化。下面展現的這個公式是其中的一步,其中變量y就是真實的PV值,f(x)表明利用某種算法預測到的PV值。若是對算法細節感興趣,可參考文章:《咱們不同!告訴你百度是如何作智能流量異常檢測的》。
這類異常檢測算法相對於傳統的四則運算,有如下不一樣:
最初咱們落地這類AIOps算法時,總體的流程如上圖所示:
上面的研發流程暴露出不少的問題。一方面,對咱們的研發工程師要求比較苛刻,既須要看得懂策略算法,又要熟知工程研發;另外一方面,算法的迭代週期比較長,常常以月爲單位,可能算法剛上線,數據特徵就發生了變化,致使算法失效;最後,即便算法程序迭代穩定了,可是參數模型還須要按期更新,因爲參數模型和算法程序沒有分離,致使後期參數模型的更新須要不斷上線,提升了維護成本。
咱們再來看下報警管理的挑戰。報警管理須要處理的需求比較多,咱們以一個典型的運維場景來串一下這些需求:
可見報警管理的需求複雜多樣,若是咱們不能抽象出一個可擴展的報警管理模型,咱們將變得愈來愈被動。
看完報警管理,咱們再來看下報警風暴的挑戰。
爲了不遺漏故障,運維工程師經常會在監控系統中定製大量的監控指標和報警規則,從而創建起從網絡到機器、從實例到模塊、再到上層業務的立體化監控。立體化的監控雖然極大提升了故障發現的能力,可是很容易致使一個故障觸發大量報警,形成報警風暴。
爲了讓你們認識報警風暴的真面目,咱們來看三個典型的場景:
咱們能夠看到,這三種典型故障對值班工程師都很是的不友好。他們的手機會被短信和電話轟炸,與此同時大量的報警消息卻並不能幫助他們迅速尋找根因和制訂止損方案。對大量報警消息先進行有效地組織,而後再發送,就成爲值班工程師的一大需求。
本文首先介紹了百度Noah監控報警系統功能和業務模型,而後結合案例場景分析了咱們在落地AIOps時遇到的問題,讓你們對監控報警系統的現狀有一個直觀的認識。咱們將在下篇文章中講解如何來解決這些挑戰,敬請期待。
若是你喜歡本文,請分享到朋友圈,想要得到更多信息,請關注咱們!
若是你有任何問題歡迎留言諮詢~
若是想試用咱們的企業級運維平臺NoahEE,請聯繫郵箱:noah_bd@baidu.com