您好,登錄后才能下訂單哦!
UAV.Monitor提供了對全維監控指標的預警功能,各類型的監控指標均可配置預警策略,當預警策略被觸發后,可通過郵件、HTTP調用等方式進行通知報警,并會根據預警時間頻率等對報警動作進行壓制。
預警分為流式預警、統計預警以及混合預警三種。
同環比預警就屬于統計預警的一種。
首先介紹一下同環比的概念,同環比描述的是統計數據的增/降幅度,即某一時間段(本期)的統計結果與之前另一相同長度時間段(基期)的比較結果。同比表示的是本期與上一個同期的比較,比如今年4月與去年4月比較,今天8點到9點與昨天8點到9點比較;環比表示的是本期與上期的比較,如今年4月與今年3月比較,今天8點到9點與7點到8點比較。而同環比預警則是對一段時間內監控指標的統計結果同比上一同期(或環比上期)的增/降幅進行預警,即指標的同/環比計算結果超過了策略指定的增/降幅度則進行報警。
預警條件與動作由預警策略定義,預警策略的結構如下:
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)策略。
同環比的計算公示為:同/環比值=本期數-基期數,同/環比率=(本期數-基期數)÷基期數×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":"" //比值下限 }
預警模塊通過流式條件或定時任務觸發對預警表達式的判定,過程如下
當預警策略判定被觸發時,各condition獨立進行判定,遍歷其中的各個Expression進行判定,然后將Expression判定結果按relation定義的邏輯關系進行組合判斷,若結果為true則將結果匯總到策略判定結果,然后整合策略判定結果進行報警。
同環比預警屬于統計預警的一種,所以同環比的預警流程就是統計預警的預警流程,預警模塊啟動一個用于統計策略判定的Timer,每分鐘(因為統計表達式的時間都是以分鐘為單位,所以每分鐘輪詢一次即可)輪詢一次策略,并觸發統計策略的判定。
當策略被觸發后,便會遍歷各condition下的表達式,進行一一判定,定時任務觸發表達式判定的規則如下。
當最小判定元condition內只有統計表達式時,遍歷判定各統計表達式,首先會判定是否是統計表達示的判定時間,同環比表達式根據屬性值time from,timeto和環比間隔或同比周期來確定。若不是判定時間,考慮到多個統計表達式的組合判定情況時,各表達式的判定時間可能不一致,我們會取出緩存中上次的未過期的判定結果返回。若是判定時間,則進行同環比計算判定,構造opentsdb查詢語句調用API查詢本期值與基期值,計算得出同/環比值(率),并與閾值進行比較得出判定結果,結果會緩存到redis,這里也會將此condition的判定置為有效,因為如果condition里的表達式都未達到判定時間,這次判定其實是無效的。
若condition內既有統計表達式又有流式表達式(即為混合預警)時,統計表達式會進行正常的判定運算操作,但對于定時任務觸發的流式表達式則直接返回false,因此condition判定結果也為false。
混合預警的最終判定是在流式條件觸發預警策略時產生,condition中的流式表達式的判定會正常進行,統計表達式的判定過程如下
如果流式條件的觸發時間在表達式的判定時間(誤差一分鐘)內,會直接從緩存獲取由定時任務觸發策略時計算得出的未過期的判斷結果返回,返回結果便可與流式表達式的結果一同得出混合預警的結果。
判定結果返回后,會根據預警表達式信息及判定結果生成報警信息。如圖
以上便是同環比預警的完整實現過程。
實時預警關注的是系統的瞬時狀態,同環比預警則反映了指標的變化趨勢以及與過去同期相比的波動狀態。比如系統服務訪問量異常檢測,由于系統量可能根據時間有一定的規律性,如周一到周五訪問量大,周末訪問量小。若采用流式預警只能定義一個預警閾值,不能根據不同時間設置不同的預警閾值,這時可以在業務高峰時間對系統訪問量指標配置按周同比預警,便可對業務訪問量異常做出及時有效的報警。
有時單一的同環比預警也不足夠,比如剛才的情況下,如果我們不僅關心訪問量的相對波動還需要報警時的平均響應時間大于某一閾值才報警,這時就需要與流式預警進行結合預警。
同環比預警豐富了預警體系,與流式預警相結合更有助于對系統異常與業務異常的及時精確發現。
下載UAVStack的源碼(https://github.com/uavorg)
來源:宜信技術學院
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。