提煉時間序列的波動曲線特徵只是第一步,後續 CoFlux 還有幾個關鍵的步驟:
特徵工程的擴大(amplify): 對波動序列特徵進行放大,讓某些波動序列特徵更加明顯;
Correlation Measurement:用於解決時間序列存在時間前後的漂移,兩條時間序列之間存在 lag 的情況,因此需要對其中一條時間序列做平移操作;
CoFlux 考慮了歷史數據(歷史半個月或者一個月)作為參考,並且一個範圍內的 kpi 數量不超過 60 條;
下面來一一講解這些技術方案,對於每一條波動特徵曲線(Flux-Features),按照以下幾個步驟來進行操作:
Step 1: 對波動特徵曲線 做 z-score 的歸一化,i.e.
Step 2: 對歸一化之後的波動特徵曲線做特徵放大(feature amplification):定義函數 如下:
則 放大之後的波動特徵曲線(amplified flux feature)就是: Step 3: 對於兩條放大之後的波動特徵曲線(amplified flux features) 和 ,可以計算它們之間的相關性,先後順序,是否同向。
令
這裡的 0 的個數是 個。其中, 。特別地,當 時, ,那麼我們可以定義 與 的內積是: 這裡的 指的是向量之間的內積(inner product)。同時可以定義相關性(Cross Correlation)為: 由於波動有可能是反向的,那麼在這裡我們不僅要考慮相關性是大於零的情況,也需要考慮小於零的情況。於是, 則最小值或者最大值的指標分別是 令
從定義中可以看出, 是一個元組,裡面蘊含著三個信息,分別是相關性,波動方向,前後順序。 ,越接近 1 或者 -1 就表示放大之後的波動特徵曲線 和 越相關。正值的 表示 與 的波動方向相同,是正相關;負值的 表示 與 的波動方向想法,是負相關。通過對 或者 的分析就可以判斷先後順序。因此,CoFlux 方法的是通過對 的分析來得到最終結果的。
在最後的相關性分析裡面,其實偽代碼正如論文中所示。先考慮是否存在相關性,再考慮基於相關性下的先後順序和波動方向。
CoFlux 的實戰效果
從論文中看,CoFlux 的數據集基本上是小於 60 條時間序列曲線。其中包括 CPU,錯誤率,錯誤數,內存使用率,成功率等不同的指標。
從運行時間上來看,對於一周的時間序列集合(< 60條)而言,CoFlux 基本上能夠在 30 分鐘內計算完畢,得到最終的運算結果。
其效果的評價指標基本上就是機器學習中的常見評價指標了,準確率,召回率之類的。
從 F1-Score 的評價指標來看,CoFlux 的效果優於其他演算法。
告警壓縮
如果對時間序列之間進行告警壓縮的話,其實可以大量減少運維人員的工作量。在 CoFlux 裡面,時間序列曲線被分成了三類,也就是三個顏色最深的模塊。因此 21 條時間序列的告警量在實際中有可能只有三條告警。
告警關聯
在實際運維場景中,除了對告警進行壓縮之外,也需要對告警進行關聯性的分析。例如一條告警發生了,運維人員都希望知道與它相關的其他告警是什麼,這樣可以方便運維人員定位問題。
構建告警關係鏈
在一些相對封閉的場景下,例如 mysql 資料庫,通過對它裡面的時間序列進行分析。不僅可以得到告警之間是否存在相關性,還可以對先後順序,波動順序進行分析。
結論
時間序列之間的聯動分析是在運維領域場景下的常見技術,不僅可以做告警的壓縮,也能夠做告警的關聯,還能夠構建告警的關係鏈。在未來的工作中,作者們提到將會用深度學習的方法來進行關聯和告警的分析,從而進一步加深對時間序列的研究。
推薦閱讀: