基礎(chǔ)監(jiān)控的同比告警主要是針對服務(wù)器監(jiān)控采集的指標(biāo),包括負(fù)載(load1/load5/load15)、平均CPU使用率、內(nèi)存使用率、內(nèi)外網(wǎng)流量、端口數(shù)量等,具體采集方法可參考《基礎(chǔ)監(jiān)控-服務(wù)器監(jiān)控》。

一、告警原理

多個指標(biāo)每分鐘1個數(shù)據(jù),比較當(dāng)前分鐘的前10分鐘的7天平均值,如果幅度超過100%并且絕對值相差達到M則算是一次異常,包括上升/下降異常,如果一個指標(biāo)持續(xù)兩次上升異?;蛘叱掷m(xù)兩次下降異常(不包括先上升后下降或者先下降后上升情況)則開始告警給機器的對應(yīng)負(fù)責(zé)人(運維/開發(fā))。例如當(dāng)前是10號11:00,則比較的是10:59,10:58...10:50共10分鐘的最近7天的平均值,例如10:59則是10號、9、8...4共7天的10:59這個點的數(shù)據(jù)的平均值。實際情況一般是第二分鐘才解析了前一分鐘的數(shù)據(jù),相當(dāng)于當(dāng)前是11點,則解析的是10:59這個點和它之前的10分鐘的7天平均值的比較。

二、數(shù)據(jù)來源

基礎(chǔ)監(jiān)控-服務(wù)器監(jiān)控每分鐘會采集一份數(shù)據(jù)保存到Redis中,保存格式是 reportTime - hash,hash的格式是{ip1:{item1:value, item2:value2...}, ip2:{item1:value, item2:value2...}, ip3...},則每分鐘一個redis hash,共7天 7*1440=10080個數(shù)據(jù)。實際情況保存的時候會多保留10分鐘的數(shù)據(jù),即7天+10分鐘;由于reportTime是根據(jù)機器的實際時間來上報(這樣畫圖才能保證是準(zhǔn)確的),而某些機器沒有NTP服務(wù)器或者其他原因?qū)е聲r間不準(zhǔn),則reportTime則又會多種多樣,所以導(dǎo)致的結(jié)果是redis的hash會變多一些,當(dāng)然這并不影響我們的數(shù)據(jù)獲取,因為整個同比告警就是根據(jù)畫圖來比較的,畫圖采用的是reportTime。采用hash保存到redis則不用每個ip讀取一次redis,可以減少N次網(wǎng)絡(luò)IO,大大提高程序速度。由于redis占據(jù)內(nèi)存較多,大概10G左右,需要調(diào)整redis配置文件maxmemory的大小,不然redis會隨機刪除設(shè)置自動過期的key。

三、程序設(shè)計

1、DB設(shè)計

需要數(shù)據(jù)來源保存(redis)、異常展示表(mysql)、閾值配置表(mysql)、上次狀態(tài)(redis)。異常展示表保存所有ip的異常描述信息、異常持續(xù)時間,可在頁面展示;閾值配置表保存所有ip的閾值配置信息,每個ip的異常比率、各個指標(biāo)的絕對值差、是否需要監(jiān)控等;上次狀態(tài)則用來判斷是否需要告警的,持續(xù)2次同類異常則告警,使用redis保存即可。

復(fù)制代碼
mysql> show tables; +-----------------------------------+
| Tables_in_machineMon
        
		

網(wǎng)友評論