自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

IT運維平臺算法背后的兩大“神助攻”

原創(chuàng)
運維 系統(tǒng)運維 算法
智能運維(AIops)是目前 IT 運維領(lǐng)域最火熱的詞匯,其中算法是它的核心要素之一。本文主要談算法對運維的作用,涉及異常檢測和歸因分析兩方面,圍繞運維系統(tǒng) Kale 中 skyline、Oculus 模塊、Opprentice 系統(tǒng)、Granger causality(格蘭杰因果關(guān)系)、FastDTW 算法等細節(jié)展開。

【51CTO.com原創(chuàng)稿件】智能運維(AIops)是目前 IT 運維領(lǐng)域最火熱的詞匯,全稱是 Algorithmic IT operations platforms,正規(guī)翻譯是『基于算法的 IT 運維平臺』,直觀可見算法是智能運維的核心要素之一。

[[192576]]

本文主要談算法對運維的作用,涉及異常檢測和歸因分析兩方面,圍繞運維系統(tǒng) Kale 中 skyline、Oculus 模塊、Opprentice 系統(tǒng)、Granger causality(格蘭杰因果關(guān)系)、FastDTW 算法等細節(jié)展開。 

 

 

一、異常檢測

 

 

異常檢測,是運維工程師們最先可能接觸的地方了。畢竟監(jiān)控告警是所有運維工作的基礎(chǔ)。設(shè)定告警閾值是一項耗時耗力的工作,需要運維人員在充分了解業(yè)務(wù)的前提下才能進行,還得考慮業(yè)務(wù)是不是平穩(wěn)發(fā)展?fàn)顟B(tài),否則一兩周改動一次,運維工程師絕對是要發(fā)瘋的。

如果能將這部分工作交給算法來解決,無疑是推翻一座大山。這件事情,機器學(xué)習(xí)當(dāng)然可以做到。但是不用機器學(xué)習(xí),基于數(shù)學(xué)統(tǒng)計的算法,同樣可以,而且效果也不差。 

 

 

異常檢測之Skyline異常檢測模塊

 

 

2013年,Etsy 開源了一個內(nèi)部的運維系統(tǒng),叫 Kale。其中的 skyline 部分,就是做異常檢測的模塊,它提供了 9 種異常檢測算法

  • first_hour_average、

  • simple_stddev_from_moving_average、

  • stddev_from_moving_average、

  • mean_subtraction_cumulation、

  • least_squares

  • histogram_bins、

  • grubbs、

  • median_absolute_deviation、

  • Kolmogorov-Smirnov_test

簡要的概括來說,這9種算法分為兩類:

  1. 從正態(tài)分布入手:假設(shè)數(shù)據(jù)服從高斯分布,可以通過標(biāo)準(zhǔn)差來確定絕大多數(shù)數(shù)據(jù)點的區(qū)間;或者根據(jù)分布的直方圖,落在過少直方里的數(shù)據(jù)就是異常;或者根據(jù)箱體圖分析來避免造成長尾影響。

  2. 從樣本校驗入手:采用 Kolmogorov-Smirnov、Shapiro-Wilk、Lilliefor 等非參數(shù)校驗方法。

這些都是統(tǒng)計學(xué)上的算法,而不是機器學(xué)習(xí)的事情。當(dāng)然,Etsy 這個 Skyline 項目并不是異常檢測的全部。

首先,這里只考慮了一個指標(biāo)自己的狀態(tài),從縱向的時序角度做異常檢測。而沒有考慮業(yè)務(wù)的復(fù)雜性導(dǎo)致的橫向異常。其次,提供了這么多種算法,到底一個指標(biāo)在哪種算法下判斷的更準(zhǔn)?這又是一個很難判斷的事情。

問題一:實現(xiàn)上的抉擇。同樣的樣本校驗算法,可以用來對比一個指標(biāo)的當(dāng)前和歷史情況,也可以用來對比多個指標(biāo)里哪個跟別的指標(biāo)不一樣。

問題二:Skyline 其實自己采用了一種特別樸實和簡單的辦法來做補充——9 個算法每人一票,投票達到閾值就算數(shù)。至于這個閾值,一般算 6 或者 7 這樣,即占到大多數(shù)即可。 

 

 

異常檢測之Opprentice系統(tǒng)

 

 

作為對比,面對相同的問題,百度 SRE 的智能運維是怎么處理的。在去年的 APMcon 上,百度工程師描述 Opprentice 系統(tǒng)的主要思想時,用了這么一張圖:  

 

 


 

Opprentice 系統(tǒng)的主體流程為:

  • KPI 數(shù)據(jù)經(jīng)過各式 detector 計算得到每個點的諸多 feature;

  • 通過專門的交互工具,由運維人員標(biāo)記 KPI 數(shù)據(jù)的異常時間段;

  • 采用隨機森林算法做異常分類。

其中 detector 有14種異常檢測算法,如下圖: 

 

 


 

我們可以看到其中很多算法在 Etsy 的 Skyline 里同樣存在。不過,為避免給這么多算法調(diào)配參數(shù),直接采用的辦法是:每個參數(shù)的取值范圍均等分一下——反正隨機森林不要求什么特征工程。如,用 holt-winters 做為一類 detector。holt-winters 有α,β,γ 三個參數(shù),取值范圍都是 [0, 1]。那么它就采樣為 (0.2, 0.4, 0.6, 0.8),也就是 4 ** 3 = 64 個可能。那么每個點就此得到  64  個特征值。 

 

 

異常檢測之

Opprentice 系統(tǒng)與 Skyline 很相似

 

 

Opprentice 系統(tǒng)整個流程跟 skyline 的思想相似之處在于先通過不同的統(tǒng)計學(xué)上的算法來嘗試發(fā)現(xiàn)異常,然后通過一個多數(shù)同意的方式/算法來確定最終的判定結(jié)果。

只不過這里百度采用了一個隨機森林的算法,來更靠譜一點的投票。而 Etsy 呢?在 skyline 開源幾個月后,他們內(nèi)部又實現(xiàn)了新版本,叫 Thyme。利用了小波分解、傅里葉變換、Mann-whitney 檢測等等技術(shù)。

另外,社區(qū)在 Skyline 上同樣做了后續(xù)更新,Earthgecko 利用 Tsfresh 模塊來提取時序數(shù)據(jù)的特征值,以此做多時序之間的異常檢測。我們可以看到,后續(xù)發(fā)展的兩種 Skyline,依然都沒有使用機器學(xué)習(xí),而是進一步深度挖掘和調(diào)整時序相關(guān)的統(tǒng)計學(xué)算法。

開源社區(qū)除了 Etsy,還有諸多巨頭也開源過各式其他的時序異常檢測算法庫,大多是在 2015 年開始的。列舉如下:

  • Yahoo! 在去年開源的 egads 庫。(Java)

  • Twitter 在去年開源的 anomalydetection 庫。(R)

  • Netflix 在 2015 年開源的 Surus 庫。(Pig,基于PCA)

其中 Twitter 這個庫還被 port 到 Python 社區(qū),有興趣的讀者也可以試試。 

 

 

二、歸因分析

 

 

歸因分析是運維工作的下一大塊內(nèi)容,就是收到報警以后的排障。對于簡單故障,應(yīng)對方案一般也很簡單,采用 service restart engineering~ 但是在大規(guī)模 IT 環(huán)境下,通常一個故障會觸發(fā)或?qū)е麓竺娣e的告警發(fā)生。如果能從大面積的告警中,找到最緊迫最要緊的那個,肯定能大大的縮短故障恢復(fù)時間(MTTR)。 

這個故障定位的需求,通常被歸類為根因分析(RCA,Root Cause Analysis)。當(dāng)然,RCA 可不止故障定位一個用途,性能優(yōu)化的過程通常也是 RCA 的一種。 

 

 

歸因分析之 Oculus 模塊

 

 

和異常檢測一樣,做 RCA 同樣是可以統(tǒng)計學(xué)和機器學(xué)習(xí)方法并行的~我們還是從統(tǒng)計學(xué)的角度開始。依然是 Etsy 的 kale 系統(tǒng),其中除了做異常檢測的 skyline 以外,還有另外一部分,叫 Oculus。而且在 Etsy 重構(gòu) kale 2.0 的時候,Oculus 被認為是1.0 最成功的部分,完整保留下來了。

Oculus 的思路,用一句話描述,就是:如果一個監(jiān)控指標(biāo)的時間趨勢圖走勢,跟另一個監(jiān)控指標(biāo)的趨勢圖長得比較像,那它們很可能是被同一個根因影響的。那么,如果整體 IT 環(huán)境內(nèi)的時間同步是可靠的,且監(jiān)控指標(biāo)的顆粒度比較細的情況下,我們就可能近似的推斷:跟一個告警比較像的最早的那個監(jiān)控指標(biāo),應(yīng)該就是需要重點關(guān)注的根因了。

Oculus 截圖如下: 

 

 

 

這部分使用的計算方式有兩種:

  • 歐式距離,就是不同時序數(shù)據(jù),在相同時刻做對比。假如0分0秒,a和b相差1000,0分5秒,也相差1000,依次類推。

  • FastDTW,則加了一層偏移量,0分0秒的a和0分5秒的b相差1000,0分5秒的a和0分10秒的b也相差1000,依次類推。當(dāng)然,算法在這個簡單假設(shè)背后,是有很多降低計算復(fù)雜度的具體實現(xiàn)的,這里就不談了。

唯一可惜的是 Etsy 當(dāng)初實現(xiàn) Oculus 是基于 ES 的 0.20 版本,后來該版本一直沒有更新?,F(xiàn)在停留在這么老版本的 ES 用戶應(yīng)該很少了。除了 Oculus,還有很多其他產(chǎn)品,采用不同的統(tǒng)計學(xué)原理,達到類似的效果。 

 

 

歸因分析之 Granger causality

 

 

Granger causality(格蘭杰因果關(guān)系)是一種算法,簡單來說它通過比較“已知上一時刻所有信息,這一時刻 X 的概率分布情況”和“已知上一時刻除 Y 以外的所有信息,這一時刻 X 的概率分布情況”,來判斷 Y 對 X 是否存在因果關(guān)系。

可能有了解過一點機器學(xué)習(xí)信息的讀者會很詫異了:不是說機器只能反應(yīng)相關(guān)性,不能反應(yīng)因果性的么?需要說明一下,這里的因果,是統(tǒng)計學(xué)意義上的因果,不是我們通常哲學(xué)意義上的因果。

統(tǒng)計學(xué)上的因果定義是:『在宇宙中所有其他事件的發(fā)生情況固定不變的條件下,如果一個事件 A 的發(fā)生與不發(fā)生對于另一個事件 B 的發(fā)生的概率有影響,并且這兩個事件在時間上有先后順序(A 前 B 后),那么我們便可以說 A 是 B 的原因。』 

 

 

歸因分析之皮爾遜系數(shù)

 

 

另一個常用的算法是皮爾遜系數(shù)。下圖是某 ITOM 軟件的實現(xiàn): 

 

 

 

 

我們可以看到,其主要元素和采用 FastDTW 算法的 Oculus 類似:correlation 表示相關(guān)性的評分、lead/lag 表示不同時序數(shù)據(jù)在時間軸上的偏移量。

皮爾遜系數(shù)在 R 語言里可以特別簡單的做到。比如我們拿到同時間段的訪問量和服務(wù)器 CPU 使用率: 

 

 

然后運行如下命令:

  1. acc_count<-scale(acc$acc_count,center=T,scale=T) 
  2. cpu<-scale(acc$cpuload5,center=T,scale=T) 
  3. cor.test(acc_count,cpu) 

可以看到如下結(jié)果輸出: 

 

 

對應(yīng)的可視化圖形如下: 

 

 

這就說明網(wǎng)站數(shù)據(jù)訪問量和 CPU 存在弱相關(guān),同時從散點圖上看兩者為非線性關(guān)系。因此訪問量上升不一定會真正影響 CPU 消耗。

其實 R 語言不太適合嵌入到現(xiàn)有的運維系統(tǒng)中。那這時候使用 Elasticsearch 的工程師就有福了。ES 在大家常用的 metric aggregation、bucket aggregation、pipeline aggregation 之外,還提供了一種 matrix aggregation,目前唯一支持的 matrix_stats 就是采用了皮爾遜系數(shù)的計算,接口文檔見:

https://www.elastic.co/guide/en/elasticsearch/reference/current/search-aggregations-matrix-stats-aggregation.html

唯一需要注意的就是,要求計算相關(guān)性的兩個字段必須同時存在于一個 event 里。所以沒法直接從現(xiàn)成的 ES 數(shù)據(jù)中請求不同的 date_histogram,然后計算,需要自己手動整理一遍,轉(zhuǎn)儲回 ES 再計算。

 

[[192579]]

 

饒琛琳,目前就職日志易,有十年運維工作經(jīng)驗。在微博擔(dān)任系統(tǒng)架構(gòu)師期間,負責(zé)帶領(lǐng)11人的SRE團隊。著有《網(wǎng)站運維技術(shù)與實踐》、《ELKstack權(quán)威指南》,合譯有《Puppet 3 Cookbook》、《Learning Puppet 4》。在眾多技術(shù)大會上分享過自動化運維與數(shù)據(jù)分析相關(guān)主題。

 

 

【51CTO原創(chuàng)稿件,合作站點轉(zhuǎn)載請注明原文作者和出處為51CTO.com】

 

 

責(zé)任編輯:火鳳凰 來源: 51CTO技術(shù)棧
相關(guān)推薦

2023-04-21 18:48:18

谷歌人工智能開源

2016-01-13 14:54:50

京東京東大腦

2018-12-05 08:30:27

IT運維邏輯

2010-04-21 15:06:37

負載均衡算法

2021-06-07 06:50:50

iCloud 操作系統(tǒng)微軟

2017-06-08 10:52:20

運營商SDNNFV

2017-08-24 09:33:47

NAS網(wǎng)絡(luò)存儲

2024-05-11 07:57:47

因果推斷知識地圖算法

2018-07-11 06:06:20

物流倉儲運維數(shù)據(jù)庫

2010-05-04 14:30:45

Oracle數(shù)據(jù)

2011-08-10 08:55:28

項目失敗

2009-11-30 16:55:10

微軟合作Novell

2011-07-01 10:42:51

IIS解析漏洞

2013-09-09 11:14:30

2022-02-24 08:00:00

API混合云數(shù)據(jù)

2011-11-02 09:35:34

虛擬化虛擬化管理

2011-08-11 09:41:38

2010-04-01 09:34:06

Oracle函數(shù)

2009-08-14 15:07:00

C#編譯過程
點贊
收藏

51CTO技術(shù)棧公眾號