天天看點

【監控雜談之異常檢測】什麼是異常寫在系列開頭

集團在異常檢測方面做了很多積澱,本系列将開始總結一些常見的問題以及解決辦法,為後來人或者感興趣的人快速上手,權當抛磚引玉,如有興趣或者問題可以留言或@冷愁

本章作為整體概述,站在運維的角度、日常應急處理的視角,描述現有遇到的問題,在後續的篇章中會針對每一個遇到的問題提供響應的解決方案

在開始之前,我們需要聊聊什麼是異常檢測。

引用維基百科的說法

in data mining, anomaly detection (also outlier detection) is the identification of items, events or observations which do not conform to an expected pattern or other items in a dataset. -wikipedia anomaly detection 在資料挖掘領域,異常檢測(異常點檢測)是在某個資料集中區分出不服從于已知或預期的模式(或分布)的條目、事件或者觀測點。

hawkins [hawkins 1980]的定義:

"an outlier is an observation which deviates so much from the other observations as to arouse suspicions that it was generated by a different mechanism " 異常點就是相對于其他觀測點來看有明顯偏離的點,以至于懷疑其與正常點來說不屬于同一個産生來源。

上述是較為直覺的異常點定義,但是如何轉換成機器語言或者監控方法?

主流的異常檢測方案大體有以下幾種:

基于密度的異常檢測(lof)

基于統計的異常檢測(holt-winters、confidence interval)

基于偏差的異常檢測(同比、環比、基線比)

基于距離的異常檢測(knn、isolation forest)

目前主要還是根據下面的統計學定義來的:

正常的資料基于一個已知分布,例如一些給定的統計學分布(泊松分布、正态分布) 異常就是明顯偏離這個已知的分布的部分或點

再思考一個點,異常的本質是什麼?

監控名額(就是一條曲線)的本質實際上是一個資訊集合,大緻分為兩部分的資訊

基于時間次元的(自身曆史的資料)

基于同系列的次元(例如各個銀行管道,互相之間存在着資訊,一個曲線下跌,其他曲線沒跌,即為異常)

而以上兩個次元中,2的資訊不一定存在,如果僅僅從1看,那麼可以通俗的了解為:

有人要問了,我剛做了變更、重新開機操作,報警報出來了,這就是無效的報警呀?

是以我們為了後續的工作,必須要将此分解開來:

進而将監控系統分為1. 異常檢測 2. 報警訂閱兩部分

在實際應用當中,季節性是非常普遍存在的,例如下圖中,紅标的地方是否是異常呢?

【監控雜談之異常檢測】什麼是異常寫在系列開頭

貌似看起來是下跌了。但是再看過去幾日的資料:

【監控雜談之異常檢測】什麼是異常寫在系列開頭

發現每天的時間點都會下跌,也就是說,這并不是異常。

這就是季節性或是周期性。

季節周期是我們監控中首先要解決的第一個問題,因為如果季節性解決不好,會導緻我們的監控有大量的誤報,具體表現就是每天固定的時間點都會報警,但并不是異常

什麼是異方差?

方差我們可以直覺的了解為曲線的抖動(波動)幅度,異方差就是指根據時間的不同,曲線或資料集的方差是不相同的。

我們還是從圖上來看:

【監控雜談之異常檢測】什麼是異常寫在系列開頭

每天淩晨和白天的抖動幅度不一緻,明顯晚上抖動幅度比白天大。

大家應該能看出來問題了,如果異方差性存在,就會導緻報警政策在白天、晚上的報警效果不同,這也是現在遇到的很大的問題,明明白天報警效果很好,但是到了晚上報警就非常多!

什麼叫複雜周期性?跟(1)的周期性有什麼差別?

【監控雜談之異常檢測】什麼是異常寫在系列開頭

在日常監控中,我們會有類似的經驗,曲線具有顯著的天周期性(1440個點為一個周期),也會有星期周期性(1440*7 個點為一個周期),那兩者都有呢?我們就有了2個周期。

除了天周期和星期周期,我們還會有月周期(例如月初沖話費、繳費的人明顯增多),可是每個月的周期都是不固定的呀?有的月有28天,有的有29天,有的由30天或31天,這怎麼辦呢?

甚至一年也不是穩定的365天,也會有366天,平均下來就是365.25天,非整數周期什麼鬼.....

這就是我們所說的『複雜周期性』

現在集團監控業務在飛速擴張,監控名額數也在迅猛增長,例如監控值班關注的監控名額都有幾千個,每日處理報警近千條....

為了報警準确率和高效處理,我們的正常做法是不停的提高發現率、誤報率,這樣真的是有效的麼?

故障定位可以說是重點,但是在内部一度成為誰做誰死的狀态....這是什麼鬼?

【監控雜談之異常檢測】什麼是異常寫在系列開頭

在集團内部,關系調用複雜,甚至有效的鍊路調用圖關系都很難梳理。

某個中間件異常,導緻若幹業務收到影響,同時發送了大量的報警,如果在這麼多報警中甄選有價值的資訊?

在這種情況下如何引入統計過程分析來解決故障定位的問題呢?