監控是運維工作的基礎。隨著雲原生的快速發展,監控系統近幾年也快速向prometheus這類時間序列方案發展。用時間序列資料儲存監控指標,可以很方便且快速的收集指標並對資料進行處理與計算,但由於指標量變得龐大,對運維來說用這些指標資料做出合理準確的告警就成為了乙個難點。
傳統的閾值告警,在雲原生時代這種複雜的網路平面下,顯得有些不足。而這幾年很火爆的aiops使用機器學習演算法訓練出來的模型與引數,對於運維來說學習成本太高,使用起來也並沒感覺很準。監控資料其實在大部分時候都是有變化趨勢與規則的,這類資料用異常檢測演算法其實更合理,而且學習成本不高。
時間向量資料,特別適合應用於一些基礎的統計學演算法。計算很快,而且prometheus自帶的pql自帶標準差、方差、平局值、對數等,資料聚合特別方便。
我在實際生產中,使用z-score演算法。這個演算法很簡單,現在使用了有半年了,目前看在業務流量、連線數、qps、pv這類有比較明顯的高低峰的指標型別上,告警上很準確且靈敏。
z-score公式:z = (x-u)/σ
其中x是當前資料,u是均值,σ為標準差。
z值符合正太分布,99.7%的資料落在[-3,3],z值離0越遠則越有可能是異常點。
假設指標名qps
x=sum(qps)by(instance)u=**g_over_time(sum(qps)by(instance)[1d])
σ=stddev_over_time(sum(qps)by(instance)[1d])
平均值和標準差所選時間段不能太小,按參考文件所述,選取1000個左右的點比較合適,我這裡選的1d,實際差不多1k-3k個點。
告警規則(sum(qps) by (instance) - **g_over_time(sum(qps) by (instance)[1d])) /stddev_over_time(sum(qps) by (instance)[1d]) >3or(
sum(qps) by (instance) - **g_over_time(sum(qps) by (instance)[1d])) /stddev_over_time(sum(qps) by (instance)[1d]) < -3
資料聚合的時候,聚合維度一定要保持一致,不然無法計算。我這裡全都用的by (instance)這個維度聚合資料。其實可以直接取絕對值大於3,這裡用大於3或小於-3是為了體現資料偏離方向。
具體在promethues裡怎麼配置,方法在網上很多,這裡就不再贅述了。
異常檢測演算法 Isolation Forest
iforest isolation forest 是由liu et al.1 提出來的基於二叉樹的ensemble異常檢測演算法,具有效果好 訓練快 線性複雜度 等特點。iforest為聚類演算法,不需要標記資料訓練。首先給出幾個定義 iforest的基本思想非常簡單 完成異常點的isolation...
異常點檢測演算法
異常點檢測演算法 對於train data 中的資料,對其中重要的特徵 或者每個特徵 x1,x2,xn,計算其高斯分布 對new data,計算 x 每個特徵 在訓練資料分布下的 p 值並相乘,若p x 小於某個臨界值,則判斷其為異常點 什麼時候選擇使用 p x 根據分布概率來判斷異常點,什麼時候使...
機器學習 異常檢測演算法
異常檢測應用在工業檢測 賬戶行為監測等領域。問題特點 異常檢測問題,往往更多使用無監督的演算法建模,再結合標定的驗證集用於切閾值。異常檢測的兩類常用方法 本文案例 資料集 電腦開機引數,包含兩個特徵 訓練集和驗證集的圖示如 演算法教程參見吳恩達 機器學習 異常檢測。基本的假定是 資料中的每個特徵數值...