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