重磅:構建 AIOps 的 MNIST
作者簡介
運小聰 百度高階研發工程師
負責監控資料分析、資料視覺化等相關工作,致力於降低異常發現、故障定位的時間和人力成本,讓自動化系統的眼睛更加明亮。
乾貨概覽
我們在 《AIOps時代,你準備好了嗎?》 一文中提到,運維操作一般可以分為感知、決策、執行三部分,而在感知階段我們通過識別服務指標資料中不符合預期的模式來發現服務異常,即監控資料的異常檢測。
很多時候,大家手中的異常檢測是一條拍腦袋想出來的規則,或者根據經驗大致估算的閾值。這樣的異常檢測常常存在較多誤報、漏報、效果不佳的情況。而上線前基於標註資料的效果評估是提高效果最重要的手段。為了獲取 大量 、 準確 的 標註資料 來評估演算法效果,我們進行了一系列探索。
本文將主要介紹在監控資料異常標註實踐中遇到的問題和解決方案,並給出一個當前由 百度智慧運維團隊 與 清華大學Netman實驗室 合作研發的輔助標註工具原型 https://github.com/baidu/Curve ,歡迎大家一起探討。
時序資料異常標註
在監測服務的收入、流量、可用性、效能等指標時,通常會對資料進行流式的採集和匯聚,每個資料點反映的是某段時間內的服務狀態,這些時間序列資料簡稱 時序資料 。
在異常檢測方面大家或多或少都有過類似經歷:針對一次故障設定了報警規則,其中的閾值根據這次故障設定。上線後不斷髮生 誤報 ,因此調低閾值。閾值調低後誤報減少,但在一次新故障發生時發生 漏報 ,又調高閾值。如此往復,在誤報與漏報之間徘徊。這是因為以bad case(誤報、漏報)驅動的閾值調整常常會 以偏概全 、 前後矛盾 ,導致整體的準確率和召回率很低。解決問題的最佳辦法是在上線前使用標註資料對報警規則進行系統地評估。
另一方面,對於複雜場景的異常檢測,大量準確的標註資料也是使用 統計方法 或 機器學習 方法建模的必要條件。
為了進行正常資料建模和演算法效果評估,我們需要獲取大量準確的標註資料,通常時序資料可以從監控系統中方便地獲得,標註則需要人工完成。在資料標註過程中主要有兩類問題:
-
準確性 :標註人員通常對異常認識不清晰,隨著標註進度的推進,判斷標準很容易發生漂移。
-
標註效率 :異常資料佔比很小,標註時大量的時間耗費在檢查正常資料上,效率較低。
經過一系列調研,我們發現已有的時序資料標註工具較少,功能也比較簡單,僅提供了趨勢圖展示、異常時段標註、簡單參考線(天同比/周同比)等功能,對於解決標註過程中的準確性和效率問題幫助有限。
這裡,我們給出了一種 基於自動異常檢測的輔助標註方法 :在標註開始前,自動分析疑似異常區間, 高亮提醒 標註人員關注,減少檢查正常資料耗費的精力;在標註過程中,提供異常區間 對比功能 ,協助標註人員認識異常,避免判斷標準的漂移,減少標註資料前後矛盾的情況。
時序資料標註工具
我們著手研發了一款時序資料異常標註工具,輔助標註人員更快更準確地進行時序資料標註,為正常資料建模和異常檢測評估提供足量準確的標註資料集。
當前的標註工具以一個 Web 的形式呈現,提供資料 上傳 、 標註 、 下載 功能,輔助標註的主要演算法邏輯由 Python 實現,可以方便地藉助相關科學計算模組進行修改。
視覺化和標註功能
一般的時序資料標註工具都會提供一些基本的視覺化和標註功能,包括通過拖動、快捷按鈕等方式設定x軸和y軸的顯示區間以控制曲線的縮放,通過拖動等方式標註異常資料等。除了這些基本的功能之外,我們針對 標註場景 作了專門的優化。
Y軸區間自動計算
有時少數異常資料的值與正常值相比差別巨大,可能有數量級的差別。直接展示這些資料會導致整條曲線被壓扁變平,掩蓋曲線上其他的波動。這時使用者往往需要先手工設定曲線的y軸區間才能開始正常標註。如果使用者每次載入曲線都要設定一次y軸區間,無疑是很麻煩的。針對這種問題,我們在工具中添加了 離群點自動判斷 功能,排除離群點之後,我們就能找到合適的y值區間,讓使用者看到合理的曲線形態。
預設 Y 軸取值範圍
基於離群點檢測的 Y 軸取值範圍
大尺度資料取樣
我們標註時通常會先瀏覽資料來初步瞭解資料的分佈,標註時也常常先尋找大致的異常區間再仔細標註。這種瀏覽的尺度比較大,由於螢幕解析度遠低於資料點數,不可避免地要進行取樣或聚合,常用的均值方法會平滑週期內的尖峰和低谷,降低異常幅度,影響標註工作。針對這種問題,我們在工具中提供了 最大值 、 最小值取樣方法 ,可以適應上溢、下溢異常場景,在標註時暴露出完整的異常幅度,解決取樣帶來的失真問題。
輔助標註功能
在其他時序資料異常標註工具中,通常提供了天同比、周同比參考線或恆定閾值線,這些參考線在一定程度上滿足了標定人員參照歷史資料的需求,但是面對單調上升指標(如使用者數量)、預期內突增(如活動流量)等個性化場景提供的幫助比較有限。針對這個問題,我們開放了 參考線生成 功能,可以根據場景自行編寫外掛新增參考線。除此之外,還在標註工具上嘗試了初始異常識別和異常區間對比兩個輔助標註功能。
初始異常識別
在標註以外的時間,我們通常不會持續關注一個指標的變化過程,這樣,在標註過程中接收到的資料會遠多於平時的觀察,受到已標註資料潛移默化地影響,標註人員的判斷標準會發生一定程度的偏移,影響標註準確性。針對這種問題,在資料初始化階段我們使用 異常檢測演算法 對資料進行檢測,確定疑似異常區間,用高亮的方式提示給標註人員,這種標準一致的提醒可以在一定程度上減輕標註人員受到的影響。
同時,由於使用了較寬鬆的閾值,輕微的異常也會被識別出來,這樣,標註人員可以重點檢查高亮區域,降低檢查正常資料的消耗,提高標註速度。
異常區間對比
在不能確定一段資料是否異常時,我們通常會和已標註為異常的資料進行對比,這種對比由於異常資料佔比較小變得非常麻煩,需要先在比較大的尺度上找到異常區間,然後再放縮到與待標註區間相同的比例尺才能進行對比。針對這種問題,我們提供了 異常區間跳轉 和 異常概覽 兩個功能,可以方便得跳轉到上一個、下一個異常區間進行對比,也可以在標註結束後把所有異常區間放在一起進行對比。
正在路上…
除了上述已有功能,一大波更新正在路上,接下來還會有:
-
更快的載入速度,標註過程更加流暢 :在原型實現中,包括資料庫、網路互動在內的諸多工程細節都沒有進行鍼對性優化,導致標註中會出現輕微卡頓情況,這些卡頓將在下一版完整修復。
-
線上的標註工具,開啟即用 :在前期試用中發現,對於標註人員,從原始碼開始部署一個服務比較麻煩。為了讓使用者更加方便,我們會在收集足夠意見反饋後整合出一個 SaaS化 的標註平臺,讓標註人員即開即用。
-
拉一大波標註資料出來祭天 :在調研時發現,時序資料異常檢測領域缺少一個類似 MNIST 的標準資料集,雖然有部分高校給出了一些資料集(如石溪大學的 http://odds.cs.stonybrook.edu/ ),但是這些資料集過小,難以用於統計方法和機器學習方法建模。為了讓更多有想法但是接觸不到資料的同學有條件參與相關探索,我們將公開部分標註資料,和大家一起建設一個公共的標準資料集。
INVITATIONS
上文中提到的各種基礎功能優化和輔助功能均通過外掛的形式實現,大家可以參照給出的樣例方便地編寫適合自己場景的外掛。
考慮到標註資料的應用場景多種多樣,僅憑一兩個團隊遇到的場景、總結的解決方案是有限的,所以我們還邀請了阿里、滴滴等公司的同仁一起合作進行時序資料異常標註方面的探索。
在這裡,也誠邀各位一起參與討論( https://github.com/baidu/Curve/issues ),對於有建設性意見或者程式碼、標註資料貢獻的同學,有精美禮品相送。在時序資料預測、異常標註、異常檢測方面,不管是想法還是吐槽,程式碼還是資料,統統歡迎。
↓↓↓ 點選"閱讀原文" 【瞭解更多精彩內容】