[導(dǎo)讀]分享內(nèi)容的提綱如下:Goldeneye智能監(jiān)控的業(yè)務(wù)背景、技術(shù)思想、技術(shù)實(shí)現(xiàn)細(xì)節(jié)、難點(diǎn)和今后的優(yōu)化方向。
背景介紹
該分享是阿里媽媽Goldeneye業(yè)務(wù)監(jiān)控平臺(tái)的智能監(jiān)控解決方案。
這個(gè)分享主要包括智能監(jiān)控的技術(shù)實(shí)現(xiàn),以及大規(guī)模日志監(jiān)測(cè)數(shù)據(jù)的自動(dòng)化接入兩部分。我先介紹一下智能監(jiān)控部分,下一期分享中我的兩位同事將給大家著重介紹日志分析處理的計(jì)算存儲(chǔ)。智能監(jiān)控現(xiàn)在其他一些公司也有在做,希望通過(guò)這次分享能夠給大家?guī)?lái)一些新的啟發(fā),也歡迎大家能夠提出問(wèn)題和建議,互相切磋交流經(jīng)驗(yàn)。——馬小鵬
相關(guān)廠商內(nèi)容
分享內(nèi)容的提綱如下:Goldeneye智能監(jiān)控的業(yè)務(wù)背景、技術(shù)思想、技術(shù)實(shí)現(xiàn)細(xì)節(jié)、難點(diǎn)和今后的優(yōu)化方向。
嘉賓介紹
馬小鵬,阿里媽媽全景業(yè)務(wù)監(jiān)控平臺(tái)技術(shù)負(fù)責(zé)人。2013起在阿里從事大規(guī)模系統(tǒng)日志分析及應(yīng)用的研發(fā),曾經(jīng)主導(dǎo)了直通車廣告主報(bào)表平臺(tái)和實(shí)時(shí)報(bào)表存儲(chǔ)選型。在加入阿里之前,曾負(fù)責(zé)網(wǎng)易電商App數(shù)據(jù)統(tǒng)計(jì)平臺(tái)的研發(fā)。
一、Goldeneye智能監(jiān)控的背景
Goldeneye作為阿里媽媽業(yè)務(wù)監(jiān)控平臺(tái),主要在業(yè)務(wù)日志、數(shù)據(jù)的實(shí)時(shí)統(tǒng)計(jì)分析基礎(chǔ)上做監(jiān)控報(bào)警以及輔助定位。阿里集團(tuán)內(nèi)部也有很多優(yōu)秀的監(jiān)控平臺(tái),它們?cè)陂_(kāi)放性上做的很好,接入成本也不高,但是監(jiān)控閾值也是開(kāi)放給用戶自己設(shè)定。這種情況下,對(duì)于業(yè)務(wù)監(jiān)控人工維護(hù)閾值就比較復(fù)雜,需要有豐富的經(jīng)驗(yàn)來(lái)拍定閾值,需要人工持續(xù)的維護(hù)不同監(jiān)控項(xiàng)的監(jiān)控閾值。所以,在業(yè)務(wù)快速發(fā)展的前提下,傳統(tǒng)的靜態(tài)閾值監(jiān)控很容易出現(xiàn)了誤報(bào)、漏報(bào)的問(wèn)題,而且人工維護(hù)成本高,監(jiān)控視野局限。Goldeneye就是在這種基礎(chǔ)上,我們?cè)囍鴱拇髷?shù)據(jù)應(yīng)用的角度,去解決業(yè)務(wù)監(jiān)控中的問(wèn)題,由此誕生的。
1.業(yè)務(wù)背景:
(1)體量大:Goldeneye現(xiàn)在接入的業(yè)務(wù)線覆蓋了阿里媽媽主體的90%業(yè)務(wù),每天處理的日志量在100T以上,業(yè)務(wù)監(jiān)控需要對(duì)各業(yè)務(wù)線的流量分層級(jí)實(shí)時(shí)監(jiān)控,核心數(shù)據(jù)以1分鐘為周期,一般監(jiān)測(cè)數(shù)據(jù)以5分鐘或1小時(shí)為周期,監(jiān)控目標(biāo)非常多,按人工維護(hù)這些監(jiān)控的閾值、啟停、生效實(shí)效等幾乎是達(dá)不到的。
(2)變化多:業(yè)務(wù)監(jiān)控的監(jiān)測(cè)數(shù)據(jù)大都是業(yè)務(wù)指標(biāo),不同于系統(tǒng)運(yùn)維指標(biāo),比如RT/QPS/TPS等一般是比較穩(wěn)定的,業(yè)務(wù)指標(biāo)具有周期性變化的特點(diǎn),比如工作日和節(jié)假日的區(qū)別、業(yè)務(wù)營(yíng)銷策略調(diào)整的影響等,在這種情況下人工設(shè)定的靜態(tài)報(bào)警閾值準(zhǔn)確性就很難保障了。
(3)迭代快:隨著阿里媽媽資源整合和業(yè)務(wù)的快速發(fā)展,監(jiān)控目標(biāo)也經(jīng)常發(fā)生變化,比如流量監(jiān)控資源位的調(diào)整、效果監(jiān)控的產(chǎn)品類型劃分等,曾經(jīng)出現(xiàn)過(guò)新流量上線后的監(jiān)控盲點(diǎn)。
2.技術(shù)背景:
通常的業(yè)務(wù)監(jiān)控系統(tǒng)或平臺(tái),都是由采集、數(shù)據(jù)處理、檢測(cè)、報(bào)警等模塊組成的,Goldeneye也是如此,不過(guò)它的技術(shù)架構(gòu)上用了阿里內(nèi)部的一些技術(shù)中間件,比如采集我們使用TimeTunnel(它有agent在各臺(tái)日志服務(wù)器上拉日志到Topic,并且負(fù)責(zé)將離線日志放到ODPS上),這部分我不再介紹了。
數(shù)據(jù)處理我們使用的jstorm和ODPSMRjob分別對(duì)日志進(jìn)行實(shí)時(shí)、離線批處理,主要包括日志解析、校驗(yàn)、時(shí)間周期歸一化、聚合、寫(xiě)存儲(chǔ)(HBase)等操作,這部分下一期分享中我的同事會(huì)詳細(xì)介紹。今天的分享主要集中在閾值預(yù)測(cè)、監(jiān)控檢測(cè)、報(bào)警生成&通知、輔助定位這四部分。
二、技術(shù)思想
智能監(jiān)控就是讓系統(tǒng)在業(yè)務(wù)監(jiān)控的某些環(huán)節(jié)上代替人工執(zhí)行和判斷的過(guò)程。人工維護(hù)監(jiān)控目標(biāo)和閾值是以經(jīng)驗(yàn)為參考的,系統(tǒng)如何自動(dòng)判斷哪些目標(biāo)需要監(jiān)控、自動(dòng)設(shè)定監(jiān)控目標(biāo)的閾值水位、不用人力維護(hù),是基于對(duì)歷史樣本數(shù)據(jù)統(tǒng)計(jì)分析得出判斷依據(jù)。
通過(guò)收集監(jiān)測(cè)數(shù)據(jù)的樣本,并使用智能檢測(cè)算法模型,讓程序自動(dòng)對(duì)監(jiān)控項(xiàng)指標(biāo)的基準(zhǔn)值、閾值做預(yù)測(cè),在檢測(cè)判斷異常報(bào)警時(shí)使用規(guī)則組合和均值漂移算法,能精確地判斷需要報(bào)警的異常點(diǎn)和變點(diǎn)。
1.閾值水位自適應(yīng)變化
以往我們添加監(jiān)控有兩種做法:
給指標(biāo)M1設(shè)置一個(gè)水位線,低于(或高于)水位,觸發(fā)報(bào)警;
給指標(biāo)M1設(shè)置同比、環(huán)比波動(dòng)幅度,比如同比波動(dòng)20%、環(huán)比波動(dòng)10%觸發(fā)報(bào)警;
以上兩種方式,是平常大家常用的監(jiān)控方式,但是效果確不理想,這種靜態(tài)閾值長(zhǎng)期來(lái)看沒(méi)有適應(yīng)變化的能力,需要人工維護(hù),而且報(bào)警準(zhǔn)確性也依賴于同環(huán)比數(shù)據(jù)的穩(wěn)定性。
我們能否讓系統(tǒng)具備自動(dòng)適應(yīng)變化的能力,自動(dòng)調(diào)整閾值水位?就如同手動(dòng)擋的汽車換成自動(dòng)擋一樣,可以根據(jù)速度自己調(diào)節(jié)檔位。
2.監(jiān)控項(xiàng)自動(dòng)發(fā)現(xiàn)
當(dāng)我們的監(jiān)控系統(tǒng)具備預(yù)測(cè)動(dòng)態(tài)閾值的能力后,監(jiān)控項(xiàng)的維護(hù)是否也可以交給系統(tǒng)去做?
可能大家也曾遇到過(guò)類似的情況,舊的監(jiān)控項(xiàng)已經(jīng)沒(méi)有數(shù)據(jù)了,新的監(jiān)控目標(biāo)卻因?yàn)楦鞣N原因被漏掉,人工維護(hù)監(jiān)控項(xiàng)需要及時(shí)同步上下線變更,但是當(dāng)我們需要監(jiān)控的目標(biāo)有一千個(gè)、一萬(wàn)個(gè)甚至更多的時(shí)候,人力是無(wú)法一直跟進(jìn)這些監(jiān)控項(xiàng)的維護(hù)工作的,或者說(shuō)這種工作比較單調(diào)容易被忽視。
我們能否將判斷如何篩選監(jiān)控項(xiàng)的規(guī)則交給系統(tǒng),讓它去定期檢查哪些監(jiān)控項(xiàng)已經(jīng)實(shí)效,哪些監(jiān)控項(xiàng)需要新增,哪些監(jiān)控項(xiàng)的閾值需要調(diào)節(jié)。這種發(fā)現(xiàn)規(guī)則是穩(wěn)定的,僅僅是依據(jù)發(fā)現(xiàn)規(guī)則得出的監(jiān)控項(xiàng)內(nèi)容在不斷變化而已。
3.過(guò)濾誤報(bào)時(shí)欲擒故縱
當(dāng)我們的監(jiān)控系統(tǒng)具備預(yù)測(cè)動(dòng)態(tài)閾值、自動(dòng)發(fā)現(xiàn)并維護(hù)監(jiān)控項(xiàng)的能力后,如何達(dá)到不漏報(bào)和不誤報(bào)之間的平衡?
對(duì)于監(jiān)控而言,漏報(bào)是不可容忍的,但是誤報(bào)過(guò)多也容易使人麻木。
通常的做法是為了不被誤報(bào)干擾至麻木,會(huì)把閾值調(diào)節(jié)得寬松些,但是這種做法容易產(chǎn)生漏報(bào),尤其是下跌不太明顯的情況。
Goldeneye采取的思路是對(duì)誤報(bào)case欲擒故縱,在首先確保不漏報(bào)的基礎(chǔ)上降低誤報(bào)率。先監(jiān)控產(chǎn)生疑似異常點(diǎn),這一環(huán)節(jié)我們基于動(dòng)態(tài)閾值去檢測(cè)時(shí)相對(duì)嚴(yán)格一些(或者說(shuō)這一環(huán)節(jié)不用考慮報(bào)警收斂的問(wèn)題),然后對(duì)這些疑似異常點(diǎn)再做驗(yàn)證、過(guò)濾,最終生成報(bào)警通知,驗(yàn)證和過(guò)濾的依據(jù)是預(yù)先定義的規(guī)則,比如指標(biāo)組合判斷、報(bào)警收斂表達(dá)式等。
三、技術(shù)實(shí)現(xiàn)細(xì)節(jié)
下面介紹技術(shù)實(shí)現(xiàn)的一些細(xì)節(jié),分為監(jiān)控系統(tǒng)的架構(gòu)、動(dòng)態(tài)閾值、變點(diǎn)檢測(cè)、智能全景、輔助定位五個(gè)點(diǎn)。
1、整體介紹
Goldeneye監(jiān)控系統(tǒng)的四個(gè)輸入:實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)、歷史數(shù)據(jù)、預(yù)測(cè)策略、報(bào)警過(guò)濾規(guī)則。
其中,歷史數(shù)據(jù)是實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)的積累。
而預(yù)測(cè)策略主要包括:
(1)閾值參數(shù):設(shè)置基于預(yù)測(cè)基準(zhǔn)值的系數(shù)決定閾值上下限區(qū)間、分時(shí)段閾值預(yù)測(cè)系數(shù)、分報(bào)警靈敏度閾值預(yù)測(cè)系數(shù);
(2)預(yù)測(cè)參數(shù):樣本數(shù)量、異常樣本過(guò)濾的高斯函數(shù)水位或者過(guò)濾比例、基于均值漂移模型的樣本分段選取置信度等。
關(guān)于報(bào)警過(guò)濾規(guī)則,主要是為了在充分捕捉疑似異常點(diǎn)的前提下,過(guò)濾不必要的報(bào)警。比如指標(biāo)M1異常,但是組合規(guī)則是M1和M2同時(shí)異常才報(bào)警,這種就會(huì)過(guò)濾掉。再比如,按照?qǐng)?bào)警收斂規(guī)則,一個(gè)監(jiān)控項(xiàng)的第1次,第2次,第10次,第50次連續(xù)報(bào)警值得關(guān)注,可以設(shè)置收斂表達(dá)式為1,2,10,50,那么在報(bào)警通知生成時(shí)對(duì)于第3,4,…,9,11,12,…,49次報(bào)警可以忽略,因?yàn)榉磸?fù)通知的意義不大,這個(gè)規(guī)則可以按需要達(dá)到自動(dòng)收斂。也可以在同一監(jiān)控項(xiàng)的多個(gè)實(shí)例同時(shí)發(fā)生異常報(bào)警的情況下,按規(guī)則合并成一條報(bào)警,這些規(guī)則可以按具體情況去實(shí)現(xiàn),最終的目的是以最簡(jiǎn)潔的方式暴露最值得關(guān)注的報(bào)警。
(這里補(bǔ)充一句,我們最近在考慮新的收斂方式,對(duì)第1條和最后1條報(bào)警,并且自動(dòng)計(jì)算出累積gap,這樣異常的起止和影響范圍更明顯)
2、動(dòng)態(tài)閾值
監(jiān)控使用控制圖,對(duì)監(jiān)測(cè)指標(biāo)的時(shí)間序列可視化,讓人們可以清楚的看到指標(biāo)的波動(dòng)。基于控制圖的監(jiān)控,以往很多都是靜態(tài)閾值方式,比如前面提到的靜態(tài)水位線、同環(huán)比。動(dòng)態(tài)閾值是為控制圖的時(shí)間序列每個(gè)點(diǎn),預(yù)估該點(diǎn)對(duì)應(yīng)時(shí)刻這個(gè)指標(biāo)的基準(zhǔn)值、閾值上限、閾值下限,從而讓程序可以自動(dòng)判斷是否有異常。因?yàn)檫@種預(yù)估基于過(guò)去幾個(gè)月甚至更多的歷史樣本作為參考,所以比同環(huán)比兩個(gè)數(shù)據(jù)作為參照的準(zhǔn)確度要高。動(dòng)態(tài)閾值預(yù)測(cè)的理論基礎(chǔ)是高斯分布和均值漂移模型。
動(dòng)態(tài)閾值預(yù)測(cè)的步驟主要是這樣:
(1)樣本選?。哼@個(gè)根據(jù)自己的需要,一般建議選取過(guò)去50天左右的樣本。
(2)異常樣本篩除:這個(gè)過(guò)程主要使用高斯分布函數(shù)過(guò)濾掉函數(shù)值小于0.01,或者標(biāo)準(zhǔn)方差絕對(duì)值大于1的樣本。
(3)樣本截取:因?yàn)楹髞?lái)我們優(yōu)化的版本,在(2)的基礎(chǔ)上使用均值漂移模型對(duì)歷史樣本在時(shí)間序列上進(jìn)行分段檢驗(yàn),如果有周期性變化、或者持續(xù)單調(diào)變化,則會(huì)反復(fù)迭代均值漂移模型尋找均值漂移點(diǎn),然后截取離當(dāng)前日期最近第一段(或者可以理解為最近一段時(shí)間最平穩(wěn)的樣本序列)。樣本選取還有一個(gè)需要注意的問(wèn)題,節(jié)假日和工作日的樣本要分開(kāi)選取,預(yù)測(cè)工作日的閾值要選擇工作日的樣本,節(jié)假日亦然,也就是對(duì)預(yù)測(cè)樣本從日期、周末、平穩(wěn)性三個(gè)維度拆分選取。
(4)預(yù)測(cè)基準(zhǔn)值:經(jīng)過(guò)(2)和(3)的篩選、截取,剩下的樣本基本上是最理想的樣本了,在此基礎(chǔ)上,保持樣本在日期上的順序,按指數(shù)平滑法預(yù)測(cè)目標(biāo)日期的基準(zhǔn)值,得到基準(zhǔn)值以后根據(jù)靈敏度或閾值系數(shù),計(jì)算閾值上下限。
(補(bǔ)充說(shuō)明:第四步預(yù)測(cè)基準(zhǔn)值,有些人可能之前用過(guò)指數(shù)平滑法預(yù)測(cè),跟第四步我們?cè)跇颖緳?quán)重加權(quán)時(shí)的做法很相近,但是他們預(yù)測(cè)的效果不理想,因?yàn)閷?duì)樣本整體沒(méi)有充分的過(guò)濾選取最穩(wěn)定的樣本集合)
3、變點(diǎn)檢測(cè)
動(dòng)態(tài)閾值用數(shù)據(jù)統(tǒng)計(jì)分析的辦法解決了靜態(tài)閾值的誤報(bào)漏報(bào)問(wèn)題,節(jié)省了人工維護(hù)的成本,一定程度上降低了監(jiān)控風(fēng)險(xiǎn)。不過(guò)在微量波動(dòng)、持續(xù)陰跌的故障面前,動(dòng)態(tài)閾值也有局限性,閾值區(qū)間收的太緊誤報(bào)會(huì)增多,區(qū)間寬松就會(huì)漏報(bào)一些不太顯著的故障。在review漏報(bào)case時(shí),我們從控制圖上發(fā)現(xiàn)這些微量波動(dòng)肉眼可以觀察到趨勢(shì),但是程序通過(guò)閾值區(qū)間擊穿的判斷方式很難控制,所以引入了均值漂移模型來(lái)尋找變點(diǎn)。所謂變點(diǎn),就是持續(xù)微量下跌到一定時(shí)間,累積變化量到一定程度后,使得變點(diǎn)前后監(jiān)測(cè)指標(biāo)在一段時(shí)間內(nèi)的均值發(fā)生漂移。
從上圖可以看到,均值漂移模型的算法原理,實(shí)際上是把程序不容易識(shí)別的陰跌趨勢(shì),轉(zhuǎn)換成CUSUM時(shí)間序列,它的趨勢(shì)很明顯,在變點(diǎn)左側(cè)單調(diào)增、右側(cè)單調(diào)減,CUSUM時(shí)間序列描述了被監(jiān)測(cè)時(shí)間序列每個(gè)點(diǎn)偏離均值的累積變化量,它的規(guī)律是從S0=0開(kāi)始,到Sn=0結(jié)束,變點(diǎn)兩側(cè)單調(diào)變化。
CUSUM=CumulativeSum。累積和用以在某個(gè)相對(duì)穩(wěn)定的數(shù)據(jù)序列中,檢測(cè)出開(kāi)始發(fā)生異常的數(shù)據(jù)點(diǎn)。累積和最典型的應(yīng)用是在“改變檢測(cè)”(ChangeDetection)中對(duì)參量變化的檢測(cè)問(wèn)題轉(zhuǎn)化了以后,用程序求CUSUM序列上每個(gè)點(diǎn)的一階導(dǎo)數(shù),從持續(xù)增變?yōu)槌掷m(xù)減即可判定為變點(diǎn),至于持續(xù)增、減多少個(gè)點(diǎn),由自己來(lái)設(shè)定。
關(guān)于變點(diǎn)檢測(cè)使用的mean-shift模型,大家可以去網(wǎng)上找找paper,我這臺(tái)電腦上找不到了,上面主要說(shuō)明了發(fā)現(xiàn)變點(diǎn)的原理,通俗地講,就是把問(wèn)題轉(zhuǎn)化成程序容易解決的狀態(tài)陰跌線程序不容易量化衡量、判斷,那么就用CUSUM控制圖里的“富士山”形狀去尋找,這是我個(gè)人的通俗解釋。
上面說(shuō)到我們使用CUSUM序列上每個(gè)點(diǎn)的一階導(dǎo)數(shù)來(lái)判斷拐點(diǎn)(變點(diǎn))是否到來(lái),其實(shí)圖上這個(gè)例子是比較理想的情況,在我應(yīng)用mean-shift模型時(shí),遇到了一些復(fù)雜情況,比如這個(gè)圖上就一個(gè)“山頭尖”,但是也時(shí)候會(huì)有多個(gè),這種情況下就要再次轉(zhuǎn)化問(wèn)題,比如可以把CUSUM再差分,或者以我們的做法,記錄一階導(dǎo)數(shù)的狀態(tài)值,從連續(xù)N個(gè)正值變?yōu)槌掷m(xù)N個(gè)負(fù)值時(shí)可以判定。
另外,變點(diǎn)檢測(cè)的算法實(shí)現(xiàn)我這里不方便詳細(xì)說(shuō)明,其中變點(diǎn)在反復(fù)迭代時(shí)自己可以根據(jù)實(shí)際情況設(shè)定迭代次數(shù)和置信度,有助于提高變點(diǎn)發(fā)現(xiàn)的準(zhǔn)確性。
4、智能全景
變點(diǎn)檢測(cè)彌補(bǔ)了動(dòng)態(tài)閾值對(duì)細(xì)微波動(dòng)的檢測(cè)不足,這兩種方式結(jié)合起來(lái),基本可以達(dá)到不漏報(bào)和不誤報(bào)的平衡,同時(shí)也不需要人工長(zhǎng)期維護(hù),這是智能全景監(jiān)控的基礎(chǔ)。當(dāng)監(jiān)控的人力成本節(jié)省了以后,理論上我們可以依賴智能監(jiān)控?zé)o限制的開(kāi)拓監(jiān)控視野,并將這些監(jiān)控報(bào)警連結(jié)起來(lái)分析。
監(jiān)控項(xiàng)的自動(dòng)發(fā)現(xiàn)規(guī)則,比如對(duì)維度D的指標(biāo)M做實(shí)時(shí)監(jiān)控,維度D下可能由1000種維度值,而且是不斷變化的1000種,如何讓程序自動(dòng)維護(hù)監(jiān)控項(xiàng)?你可以制定一個(gè)規(guī)則,比如指標(biāo)M>X則認(rèn)為需要監(jiān)控(畢竟不是所有的都需要監(jiān)控報(bào)警,至少在目前故障定位處理沒(méi)有完全自動(dòng)化的狀況下,報(bào)警處理也是需要一定人力的)。在滿足M>X的條件下,為了提高報(bào)警準(zhǔn)確性,我們還需要根據(jù)重要性區(qū)分報(bào)警靈敏度,也就是對(duì)于宏觀、核心的維度值我們希望能夠非常靈敏的監(jiān)控波動(dòng),而對(duì)于非重要的維度值我們預(yù)測(cè)閾值可以寬松一些,這些可以通過(guò)上面說(shuō)的閾值參數(shù)來(lái)設(shè)定。
(說(shuō)明:這個(gè)規(guī)則我這里只是舉一個(gè)例子,各位同仁可以根據(jù)自己的實(shí)際場(chǎng)景去實(shí)現(xiàn)一些規(guī)則,比如系統(tǒng)運(yùn)維層面的監(jiān)控,有些是按照距離故障發(fā)生的速度或風(fēng)險(xiǎn)系數(shù)來(lái)判斷,那么就可以圍繞這種指標(biāo)來(lái)制定,假如是對(duì)磁盤(pán)利用率的監(jiān)控,就是容量增長(zhǎng)速度與剩余資源比例作為參考等等)
以上條件都滿足了之后,智能全景監(jiān)控基本可以運(yùn)行,不過(guò)我們也曾遇到一些其他的問(wèn)題,比如業(yè)務(wù)方需要接入監(jiān)控,但是不一定是必須要我們解析日志,他們有自己的數(shù)據(jù),可能是數(shù)據(jù)庫(kù)、接口返回、消息中間件里的消息等等。所以,我們?cè)跀?shù)據(jù)接入上采用分層接入,可以從日志標(biāo)準(zhǔn)輸出格式、存儲(chǔ)的時(shí)間序列schema約定、閾值預(yù)測(cè)的接口三個(gè)層次接入使用,這個(gè)內(nèi)容將在下一次分享時(shí)由我的同事單獨(dú)介紹。這里之所以提到,是因?yàn)槿氨O(jiān)控接入的數(shù)據(jù)比較多,所以接入途徑要有層次、靈活性。
5、輔助定位
報(bào)警的最終目的是減少損失,所以定位問(wèn)題原因尤為重要。Goldeneye嘗試著用程序去執(zhí)行人工定位原因時(shí)的套路,當(dāng)然這些套路目前是通過(guò)配置生成的,還沒(méi)有達(dá)到機(jī)器學(xué)習(xí)得出來(lái)的地步,不過(guò)當(dāng)業(yè)務(wù)監(jiān)控指標(biāo)接入的越來(lái)越多,指標(biāo)體系逐漸完善以后,通過(guò)統(tǒng)計(jì)學(xué)的相關(guān)性分析,這些套路的生成也有可能讓程序去完成。這里我介紹一下,程序可以執(zhí)行的人工總結(jié)處的幾個(gè)套路。
(1)全鏈路分析
從技術(shù)架構(gòu)、業(yè)務(wù)流程的角度,我們的監(jiān)測(cè)指標(biāo)是否正常,從外部因素分析,一般會(huì)受到它的上游影響。按照這個(gè)思路,逐一分析上游是否正常,就形成了一條鏈路。這種例子很多,比如系統(tǒng)架構(gòu)的模塊A,B,C,D,E的QPS。
(插一句,全鏈路分析有兩種數(shù)據(jù)記錄方式,要么鏈路每個(gè)節(jié)點(diǎn)內(nèi)部透?jìng)?,拼接成完整鏈路處理信息記錄到最終的節(jié)點(diǎn)日志;要么異步地每個(gè)節(jié)點(diǎn)各自將信息push到中間件)
(2)報(bào)警時(shí)間點(diǎn)上發(fā)生了什么?
這是收到監(jiān)控報(bào)警后大多數(shù)人的反應(yīng),我們把運(yùn)維事件、運(yùn)營(yíng)調(diào)整事件盡可能地收集起來(lái),將這些事件地散點(diǎn)圖和監(jiān)測(cè)報(bào)警的控制圖結(jié)合起來(lái),就能看出問(wèn)題。如果程序自動(dòng)完成,就是將事件發(fā)生的時(shí)間點(diǎn)也按相同的方式歸一化到固定周期的時(shí)間點(diǎn),檢查與報(bào)警時(shí)間點(diǎn)是否吻合。
?。?)A/Btest或TopN
有些人定位問(wèn)題,使用排除法縮小出問(wèn)題的范圍。比如在維度D上指標(biāo)M有異常波動(dòng),可以將D拆分成D1,D2,D3來(lái)對(duì)比,常見(jiàn)的具體情況比如機(jī)房對(duì)照、分組對(duì)照、版本對(duì)照、終端類型對(duì)照等等,如果在監(jiān)測(cè)數(shù)據(jù)層級(jí)清晰的基礎(chǔ)上,我們可以一層一層的鉆取數(shù)據(jù)做A/Btest,直到定位到具體原因。還有一種方式,不是通過(guò)枚舉切分做A/Btest,而是直接以指標(biāo)M為目標(biāo),列出維度D的子維度D1,D2,D3,……中指標(biāo)M的TopN,找出最突出的幾項(xiàng)重點(diǎn)排查。
topn也是類似的。大家可以也能看出來(lái),智能監(jiān)控和輔助定位是需要一個(gè)清晰的數(shù)據(jù)層級(jí)和元數(shù)據(jù)管理系統(tǒng)來(lái)支撐的,這一點(diǎn)很基礎(chǔ)。
(4)關(guān)聯(lián)指標(biāo)
不同的指標(biāo)在監(jiān)控中都是持續(xù)的時(shí)間序列,有些指標(biāo)之間是函數(shù)關(guān)系,比如ctr=click/pv,click和pv的變化必然帶來(lái)ctr的變化,這種聯(lián)系是函數(shù)直接描述的。還有一些指標(biāo)的關(guān)聯(lián),無(wú)法用函數(shù)公式描述,它們之間的相關(guān)性用統(tǒng)計(jì)學(xué)指標(biāo)來(lái)衡量,比如皮爾遜系數(shù)。Goldeneye的指標(biāo)關(guān)聯(lián)依據(jù),目前還沒(méi)有自動(dòng)分析,暫時(shí)是人工根據(jù)經(jīng)驗(yàn)設(shè)置的,只是視圖讓程序去完成追蹤定位的過(guò)程,比如指標(biāo)M1出現(xiàn)異常報(bào)警后能夠觸發(fā)相關(guān)指標(biāo)RMG1/RMG2/RMG3的檢測(cè)(因?yàn)檫@些指標(biāo)可能平時(shí)不需要7*24小時(shí)監(jiān)控報(bào)警,僅在需要的時(shí)候check),以此類推逐級(jí)檢測(cè)定位。
這些方式或許大家平時(shí)也嘗試著去做過(guò)一些程序化的處理,我個(gè)人認(rèn)為關(guān)聯(lián)指標(biāo)的方式,基礎(chǔ)在于構(gòu)建指標(biāo)體系,這個(gè)構(gòu)建過(guò)程可以是人工經(jīng)驗(yàn)和程序統(tǒng)計(jì)分析的結(jié)合,指標(biāo)體系至少能夠描述指標(biāo)的分類、數(shù)據(jù)出處、具體含義、影響相關(guān)指標(biāo)的權(quán)重等等,有了這些基礎(chǔ)才能應(yīng)用統(tǒng)計(jì)學(xué)的分析方法完成。
四、難點(diǎn)
1、時(shí)間序列平穩(wěn)化
平穩(wěn)化的時(shí)間序列,對(duì)預(yù)測(cè)準(zhǔn)確性有非常重要的意義,可是我們的業(yè)務(wù)監(jiān)測(cè)時(shí)間序列恰好大多數(shù)都不是平穩(wěn)化的,以5分鐘的監(jiān)測(cè)周期為力,除了大盤(pán)及核心監(jiān)測(cè)序列,其他的時(shí)間序列都是在一定范圍內(nèi)正常波動(dòng)但總體趨勢(shì)卻是穩(wěn)定的。我們目前采用的方法是:
(1)滑動(dòng)平均,比如波動(dòng)鋸齒明顯,容易造成誤報(bào)干擾的化,則加大監(jiān)控監(jiān)測(cè)周期,將5分鐘提高到30分鐘,相當(dāng)于擬合6個(gè)時(shí)間窗口的數(shù)據(jù)來(lái)平滑時(shí)間序列。
(2)持續(xù)報(bào)警判斷,如果覺(jué)得30分鐘發(fā)現(xiàn)問(wèn)題會(huì)比較晚,可以按5分鐘檢測(cè),鋸齒波動(dòng)容易發(fā)生報(bào)警,但可以連續(xù)3次報(bào)警再發(fā)通知,這樣就避免了鋸齒波動(dòng)的誤報(bào)。
(3)對(duì)于需要均值漂移來(lái)檢測(cè)細(xì)微波動(dòng)的情況,24小時(shí)的時(shí)間序列本身有流量高峰和低谷,這種情況一般采用差分法做平滑處理,使用幾階差分自己掌握。Goldeneye沒(méi)有直接使用差分法,因?yàn)槲覀円呀?jīng)預(yù)測(cè)了基準(zhǔn)值,所以我們使用實(shí)際監(jiān)測(cè)值與基準(zhǔn)值的gap序列作為變點(diǎn)監(jiān)測(cè)的輸入樣本。
2、埋點(diǎn)代價(jià)
業(yè)務(wù)監(jiān)控的監(jiān)測(cè)數(shù)據(jù)來(lái)源主要是日志、業(yè)務(wù)系統(tǒng)模塊吐出到中間件、采集接口被push,從系統(tǒng)各模塊吐出數(shù)據(jù)到中間件似乎比直接寫(xiě)入磁盤(pán)的IO開(kāi)銷小很多,不過(guò)對(duì)于請(qǐng)求壓力比較大的系統(tǒng),開(kāi)旁路寫(xiě)出數(shù)據(jù)即使是內(nèi)存級(jí)也是有一定開(kāi)銷的。
解決這個(gè)問(wèn)題的辦法是數(shù)據(jù)采樣,對(duì)于在時(shí)間上分布均勻的監(jiān)測(cè)數(shù)據(jù),直接按百分比采樣。
3、數(shù)據(jù)標(biāo)準(zhǔn)化
雖然數(shù)據(jù)接入是分層開(kāi)放的,但是我們還是制定了標(biāo)準(zhǔn)的數(shù)據(jù)格式,比如時(shí)間序列數(shù)據(jù)存儲(chǔ)schema,可擴(kuò)展的日志消息proto格式,在這些結(jié)構(gòu)化數(shù)據(jù)的定義中,可以區(qū)分出業(yè)務(wù)線、產(chǎn)品、流量類型、機(jī)房、版本等一些標(biāo)準(zhǔn)的監(jiān)控維度信息,這樣做的目的是以后可以將這些監(jiān)測(cè)數(shù)據(jù)和故障定位的指標(biāo)相關(guān)性分析銜接起來(lái)。
但是,這些標(biāo)準(zhǔn)化的推進(jìn)需要很多參與者的認(rèn)可和支持,甚至需要他們?cè)谙到y(tǒng)架構(gòu)上的重構(gòu),看似是比較困難的。
目前可以想到的辦法,就是在旁路吐出監(jiān)測(cè)數(shù)據(jù)時(shí),以標(biāo)準(zhǔn)化的消息格式封裝,然后保證在Goldeneye的存儲(chǔ)層有標(biāo)準(zhǔn)的schema和接口訪問(wèn)。
五、今后的優(yōu)化方向
時(shí)間序列預(yù)測(cè)模型,目前的模型只考慮了日期、節(jié)假日/周末、時(shí)間段的因素,沒(méi)有年同比趨勢(shì)、大促活動(dòng)影響、運(yùn)營(yíng)調(diào)整影響的因素,需要抽象出來(lái)。
指標(biāo)相關(guān)性由統(tǒng)計(jì)分析程序來(lái)確定。