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

UAVStack預警功能簡介git

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

預警分爲流式預警、統計預警以及混合預警三種:express

  • 流式預警會對採集到的每個監控指標數據進行預警判斷,達到實時預警的目的。
  • 統計預警是對指標在固定時間段統計值的預警,一般都是定時進行預警斷定。
  • 混合預警則是將流式預警與統計預警結合進行預警。同環比預警屬於統計預警的一種。

什麼是同環比預警緩存

首先介紹一下同環比的概念,同環比描述的是統計數據的增/降幅度,即某一時間段(本期)的統計結果與以前另外一相同長度時間段(基期)的比較結果。架構

同比表示的是本期與上一個同期的比較,好比今年4月與去年4月比較,今天8點到9點與昨天8點到9點比較;環比表示的是本期與上期的比較,現在年4月與今年3月比較,今天8點到9點與7點到8點比較。網站

同環比預警則是對一段時間內監控指標的統計結果同比上一同期(或環比上期)的增/降幅進行預警,即指標的同/環比計算結果超過了策略指定的增/降幅度則進行報警。orm

同環比預警的實現cdn

1.預警策略blog

預警條件與動做由預警策略定義,預警策略的結構以下:文檔

strategy

{

"type":"",

"instances":[],

"conditions":[],

"relations":[],

"actions":[]

}

condition {

"expressions":[]

}

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

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.預警策略斷定原理

預警模塊經過流式條件或定時任務觸發對預警表達式的斷定,過程以下:

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

4.同環比預警斷定原理

同環比預警屬於統計預警的一種,因此同環比的預警流程就是統計預警的預警流程,預警模塊啓動一個用於統計策略斷定的Timer,每分鐘(由於統計表達式的時間都是以分鐘爲單位,因此每分鐘輪詢一次便可)輪詢一次策略,並觸發統計策略的斷定。

當策略被觸發後,便會遍歷各condition下的表達式,進行一一斷定,定時任務觸發表達式斷定的規則以下:

當最小斷定元condition內只有統計表達式時,遍歷斷定各統計表達式,首先會斷定是不是統計表達式的斷定時間,同環比表達式根據屬性值time_from,time_to和環比間隔或同比周期來肯定。

若不是斷定時間,考慮到多個統計表達式的組合斷定狀況時,各表達式的斷定時間可能不一致,咱們會取出緩存中上次的未過時的斷定結果返回。

如果斷定時間,則進行同環比計算斷定,構造OpenTSDB查詢語句調用API查詢本期值與基期值,計算得出同/環比值(率),並與閾值進行比較得出斷定結果,結果會緩存到Redis,這裏也會將此condition的斷定置爲有效,由於若是condition裏的表達式都未達到斷定時間,此次斷定實際上是無效的。

若condition內既有統計表達式又有流式表達式(即爲混合預警)時,統計表達式會進行正常的斷定運算操做,但對於定時任務觸發的流式表達式則直接返回false,所以condition斷定結果也爲false。

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

若是流式條件的觸發時間在表達式的斷定時間(偏差一分鐘)內,會直接從緩存獲取由定時任務觸發策略時計算得出的未過時的判斷結果返回,返回結果即可與流式表達式的結果一同得出混合預警的結果。

斷定結果返回後,會根據預警表達式信息及斷定結果生成報警信息。如圖:

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

**同環比預警的應用 **

實時預警關注的是系統的瞬時狀態,同環比預警則反映了指標的變化趨勢以及與過去同期相比的波動狀態。

好比系統服務訪問量異常檢測,因爲系統量可能根據時間有必定的規律性,如週一到週五訪問量大,週末訪問量小。若採用流式預警只能定義一個預警閾值,不能根據不一樣時間設置不一樣的預警閾值,這時能夠在業務高峯時間對系統訪問量指標配置按周同比預警,即可對業務訪問量異常作出及時有效的報警。

有時單一的同環比預警也不足夠,好比剛纔的狀況下,若是咱們不只關心訪問量的相對波動還須要報警時的平均響應時間大於某一閾值才報警,這時就須要與流式預警進行結合預警。

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

官方網站 開源地址

UAVStack已在Github上開放源碼,並提供了安裝部署、架構說明和用戶指南等雙語文檔,歡迎訪問-給星-拉取~~~

掃一掃下方二維碼,關注一個不會讓你失望的公衆號

相關文章
相關標籤/搜索