基於統計的預警:同環比預警實現深度剖析

宜信技術學院發表於2019-10-24

一、UAV預警功能簡介

UAV.Monitor提供了對全維監控指標的預警功能,各型別的監控指標均可配置預警策略,當預警策略被觸發後,可透過郵件、HTTP呼叫等方式進行通知報警,並會根據預警時間頻率等對報警動作進行壓制。

預警分為流式預警、統計預警以及混合預警三種。

  • 流式預警會對採集到的每一個監控指標資料進行預警判斷,達到實時預警的目的;
  • 統計預警是對指標在固定時間段統計值的預警,通常都是定時進行預警判定;
  • 混合預警則是將流式預警與統計預警結合進行預警。

同環比預警就屬於統計預警的一種。

二、什麼是同環比預警

首先介紹一下同環比的概念,同環比描述的是統計資料的增/降幅度,即某一時間段(本期)的統計結果與之前另一相同長度時間段(基期)的比較結果。同比表示的是本期與上一個同期的比較,比如今年4月與去年4月比較,今天8點到9點與昨天8點到9點比較;環比表示的是本期與上期的比較,如今年4月與今年3月比較,今天8點到9點與7點到8點比較。而同環比預警則是對一段時間內監控指標的統計結果同比上一同期(或環比上期)的增/降幅進行預警,即指標的同/環比計算結果超過了策略指定的增/降幅度則進行報警。

三、同環比預警的實現

3.1 預警策略

預警條件與動作由預警策略定義,預警策略的結構如下:

strategy
{
"type":"",
"instances":[],
"conditions":[],
"relations":[],
"actions":[]
}
condition
{
"expressions":[]
}

一個預警策略(strategy)包含多個預警條件(condition),condition是最小的預警判定元,每個condition可包含多個表示式(Expression);預警表示式定義了單一預警條件,表示式又分為統計(stat)表示式和流式(stream)表示式兩種,分別對應統計預警條件與流式預警條件;relations中各relation對應各condition中策略表示式Expression的邏輯判斷關係。instances表示該預警影響的例項,actions表示預警觸發後的報警動作,type表示預警策略的型別,type根據包含的表示式種類分為含統計表示式的統計(stat)策略和只含流式表示式的流式(stream)策略。

3.2 同環比預警表示式定義

同環比的計算公示為:同/環比值=本期數-基期數,同/環比率=(本期數-基期數)÷基期數×100%。根據計算公式,我們需要的輸入條件是:

1)需預警的指標名。

監控的各項數值型指標均可作為預警的指標,如cpu、訪問量等。

2)本期時間段與基期時間段。

由於預警是一個比較實時性的動作,所以我們把時間段限制在了24小時內,對於大於24小時比如一週或一個月的統計值或同環比,以週報或月報的形式直接統計效果更好。基期時間則根據同比周期或環比間隔計算得出。

3)指標在時間段內統計值的計算方式。

同環比比較的是指標在一段時間內的統計值,統計方式有求和、求平均等。由於UAV的監控歷史值都儲存在opentsdb,可透過opentsdb自帶的聚合操作進行統計值的計算。

4)預警閾值

增/降幅上限,可設定為數值型閾值或百分比閾值。

同環比預警屬於統計預警,所以同環比預警表示式也是統計(stat)型別的表示式。綜上,同環比預警表示式結構如下。  

expression
{      
"type":"stat",
"arg":""            //預警指標
"time_from":""  //初始時間段-from
"time_to":""      //初始時間段-to
"interval":""      //環比間隔(同比則此項為空)
"unit":""           //同比周期(環比則此項為空)
"aggr":""          //統計方式
"upperLimit":"" //比值上限
"lowerLimit":"" //比值下限
}

3.3 預警策略判定原理

預警模組透過流式條件或定時任務觸發對預警表示式的判定,過程如下

當預警策略判定被觸發時,各condition獨立進行判定,遍歷其中的各個Expression進行判定,然後將Expression判定結果按relation定義的邏輯關係進行組合判斷,若結果為true則將結果彙總到策略判定結果,然後整合策略判定結果進行報警。

3.4 同環比預警判定原理

同環比預警屬於統計預警的一種,所以同環比的預警流程就是統計預警的預警流程,預警模組啟動一個用於統計策略判定的Timer,每分鐘(因為統計表示式的時間都是以分鐘為單位,所以每分鐘輪詢一次即可)輪詢一次策略,並觸發統計策略的判定。

當策略被觸發後,便會遍歷各condition下的表示式,進行一一判定,定時任務觸發表示式判定的規則如下。

當最小判定元condition內只有統計表示式時,遍歷判定各統計表示式,首先會判定是否是統計表達示的判定時間,同環比表示式根據屬性值time from,timeto和環比間隔或同比周期來確定。若不是判定時間,考慮到多個統計表示式的組合判定情況時,各表示式的判定時間可能不一致,我們會取出快取中上次的未過期的判定結果返回。若是判定時間,則進行同環比計算判定,構造opentsdb查詢語句呼叫API查詢本期值與基期值,計算得出同/環比值(率),並與閾值進行比較得出判定結果,結果會快取到redis,這裡也會將此condition的判定置為有效,因為如果condition裡的表示式都未達到判定時間,這次判定其實是無效的。

若condition內既有統計表示式又有流式表示式(即為混合預警)時,統計表示式會進行正常的判定運算操作,但對於定時任務觸發的流式表示式則直接返回false,因此condition判定結果也為false。

混合預警的最終判定是在流式條件觸發預警策略時產生,condition中的流式表示式的判定會正常進行,統計表示式的判定過程如下

如果流式條件的觸發時間在表示式的判定時間(誤差一分鐘)內,會直接從快取獲取由定時任務觸發策略時計算得出的未過期的判斷結果返回,返回結果便可與流式表示式的結果一同得出混合預警的結果。

判定結果返回後,會根據預警表示式資訊及判定結果生成報警資訊。如圖

以上便是同環比預警的完整實現過程。

四、同環比預警的應用

實時預警關注的是系統的瞬時狀態,同環比預警則反映了指標的變化趨勢以及與過去同期相比的波動狀態。比如系統服務訪問量異常檢測,由於系統量可能根據時間有一定的規律性,如週一到週五訪問量大,週末訪問量小。若採用流式預警只能定義一個預警閾值,不能根據不同時間設定不同的預警閾值,這時可以在業務高峰時間對系統訪問量指標配置按周同比預警,便可對業務訪問量異常做出及時有效的報警。

有時單一的同環比預警也不足夠,比如剛才的情況下,如果我們不僅關心訪問量的相對波動還需要報警時的平均響應時間大於某一閾值才報警,這時就需要與流式預警進行結合預警。

同環比預警豐富了預警體系,與流式預警相結合更有助於對系統異常與業務異常的及時精確發現。

下載UAVStack的原始碼()

來源:宜信技術學院


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69918724/viewspace-2661237/,如需轉載,請註明出處,否則將追究法律責任。

相關文章