作者簡介
譚學士,奇虎360網路營運專家,擁有10年的網路營運和開發經驗。2012年加入360公司,現負責網路AIOps的演算法研發和下一代人工智慧營運系統的研發。通過在億萬使用者下的資料中心網路營運實戰中,積累了豐富的營運經驗,並在系統研發和演算法研究方面積極探索,勇於創新,運用當下先進的AI技術解決營運中的實際問題。 前言
感謝高效營運社區提供這樣的平台,我曾經是一名網路工程師,經曆了360的架構變革過程,我個人的技術轉型開始更專註網路的監控、自動化營運、網路可視化和AI應用上。我今天的分享主要有下面四個部分:
1 項目背景
2 時序序列演算法
3 機器學習
4 當下與未來 一、項目背景
聚焦網路的項目,這個項目是如何在DC中ISP出口發現流量異常,通過流量異常能自動探索,自動定位,最後找出哪些業務,通知業務的過程。
我們公司的業務拓展到搜尋、智能硬體、手機、行車記錄儀、兒童手錶、小水滴,也出了掃地機器人,也有360雲,雖然公司沒有BAT體量那麼大,但業務方向麻雀雖小五髒俱全,也積累了很多雲方面的經驗,公司還有一些在娛樂方面的業務。
OUR OPS ,這是我們2017年底的資料:PC端的月活5.15億使用者,移動端月活3.5億使用者,加起來有8.65億的月活使用者體量。營運資料中心在大陸有120個,香港1個,洛杉磯1個,營運ISP頻寬達到3.5T的規模。
面對這樣大規模的網路情況,我們對業務中斷零容忍,要洞察網路中的任何異常。雖然業務會切換,但對於某個使用者體驗上會有一定的下降,我們希望能即時的知道現在網路中DC的出口,流量上有沒有異常。出現了什麼樣的異常,並第一時間進行響應和修複。
這是我們DC流量出口圖,整體上看有早晚高峰的趨勢,放大看有一些上下的波動,而且波動比較頻繁,局部再放大看沒有什麼太大的規律。DC不是一個單獨的業務,它是綜合性的,很多業務都在流量出口上跑,帶來的問題是一個警示出來,不知道是哪個業務出現的異常。對於我們來講可能是一個黑盒子,哪些波動算異常。異常是哪些業務造成的。開啟這個黑盒子,從異常的定義到發現,再到定位業務給網路營運人員帶來了一定的挑戰。
這裡面提到定位到業務,如果你最後的定位找不到哪個業務,你告訴人家也是沒意義的,工程師大半夜起來說我要去看這是誰的業務,給業務打電話,說我今天晚上有一個APP發布,流量高一下是正常的。
通過定位是什麼類型的業務,是不是應不應該告知這個業務的營運負責人。如果沒有定位是什麼業務,很可能前面做的很多工作是沒有意義的,網路監控也用了一些傳統的,傳統的監控都是對於流量固定閾值類的監控,固定閾值內的波動異常根本無法發現,如果閾值設定太低誤警示量就比較大了。
去年的時候我們為了做異常檢測和流量預測,做了大膽的嘗試,360所有的網路算下來有幾十萬個Port,我們把所有的流量資料都做了時序化的儲存。每個Port儲存的時候,抽取了幾十維以上的資料特徵,要知道這個Port是哪台伺服器,是哪個網域名稱對應哪個業務負責人,屬於哪個地市、哪個地區,因此我們打了很多標籤,有了這些時序化的資料才有了後面我們進行異常檢測與分析的前提。 二、時序序列演算法
拿到資料以後,我們可以用時序序列演算法和機器學習的手段對資料進行分析,在處理資料前,我們先要做資料平穩性驗證,我們有一些平穩性不到位的資料,我們會做一些處理比如差分。
未經處理資料進行一階拆分,可以看到基本上是0上下進行浮動的區間,再計算自相關係數,在正負0.2的範圍,再看一下分布情況是不是符合常態分佈,經過分析發現大部分的資料還是平穩的。 2.1 3-sigma
通過校正的資料、平穩的資料我們可以應用一些演算法,大家一看這是常態分佈的圖,橫軸代表了資料分布的情況,每個格子代表標準差的範圍,從圖上可以看出,只有百分之零點幾的資料在3倍標準差以外,那麼得到一個當前的資料以後,用這個資料來判斷一下,如果超出了均值的3倍標準差以上的範圍視為異常。 2.2 EWMA指數加權移動平均
EWMA這個演算法中認為曆史資料對當前的資料是有一定影響的,曆史資料影響大小反映在權重上,該演算法引入了參數λ,當λ在0和1之間,λ越大,當前的權重越大,前面時刻就越小。
我們在實際的流量圖中發現,確實是時間越近的資料越能表現出資料近期的特徵,因為我們採用以天為單位的,每15分鐘一個時間視窗進行7天的ewma計算,計算出一個趨勢的ewma曲線,以曲線最後一個值,也是最新的值來替代均值,再做上面的3sigma的計算比較,這樣超出了則視為異常。這個演算法考慮到了曆史同期的資料對當前資料的影響。
在資料中心流量圖這塊選兩個時間,t時刻和t-1時刻,再取兩個時間視窗,分別取均值,用後一個視窗比前一個視窗再比絕對值再乘百分之百,就是波動的比例。方法二採用時間視窗可以有效吸收一定的瞬時波動,也犧牲了敏感性。 2.3 動態閾值
如上圖有一個正常的區間,兩側異常的區間,把14天的曆史資料倒數第二小的乘以60%,倒數第二個大的乘以1.2就認為它是異常,看起來缺點很大,雖然實現了閾值的動態,經過幾次波動以後會發現閾值拉高或是降低了。 2.4 小流量監控最佳化
這是我們針對實際業務做的最佳化演算法,應對一些小流量時的處理。X軸是時間,Y軸是大小,大小的單位是1兆到9兆,從1個G到9個G,雖然都是9倍,但是從營運角度看所代表的意義是不一樣的。
我們希望通過一條曲線,能動態有些容忍度,曲線在流量很小的時候很陡,越往後的時候曲線越緩慢,數學比較瞭解的人知道是用對數函數實現。y=w*1n(x+b),b一開始放在外面,放在外面的效果不如放在裡面的好,放在裡面的影響大一些,w表現斜率。
四個演算法同時應用的時候,對於平穩的資料占DC出口的80%很OK,用演算法解決是很好的。還有一種資料,用時間視窗切它,在一個裡面很難切出相似的情況,這種情況下比較難最佳化,也比較頭疼。
三、機器學習
面對上面說的比較難最佳化的情況,工程師會想辦法解決它,我們看到了當前流行的一種方法-機器學習。 3.1 機器學習架構
考慮到用機器學習,首先看一下架構,我們希望通過設計一個自動Update的 Model,為什麼呢。 業務流量模型往往是不固定的,上個月和這個月可能就不一樣,上個月沒有頻繁的抖動,這個月可能波動就頻繁。可能依賴與業務的調度方式等,往往越近的趨勢越能反應業務當前的流量特徵。
拿到訓練後的 model ,我們把即時的流量進行特徵提取,作為樣本輸入模型以後,模型能告訴這個流量是正常還是異常的,上面的部分因為訓練需要一定的時間,也不滿足即時處理的要求,我們把它放在 Offline 上進行,而下面的即時預測要放到online即時的進行。 3.2 學習方式對比
學習方式的選擇也做了一些嘗試,先說一下有監督的機器學習,一般要求正負樣本的比例是1:1,而且有人工標註,通過標註可以有效做演算法提升,實現整體的提升。無監督是不需要考慮正負樣本的比例,不用做標註能自動從資訊中學到一些有用的資訊,但是也需要一些調參,這個得根據工程師的結論不斷的手動調整這些參數。 3.3 特徵提取
輸入一些特徵和未經處理資料的資訊,我們怎麼抽取這個特徵呢。
我們的目標是通過分析,把第一張圖中的異常資料分離出來,實際上解決的是分類問題。右邊這幅圖這是兩個正常的簇,藍色和紅色代表正常的資料,打叉的資料離得比較遠的是異常資料,異常點也叫離群點。
那麼如果抽取這樣的資料特徵呢。
特徵出現的時候一定是有波動的,平穩就不叫異常了,如果這個資料時時刻刻都是這樣波動,我們認為就是正常的,異常的時候一定是小機率事件。特徵向量,我們也做了一些嘗試,最終是資料歸一化流量大小,我們是在分位元的機率分布,時間段分開後,一般分布資料的分布機率是固定的,還用了很多同比周期、環比變異係數的資料所為特徵進行訓練,效果最後測出來總不太理想,目前還是採用直接拿資料歸一後的大小和環比振幅作為特徵。 3.4 Model選擇
既然是分類問題,Model的選擇也很多,嘗試了經典聚類 K-Means 演算法:給定一個資料集,要定義分幾種類別,然後進行計算,設定最大的迴圈次數,輸出樣本集的中心點,每個分類的中心在什麼位置,每個資料進行打標,它是什麼樣的情況,下面是迴圈的計算,最後計算出我的中心點的過程。
計算出中心點之後怎麼知道輸出異常呢。往往需要在這裡面設定一個閾值,通過最後的訓練我拿到的是每一個類別簇的中心點,要判斷異常的時候需要設定一個閾值,計算該點到中心點的歐式距離,距離超過閾值我認為它算是異常。這張圖是我們在測試的時候閾值設定2.4完全可以分開,綠色的部分都是正常的資料,波動的點就是這個紅點。
接下來分享的是獨立森林,演算法來自周志華在2011年 Isolation-based Anomaly Detection 通過切蛋糕的方式看誰先被切出來,比如隨機切100次,幾次就把B切出來了,而A則要切了很多次才分出來。在實現上則是採用的森林的演算法,隨機建立一些二叉樹的方式,把小的放左邊,大的放右邊,在距離根最短的路徑經過score的仲裁後來進行預測是否是異常。
比較兩個方法,目前我們拿到的資料特徵還是比較少,之前同比和環比的特徵還是比較少。我們做分類的時候,如果特徵比較多的情況下 K-Means 比較好。分類的設定 K-Means 要剔除一些異常的樣本, Iforest 不需要。在易用性上,我們認為 Iforest 更好一些,最後我們選擇的是 Iforest 。
由於每個DC的情境不一樣, IN/OUT方向的流量特性也不一樣,最好是每Port每方向就訓練一個model,這樣可以更貼合業務。也就是 每個Port 的一個方向就是一條曲線,每個曲線對應一個 Model ,視窗大小選擇10分鐘,模型更新是每天更新一次。
如果說我用前面四種方法進行仲裁,仲裁的概念就是多種演算法進行投票,四種演算法中符合兩個以上出現異常,演算法就是異常,這種情況下準確率比較低。多種演算法仲裁的情況下,再加上機器學習,最後 Model 的判令,準確率能提高到98%以上。
四、當下與未來
異常檢測可以檢測出來了,但異常出現的時候,如果不能定位是哪兒的業務做這個意義不是很大。
基於之前的積累,我們把資料中心在出口上進行分割,流量鏡像可以獲得完整的資料,寫了一些C語言的開發,能夠知道這裡面哪個IP跑得比較高,哪個跑得比較低,出現異常的時候,警示裡面可以調用API拉一下 TopN ,突發的時候看 TopN,陡峭的時候是看不了的。
前兩天我們剛改進一版,知道哪個業務的哪個IP還不夠,還給出了流量的協議類型,知道是TCP/UDP/ICMP等。找到對應的業務人,直接給業務人和營運負責人發郵件,最為異常的依舊。
還有一種判定方法是 Pearson相關係數相關係數,兩條曲線的相似性,如果小於等於0.3是不存線上性相關,0.3到0.5是低度線性相關,0.5到0.8是顯著線性相關,大於0.8是高度線性相關。
出口流量出現曲線波動的時候,我們要抓取IDC相關 Port 的曲線出來。我們做了千裡眼,網路營運平台上滑鼠一選,就會幫你後台計算相同時段DC裡面還有哪些曲線和你選擇的相似性最高,並顯示是哪個業務。在這之前都是工程師肉眼去分析流量圖,一個圖一個圖去看,如果交換器特別多連接埠特別多,可想是比較耗時的。
網路監控這麼多年以來,我們把一些監控項做得非常細緻,Port百分比,流量丟包、品質監控等都做了。這些監控缺乏合理的關聯,希望通過一種方式智能的把它串連在一起,當發生故障的時候能通過關聯關係找出相關聯的事件,做好相關警示抑制和屏蔽,另外根據邏輯關聯,也可以找到該時段警示的Root Case,另外考慮防範於未然,做故障的提前預測。
在已經發現故障之後,能不能有一個行動預案,最後我們通過提前設定好預案的命令,通過自動聯動預案做到故障的自動修複。
GOPS2018深圳站精彩PPT(持續更新中)
連結: https://pan.baidu.com/s/1zgOGm7CabpO6lIquNVcNkg
密碼: sp76
更多精彩內容請訪問高維線上:www.gaowei.vip
END
如何才能與譚學士面對面。機會來了......
活動議程
活動嘉賓
活動地點
報名通道
長按二維碼 進入活動官網
更多驚喜請點擊閱讀原文️