重磅:構建AIOps的MNIST

本文做者:AIOps智能運維git

乾貨概覽github

咱們在《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),對於有建設性意見或者代碼、標註數據貢獻的同窗,有精美禮品相送。在時序數據預測、異常標註、異常檢測方面,不論是想法仍是吐槽,代碼仍是數據,通通歡迎。

原文連接地址:https://developer.baidu.com/topic/show/290125

相關文章
相關標籤/搜索