作者簡(jiǎn)介:周偉 百度高級(jí)研發(fā)工程師 干貨概覽監(jiān)控報(bào)警是故障發(fā)現(xiàn)的重要一環(huán),也是百度在AIOps的最早切入方向之一,目前百度AIOps在監(jiān)控報(bào)警方面已經(jīng)有兩個(gè)場(chǎng)景取得突出效果:智能異常檢測(cè)和智能報(bào)警合并。 如何支撐AIOps算法在監(jiān)控報(bào)警系統(tǒng)的快速落地并產(chǎn)生業(yè)務(wù)價(jià)值,這對(duì)監(jiān)控報(bào)警架構(gòu)提出了很大的挑戰(zhàn)!在上篇《AIOps對(duì)監(jiān)控報(bào)警架構(gòu)的挑戰(zhàn)》文章中,我們介紹了監(jiān)控報(bào)警系統(tǒng)在故障處理流程中的位置(故障發(fā)現(xiàn)和故障通告),并且分析了AIOps對(duì)監(jiān)控報(bào)警架構(gòu)的三個(gè)挑戰(zhàn)。在本篇,我們將詳細(xì)介紹應(yīng)對(duì)這三個(gè)挑戰(zhàn)的方案:
下面我們來詳細(xì)看下這三個(gè)方案的實(shí)現(xiàn)細(xì)節(jié)。 策略運(yùn)行平臺(tái),讓算法迭代飛起來在上篇《AIOps對(duì)監(jiān)控報(bào)警架構(gòu)的挑戰(zhàn)》文章中,我們提到異常判斷在落地AIOps智能異常檢測(cè)算法時(shí),遇到的最大挑戰(zhàn)是算法迭代周期長(zhǎng)達(dá)一個(gè)月,費(fèi)時(shí)費(fèi)力,算法的迭代成本非常高。 為了能快速落地AIOps算法,并能產(chǎn)生好的效果,提高報(bào)警準(zhǔn)確率,我們希望算法的迭代周期從月降低到天級(jí)別,為了達(dá)到這個(gè)目標(biāo),需要異常判斷系統(tǒng)滿足這些需求:
基于這些需求,我們研發(fā)了策略運(yùn)行平臺(tái)。策略運(yùn)行平臺(tái)共分為三個(gè)環(huán)境:
架構(gòu)介紹
上圖是策略運(yùn)行平臺(tái)的架構(gòu)圖,我們以新建一個(gè)報(bào)警策略的場(chǎng)景來依次介紹下每個(gè)模塊的功能:
為了負(fù)載平衡和Failover,任務(wù)分配模塊需要將報(bào)警任務(wù)在任務(wù)運(yùn)行模塊中的不同實(shí)例間移動(dòng)。當(dāng)一個(gè)報(bào)警任務(wù)從實(shí)例A移動(dòng)到實(shí)例B上后,實(shí)例B會(huì)向數(shù)據(jù)轉(zhuǎn)發(fā)模塊訂閱任務(wù)需要的數(shù)據(jù),而實(shí)例A則相應(yīng)取消數(shù)據(jù)訂閱。這樣,數(shù)據(jù)訂閱模塊就能夠?qū)?shù)據(jù)轉(zhuǎn)發(fā)到正確的實(shí)例上,從而保證任務(wù)的正常運(yùn)行。 如果算法腳本在運(yùn)行過程中存在內(nèi)部狀態(tài),任務(wù)在實(shí)例B上啟動(dòng)后,可以在初始化的時(shí)候向數(shù)據(jù)cache請(qǐng)求近期的數(shù)據(jù)以重建內(nèi)部狀態(tài)。根據(jù)我們的實(shí)踐經(jīng)驗(yàn),大部分任務(wù)只需要最近1到2個(gè)小時(shí)的數(shù)據(jù)就能夠重建內(nèi)部狀態(tài)了。 通過策略運(yùn)行平臺(tái),我們已經(jīng)將算法迭代周期從月減少到天級(jí)別。另外,我們還將框架開放給業(yè)務(wù)運(yùn)維工程師使用,業(yè)務(wù)運(yùn)維工程師具有豐富的業(yè)務(wù)運(yùn)維經(jīng)驗(yàn),由他們自己來開發(fā)異常檢測(cè)算法,可以將他們的專家經(jīng)驗(yàn)固化到報(bào)警系統(tǒng)中,提高報(bào)警的準(zhǔn)確性。 狀態(tài)機(jī)引擎,讓事件管理更輕松為什么報(bào)警事件需要用狀態(tài)機(jī)描述呢?為了回答這個(gè)問題,我們首先介紹下什么是報(bào)警事件。 什么是報(bào)警事件?
我們先來看一個(gè)簡(jiǎn)單的故障場(chǎng)景,上圖中的時(shí)序數(shù)據(jù)展示了某服務(wù)的平均響應(yīng)時(shí)間(latency),假設(shè)監(jiān)控策略是如果latency大于800則報(bào)警:
我們?cè)賮砜匆粋€(gè)更復(fù)雜的場(chǎng)景。在實(shí)際運(yùn)維過程中,我們會(huì)分省份和運(yùn)營(yíng)商維度采集服務(wù)的平均響應(yīng)時(shí)間(latency),即多維度數(shù)據(jù)。如果我們分別針對(duì)不同省份和運(yùn)營(yíng)商都單獨(dú)配置一個(gè)監(jiān)控策略,很明顯,這會(huì)導(dǎo)致報(bào)警配置的管理成本很高,實(shí)際上運(yùn)維工程師希望配置類似latency{isp=*,province=*} > 80的報(bào)警策略,就可以同時(shí)對(duì)所有省份和運(yùn)營(yíng)商的latency指標(biāo)進(jìn)行分別判斷,這就是所謂的多維度異常判斷配置。
上圖展示了一個(gè)多維度判斷配置的例子,很明顯,在T2-T3期間,廣東電信和北京移動(dòng)的latency指標(biāo)同時(shí)發(fā)生異常。如果策略在故障期間只產(chǎn)生一個(gè)報(bào)警事件,那么我們根據(jù)事件無法區(qū)分是哪個(gè)省份和運(yùn)營(yíng)商的數(shù)據(jù)異常了,所以一個(gè)策略需要針對(duì)每個(gè)數(shù)據(jù)維度分別產(chǎn)生一個(gè)報(bào)警事件(特征四)。 上面通過兩個(gè)業(yè)務(wù)場(chǎng)景介紹了報(bào)警事件的業(yè)務(wù)模型,以及報(bào)警事件的四個(gè)特征,讓大家對(duì)報(bào)警事件有一個(gè)直觀的認(rèn)識(shí),下面我們來看下基于狀態(tài)機(jī)的事件管理引擎。 為什么需要狀態(tài)機(jī)?我們分報(bào)警認(rèn)領(lǐng)和報(bào)警升級(jí)兩個(gè)場(chǎng)景來介紹基于狀態(tài)機(jī)的事件管理引擎。 1. 報(bào)警認(rèn)領(lǐng)場(chǎng)景
我們結(jié)合狀態(tài)機(jī)來看下報(bào)警認(rèn)領(lǐng)場(chǎng)景中,報(bào)警事件的生命周期是如何演化的:
我們可以看到,報(bào)警事件的狀態(tài)變遷過程其實(shí)就是一個(gè)狀態(tài)機(jī)的運(yùn)行過程,每個(gè)狀態(tài)都有對(duì)應(yīng)的進(jìn)入條件和動(dòng)作,所以我們將報(bào)警事件抽象成狀態(tài)機(jī)來描述它。 2. 報(bào)警升級(jí)場(chǎng)景我們?cè)賮砜匆粋€(gè)報(bào)警升級(jí)的場(chǎng)景,假設(shè)對(duì)應(yīng)的報(bào)警升級(jí)配置如下所示:
其中第1級(jí)配置的含義是:報(bào)警接收人為運(yùn)小二,報(bào)警發(fā)送渠道為短信,如果超過1分鐘沒有進(jìn)行報(bào)警認(rèn)領(lǐng),或者認(rèn)領(lǐng)了但是超過2分鐘故障沒有恢復(fù),則報(bào)警事件會(huì)升級(jí)到第二級(jí)。其他層級(jí)的配置含義以此類推。 這個(gè)報(bào)警升級(jí)配置對(duì)應(yīng)的狀態(tài)機(jī)如下圖所示。
我們通過一個(gè)真實(shí)的報(bào)警認(rèn)領(lǐng)場(chǎng)景來了解狀態(tài)機(jī)的變遷過程:
經(jīng)過上面的案例分析,我們看到,在報(bào)警升級(jí)場(chǎng)景下,報(bào)警事件的狀態(tài)變遷過程將變得更加復(fù)雜,而且不同事件狀態(tài)之間變遷的觸發(fā)條件和執(zhí)行動(dòng)作也可能會(huì)各不相同?;跔顟B(tài)機(jī)的報(bào)警事件模型不僅足夠抽象,表達(dá)能力強(qiáng),可以囊括繁雜多樣的事件管理需求;而且可擴(kuò)展性強(qiáng),通過狀態(tài)機(jī)描述文件定義狀態(tài)機(jī)行為,可以快速添加“數(shù)據(jù)斷流”、“報(bào)警失效”等新狀態(tài),來滿足無數(shù)據(jù)檢測(cè)和報(bào)警失效檢測(cè)等更多復(fù)雜的事件管理需求。 報(bào)警合并,讓報(bào)警風(fēng)暴成為過去在上篇《AIOps對(duì)監(jiān)控報(bào)警架構(gòu)的挑戰(zhàn)》文章中,我們通過三個(gè)場(chǎng)景給大家呈現(xiàn)報(bào)警風(fēng)暴的真面目,其中提到了可以對(duì)大量報(bào)警消息進(jìn)行有效的組織,然后再發(fā)送,從而將運(yùn)維工程師從報(bào)警風(fēng)暴中解救出來,這就是所謂的報(bào)警合并。 報(bào)警合并的基本思路是將相關(guān)聯(lián)的報(bào)警消息組成到一起,作為一條信息發(fā)送給運(yùn)維工程師,這樣運(yùn)維工程師可以根據(jù)這種相關(guān)性來輔助故障定位。 那如何來描述這種相關(guān)性呢?基于百度的運(yùn)維場(chǎng)景,我們挖掘出以下三類相關(guān)性:
下圖展示了服務(wù)A下多個(gè)實(shí)例同時(shí)故障,如果對(duì)每個(gè)實(shí)例的故障,都給運(yùn)維工程師發(fā)送一條消息,那么就很容易產(chǎn)生報(bào)警風(fēng)暴。我們通過將報(bào)警緩存一段時(shí)間(可以設(shè)置最大延遲時(shí)間,從而保證報(bào)警時(shí)效性),然后將緩存內(nèi)所有屬于服務(wù)A的報(bào)警合并到一起后發(fā)送,這樣運(yùn)維工程師只會(huì)收到一條報(bào)警,而且在報(bào)警信息中還會(huì)告知運(yùn)維人員,服務(wù)A下有大量實(shí)例異常,這樣運(yùn)維人員可以根據(jù)這個(gè)提示有針對(duì)性去排查故障。
關(guān)于報(bào)警合并的更多細(xì)節(jié),可以參考我們之前的文章《我在百度對(duì)抗報(bào)警風(fēng)暴(一)》、《我在百度對(duì)抗報(bào)警風(fēng)暴(二)》。 總? 結(jié)本文我們首先回顧了AIOps對(duì)監(jiān)控報(bào)警架構(gòu)的挑戰(zhàn),然后從工程角度聊了聊AIOps落地難的應(yīng)對(duì)之策。通過這兩篇文章給大家系統(tǒng)性地介紹了百度Noah監(jiān)控報(bào)警系統(tǒng)的前世今生,希望能給大家?guī)硪恍┦斋@。如果大家對(duì)智能運(yùn)維感興趣,歡迎留言繼續(xù)交流。 溫馨提示如果你喜歡本文,請(qǐng)分享到朋友圈,想要獲得更多信息,請(qǐng)關(guān)注我們! |
|