在大數據的背景下,隨著指標的數量增加、指標波動幅度變大,設置固定閾值的方式顯得日漸乏力。為此,本文在公司自動化運維產品平臺上,通過研究動態基線告警的算法,將實時指標數據進行處理并生成告警內容。目前已有的基線計算算法,主要分為兩種,即靜態基線算法和動態基線算法,不同指標適用一種或多種算法,用于針對不同的監控目的。
1.動態基線算法
根據現場人員的運維的經驗以及實際監控場景,目前場景中主要需要知道歷史曲線中最大值、最小值、平均值以及符合正態分布的標準差。本文針對具體的場景結合概率法給出了一種動態基線算法。
首先為了提高算法的穩定性,即減少數據異常對動態基線的影響,需要對數據先進行一些預處理,主要的目的是去除數據中極不合理的數據,本文采用去除最大最小值的方式來進行預處理。為了預處理的同時,減少對數據過多的干涉,本文除去最大值和最小值的個數為5%,且向下取整,對于小于1個,則按1個計算。即樣本如果為10個,則應該對數據去除1個最大值(10乘以0.05為0.5個,由于0.5小于1應當按1個進行計算),以及1個最小值(10乘以0.05為0.5個,由于0.5小于1應當按1個進行計算)。
假設指標為X,指標值每分鐘統計一次即每分鐘指標值為value,動態基線配置的統計時長為q分鐘,一天的區間數量為m,去除最大值和最小值的個數y的公式為
區間內數據經過預處理之后有效樣本數為n,則指標X的動態基線的最大值max計算公式為:
指標X的動態基線的最小值min計算公式為:
指標X的動態基線的平均值μ計算公式為:
指標X的動態基線的標準差σ計算公式為:
在真實的應用場景中,往往數據不能按理想的狀態分布,真實數據中經常會存在一些異常值,比如某一個時間點網絡波動導致一個時間點的指標值抖動特別明顯,同時也存在數據不是一直連續存在斷點的情況,有的是場景本身如此,就像某個業務可能某一段時間一直有人辦理,而另一個時間段這個業務很少有人辦理或者沒有人辦理,數據的不連續性以及數據的異常值都讓動態基線的準確性有所降低。本文采用了插值法對數據進行填充以及降噪處理,來提高數據的完整性,使基線曲線更加平滑。
對數據缺失的情況,有兩種方式進行填充,直接采用相鄰的值進行填充或者用平均值進行數據的填充,以保證數據的完整及連續性。考慮到實際生產中的數據,一般都會存在異常數據,此時如果采用相鄰數據插值法,可能會用異常數據來進行填充,導致基線的可參考性變差,從而影響告警的準確性。本文采取了用平均值來填充斷點數據的方式,以減少對原有數據穩定性的影響。
而對于異常數據,具體的降噪處理為,首先,計算出每組指標的平均值、最大值、最小值以及標準差。其次,在數據符合正態分布的情況下(本文的數據為現場主機性能數據以及現場業務辦理的日志數據,經過對歷史數據的測試符合正態分布),根據‘小概率事件’(事件發生概率小于0.05)以及‘3σ-原則’,一般的采用平均值代替或者邊界值μ-3σ或μ+3σ進行替換,以保證數據不會大幅度的被修改,且修正后依然滿足之前的正態分布,為了保持數據的原始屬性本文采用邊界值來對數據進行修正。
對于異常數據的判斷,本文采用‘3σ-原則’。計算出符合正態分布的范圍(μ-3σ,μ+3σ),根據正態分布的原理,符合正態分布的數據落在這個范圍概率為99.73%,如果數據落在(μ-3σ,μ+3σ)范圍內則認為數據可以作為基線計算,否則需要對數據進行降噪處理。
為了保持原有數據的真實性,具體的消除波峰以及填波谷的方法為,判斷每個指標值value,如果value大于μ+3σ,則用μ+3σ進行代替;如果小于μ-3σ,則用μ-3σ進行代替;其余情況保持原值。
數據填充以及降噪公式為:
為了將指標的動態基線更小粒度化,需要將指標的Key按實際的場景進行設計,并且各個Key之間的基線計算互不影響。而Flink本身提供的KeyedStream,通過KeySelector函數來將數據流進行分流,每個Key對應一條屬于自己的流,并且各個流互不影響,恰好與動態基線的這一設計思路一致。而且Flink本身框架的高吞吐性,很好的保證動態基線生成的效率。
動態基線的核心思想是結合時間計算出各個時間區間的理想基線,因此需要根據時間來劃分窗口,各個窗口有自己的一個基線數據。Flink的核心API就包含了窗口(window)機制,并且有水位(Watermarkers)機制來保證數據能正確的劃分到自己的窗口進行收集、運算以及清除。
基于Flink的動態基線生成的具體步驟為:
step1: 設置Flink的source函數,即消費已有的歷史數據;
step2: 根據數據的時間字段,定時更新Flink的Watermarkers,本文使用每來一條數據就進行水位更新的方式;
step3: 定義KeySelector函數,對數據流按指標Key進行分流,保證各個Key之間相互獨立;
step4: 每條KeyedStream設置一個基于業務時間(EventTime)的窗口,窗口大小可根據實際情況進行定義,本文按2小時進行劃分,即每兩小時匯總一次窗口;
step5: 窗口匯總時表示該時間區間的數據都已經到齊,此時觸發aggregate的匯總函數,函數的功能為本文給出的動態基線算法;
step6: 統計出基線數據,保存。
基于Flink的動態基線生成示例圖如圖1。
圖1基于Flink的動態基線生成示例圖
圖1為了展示動態基線生成的數據流轉圖,所以給出的并行度為1,實際環境中的動態基線程序需要根據現場的機器性能以及數據量等因素,來調節并行度。
表1BOSS_BIL與APP_INTF調用量2小時統計時長的動態基線示例
時段 | 平均值 | 最大值 | 最小值 | 標準差 |
00:00 | 199.00 | 309.00 | 76.00 | 67.87 |
02:00 | 56.67 | 134.00 | 3.00 | 34.97 |
04:00 | 15.63 | 40.00 | 1.00 | 9.03 |
06:00 | 764.65 | 1345.00 | 286.00 | 246.00 |
08:00 | 1384.60 | 2080.00 | 596.00 | 303.03 |
10:00 | 978.43 | 1687.00 | 453.00 | 276.04 |
12:00 | 436.00 | 1479.00 | 3.00 | 451.77 |
14:00 | 354.78 | 704.00 | 31.00 | 168.06 |
16:00 | 262.03 | 563.00 | 68.00 | 143.99 |
18:00 | 296.07 | 648.00 | 72.00 | 147.67 |
20:00 | 313.31 | 760.00 | 149.00 | 149.85 |
22:00 | 345.75 | 803.00 | 160.00 | 153.66 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/129965.html
摘要:每個在簡潔性和表達性之間提供不同的權衡,并針對不同的用例。在這些中處理的數據類型在相應的編程語言中表示為類。該是為中心的聲明性表,其可被動態地改變的表表示流時。這種抽象在語義和表達方面類似于,但是將程序表示為查詢表達式。 1 意義 1.1 分層的 APIs & 抽象層次 Flink提供三層API。 每個API在簡潔性和表達性之間提供不同的權衡,并針對不同的用例。 showImg(ht...
摘要:再如通過處理流數據生成簡單的報告,如五分鐘的窗口聚合數據平均值。復雜的事情還有在流數據中進行數據多維度關聯聚合塞選,從而找到復雜事件中的根因。因為各種需求,也就造就了現在不斷出現實時計算框架,而下文我們將重磅介紹我們推薦的實時計算框架。 前言 先廣而告之,本文摘自本人《大數據重磅炸彈——實時計算框架 Flink》課程第二篇,內容首發自我的知識星球,后面持續在星球里更新,這里做個預告,今...
摘要:由于配置流是從關系型數據庫中讀取,速度較慢,導致實時數據流流入數據的時候,配置信息還未發送,這樣會導致有些實時數據讀取不到配置信息。從數據庫中解析出來,再去統計近兩周占比。 showImg(https://segmentfault.com/img/remote/1460000019367651); Flink 學習項目代碼 https://github.com/zhisheng17/f...
摘要:默認情況下,當數據元到達時,分段接收器將按當前系統時間拆分,并使用日期時間模式命名存儲區。如果需要,可以使用數據元或元組的屬性來確定目錄。這將調用傳入的數據元并將它們寫入部分文件,由換行符分隔。消費者的消費者被稱為或等。 1 概覽 1.1 預定義的源和接收器 Flink內置了一些基本數據源和接收器,并且始終可用。該預定義的數據源包括文件,目錄和插socket,并從集合和迭代器攝取數據...
摘要:由于配置流是從關系型數據庫中讀取,速度較慢,導致實時數據流流入數據的時候,配置信息還未發送,這樣會導致有些實時數據讀取不到配置信息。從數據庫中解析出來,再去統計近兩周占比。 Flink 學習 https://github.com/zhisheng17/flink-learning 麻煩路過的各位親給這個項目點個 star,太不易了,寫了這么多,算是對我堅持下來的一種鼓勵吧! showI...
閱讀 1346·2023-01-11 13:20
閱讀 1684·2023-01-11 13:20
閱讀 1132·2023-01-11 13:20
閱讀 1858·2023-01-11 13:20
閱讀 4100·2023-01-11 13:20
閱讀 2704·2023-01-11 13:20
閱讀 1385·2023-01-11 13:20
閱讀 3597·2023-01-11 13:20