SQL資深專家,竟然是這樣智能挖掘異常日誌

提取異常日誌是個大難題

面對海量的日誌(TB乃至PB級別),如何從日誌中挖掘出異常信息對於大部分的開發者而言是一個大難題。例如,判斷機器的延時是否正常,部分request是否正常。一般,咱們對於異常的數據,要及時的報警,以儘快的處理。算法

一般咱們是怎麼搞得呢? 在之前,依賴於開發者的經驗,來根據某些特定的特徵,判斷是否達到了閾值,例如根據延時是否達到了某個特定的值,或者http 響應碼5xx的比例達到了某個閾值。這個閾值,依賴於資深的開發者的豐富的經驗。spa

AI dev/ops

AI算法的迅猛發展,給異常日誌挖掘提供了新的方向。大名鼎鼎的AI領域專家吳恩達(Andrew NG),在他所教授的Machine Learning課程中提供了一種Abnormal Detection算法。算法經過訓練數據集,得到一個正態分佈。而後檢測目標數據是否落在了正態分佈的邊緣位置,若是落在了邊緣位置,則認爲是一個異常數據。日誌

算法步驟:code

  1. 肯定要訓練的feature,能夠是單個指標,好比latency,也能夠是複合指標,例如CPU/NetFlow
  2. 在訓練數據集上,求得均值μ和方差σ^2
  3. 對新數據求方程P(x)=

clipboard.png

接下來,咱們介紹如何在SQL中使用該算法來檢測異常。orm

日誌服務提供的異常檢測算法

以延時爲例,咱們來看哪些延時是異常的。 延時的分佈通常是這樣的:blog

不知足正太的需求,要把上述圖形轉化成正太分佈,對latency 求對數:log(latency)
 
clipboard.pngip

  • 值μ和方差σ^2:

clipboard.png

stddev即標準差
variance即方差
avg_ln即ln(latency)的均值
avglatency即latency的均值開發

  • 提取異常數據
| select latency  where  pow(e(), - pow((ln(latency) - 8.223) ,2)/2/0.3975) /sqrt(2*pi()) / 0.53  < 0.01 order by latency desc

把方差標準差和均值帶入公式,使用where篩選出來小於0.01的結果,即異常值。能夠看到,得到的結果,明顯大於軍latency的均值。it

clipboard.png

相關文章
相關標籤/搜索