聊聊動(dòng)態(tài)基線預(yù)警,你明白了嗎?
基線告警是目前大部分?jǐn)?shù)據(jù)庫(kù)監(jiān)控軟件的最重要的功能之一,可以說(shuō),基線告警是運(yùn)維人員的眼睛和耳朵,不過(guò)搞運(yùn)維的人都為這個(gè)眼鏡耳朵傷透了腦筋,甚至很多人都被鋪天蓋地的無(wú)效告警傷害過(guò)。
基線告警雖然實(shí)現(xiàn)起來(lái)很簡(jiǎn)單,也一定是有用的,不過(guò)每個(gè)系統(tǒng)的運(yùn)行特性都不同,因此基線到底設(shè)置成多少呢是個(gè)令人頭痛的事情。IO延時(shí)的告警閾值設(shè)置為50毫秒還是20毫秒呢?如果設(shè)置為20毫秒,那么經(jīng)常出告警,但是系統(tǒng)也沒(méi)啥問(wèn)題。如果設(shè)置為50毫秒,有時(shí)候并發(fā)量高得時(shí)候,30多毫秒系統(tǒng)就出大問(wèn)題了,甚至有時(shí)候IO延時(shí)50毫秒了還沒(méi)問(wèn)題,但是有時(shí)候才30多毫秒,系統(tǒng)就掛了。
另外一種情況是,我們可能運(yùn)維了數(shù)十個(gè)甚至數(shù)百個(gè)大大小小的數(shù)據(jù)庫(kù),數(shù)據(jù)量差異很大,運(yùn)行負(fù)載也各不相同。如果只是設(shè)計(jì)幾種基線模板,適用于這么多系統(tǒng),那么肯定會(huì)遇到不太合適的情況。如果能夠根據(jù)每個(gè)系統(tǒng)的運(yùn)行狀態(tài),為每個(gè)系統(tǒng)設(shè)置一套基線,情況會(huì)好很多,但是工作量是極大的。
另外一方面,數(shù)據(jù)庫(kù)系統(tǒng)的基線并不是一成不變的,隨著系統(tǒng)負(fù)載的變化,業(yè)務(wù)增長(zhǎng),設(shè)備的老化,基線每年都在變,總不成每年都根據(jù)系統(tǒng)的情況調(diào)整一次基線?那么DBA也沒(méi)時(shí)間干別的事情了。
即使我們做了很多工作,基線告警依然不夠準(zhǔn)確,每條告警信息都去處置,肯定忙不過(guò)來(lái),很多時(shí)候我們只能忽略絕大多數(shù)告警信息。那么問(wèn)題又來(lái)了,在黃油定律的主導(dǎo)下,很可能被我們忽略的某個(gè)告警,最終真的出事了。
正是因?yàn)檫@個(gè)問(wèn)題,在設(shè)計(jì)D-SMART的告警功能的時(shí)候,基線并不是用來(lái)報(bào)警的,系統(tǒng)告警臺(tái)是不推送基線告警的,僅僅推送運(yùn)維經(jīng)驗(yàn)告警,而運(yùn)維經(jīng)驗(yàn)告警是基于一組規(guī)則的故障模型觸發(fā)的。
雖然不需要通過(guò)基線異常來(lái)產(chǎn)生系統(tǒng)告警,不過(guò)基線告警還是反映指標(biāo)是否正常的最省事的方法,在進(jìn)行診斷分析時(shí)我們還是需要判斷某個(gè)指標(biāo)是否異常。為了避免基線閾值設(shè)置的不合理問(wèn)題,指標(biāo)是否異常是通過(guò)異常檢測(cè)算法來(lái)判斷的,并不依賴(lài)于基線模板。
雖然如此,我們?cè)谙到y(tǒng)中還是設(shè)置了基線預(yù)警模板,并根據(jù)這個(gè)模板,自動(dòng)記錄基線異常的告警信息(僅僅記錄,并不推送),基線產(chǎn)生的告警主要用于日檢和月度巡檢時(shí)發(fā)現(xiàn)系統(tǒng)“可能”存在的問(wèn)題。
有一種更加靈活的基線,那就是動(dòng)態(tài)基線。最早的動(dòng)態(tài)基線的實(shí)現(xiàn)是為了解決每天白天和夜間不同的業(yè)務(wù)負(fù)載時(shí)某些指標(biāo)的合力波動(dòng)范圍的問(wèn)題的?;蛘呓鉀Q工作日與非工作日,月底業(yè)務(wù)高峰期與平時(shí)業(yè)務(wù)高峰期的差異性告警問(wèn)題。以前我們管理的系統(tǒng)比較少的時(shí)候,還可以精工細(xì)作,隨著信息系統(tǒng)規(guī)模的不斷擴(kuò)大,這種精益化運(yùn)維的模式極難持續(xù)。如何解決如今IT系統(tǒng)數(shù)量爆炸式增長(zhǎng)時(shí)加量不加價(jià),實(shí)現(xiàn)減員增效,對(duì)于大多數(shù)IT運(yùn)維部門(mén)都是一個(gè)頭疼的問(wèn)題。如果這一切能夠變成自動(dòng)的,那么就可以解決一個(gè)大問(wèn)題了。
上圖是我們實(shí)驗(yàn)室的一個(gè)基線告警的截圖,告警的閾值很多都是有零有整的,這些閾值并不是配置出來(lái)的,而是動(dòng)態(tài)計(jì)算出來(lái)的。在實(shí)現(xiàn)動(dòng)態(tài)基線的時(shí)候,我剛開(kāi)始的設(shè)想是不設(shè)置基線模板,而是通過(guò)異常檢測(cè)算法自動(dòng)計(jì)算異常,發(fā)現(xiàn)異常就告警。不過(guò)研發(fā)部門(mén)認(rèn)為這樣做計(jì)算量太大,會(huì)導(dǎo)致Monitor任務(wù)變得不穩(wěn)定。因此做了一個(gè)變通,那就是將異常檢測(cè)算法改造后動(dòng)態(tài)生成某個(gè)指標(biāo)的基線閾值。這樣處理后,Monitor在分析剛剛采集回來(lái)的數(shù)據(jù)的時(shí)候,就可以按照傳統(tǒng)的基線模板的模式去處理了。
在配置基線告警的時(shí)候,我們引入了一個(gè)虛擬模板-“智能基線告警模板”,這個(gè)模板不需要預(yù)先配置,而是系統(tǒng)自動(dòng)生成的。生成這個(gè)模板的規(guī)則在圖數(shù)據(jù)庫(kù)中以圖譜的方式存儲(chǔ),每天固定的時(shí)間里,后臺(tái)任務(wù)會(huì)自動(dòng)計(jì)算這個(gè)模板所需要的閾值,然后將計(jì)算結(jié)果存儲(chǔ)到Redis中,供Monitor做基線評(píng)估時(shí)使用。
因此當(dāng)系統(tǒng)剛剛上線的時(shí)候,這個(gè)模板還是一個(gè)虛擬的,沒(méi)有真實(shí)數(shù)據(jù)的模板,等系統(tǒng)跑上十天八天,數(shù)據(jù)就比較精準(zhǔn)了,此時(shí)這個(gè)智能模板就可以發(fā)揮作用了。目前智能基線模板的功能還是BETA階段,使用起來(lái)還不夠方便。比如剛剛接入系統(tǒng)時(shí)還不能直接使用該模板,還需要使用常規(guī)模板,系統(tǒng)運(yùn)行10天以后,模板數(shù)據(jù)比較準(zhǔn)確了,才能切換。這樣使用起來(lái)也不夠方便,如果我們有100多套數(shù)據(jù)庫(kù),那么配置起來(lái)還是挺費(fèi)勁的。
目前傳統(tǒng)模板提供了一個(gè)對(duì)象應(yīng)用功能,可以實(shí)現(xiàn)一鍵批量綁定,而智能模板是一個(gè)虛擬模板,目前在模板管理中是看不見(jiàn)的,因此無(wú)法實(shí)現(xiàn)一鍵綁定,后續(xù)我們將在V2.2中提供一個(gè)這樣的功能。這樣系統(tǒng)剛剛接入時(shí)可以使用傳統(tǒng)基線模板,半個(gè)月后,再手工設(shè)置為智能基線模板。甚至今后還可以提供更為方便的模式,在設(shè)置基線模板的時(shí)候提供一個(gè)選型,選擇參數(shù),10天后自動(dòng)切換為智能基線模板。
而在動(dòng)態(tài)基線的自適應(yīng)能力方面,也仍然有著極大的提升空間,針對(duì)不同的行業(yè)用戶(hù)的不同特點(diǎn),其基線計(jì)算是不同的,比如券商的核心交易系統(tǒng),只有在開(kāi)市期間的負(fù)載才是有意義的,你如果把其他時(shí)段的數(shù)據(jù)加入進(jìn)來(lái)計(jì)算,肯定會(huì)影響計(jì)算結(jié)果的準(zhǔn)確性。因此在系統(tǒng)中加入“系統(tǒng)特征”這個(gè)參數(shù)十分重要?!跋到y(tǒng)特征”可以微調(diào)算法,讓算法更加準(zhǔn)確。
運(yùn)維自動(dòng)化系統(tǒng),需要帶給DBA的是準(zhǔn)確高效的報(bào)警,便捷的操作。想要做好這一點(diǎn)真的不易,因?yàn)榇蟛糠值拈_(kāi)發(fā)人員都是脫離運(yùn)維第一線很長(zhǎng)時(shí)間或者甚至沒(méi)有做過(guò)一天真正的運(yùn)維工作。因此開(kāi)發(fā)人員可能無(wú)法感知到運(yùn)維人員的真實(shí)需求。做好一個(gè)運(yùn)維自動(dòng)化工具的項(xiàng)目還是比較容易的,因?yàn)榭蛻?hù)會(huì)不斷根據(jù)自己的運(yùn)維習(xí)慣來(lái)提出修改意見(jiàn),我們總是能把系統(tǒng)修改好;而要做一個(gè)好用的運(yùn)維自動(dòng)化產(chǎn)品就不易了,系統(tǒng)功能,使用習(xí)慣,面臨的差異化的系統(tǒng)都讓這項(xiàng)工作變得復(fù)雜很多。因此我們堅(jiān)定的開(kāi)啟了社區(qū)版的發(fā)布,希望通過(guò)社區(qū)的力量,幫我們把產(chǎn)品打磨的更好。