摘要: 在大型互聯網企業中,對海量KPI(關鍵性能指標)進行監控和異常檢測是確保服務質量和可靠性的重要手段。基於互聯網的服務型企業(如線上購物、社交網絡、搜索引擎等)經過監控各類系統及應用的數以萬計的KPI(如CPU利用率、每秒請求量等)來確保服務可靠性。html
第一篇文章SLS機器學習介紹(01):時序統計建模上週更新完,一會兒炸出了不少潛伏的業內高手,忽的發現集團內部各個業務線都針對時序分析存在必定的需求。你們私信問我業務線上的具體方法,在此針對遇到的通用問題予以陳述(權且拋磚引玉,但願各位大牛提供更好的建議和方法):node
數據的高頻抖動如何處理?算法
歷史訓練數據如何選擇?服務器
這麼多方法該如何選擇?網絡
在大型互聯網企業中,對海量KPI(關鍵性能指標)進行監控和異常檢測是確保服務質量和可靠性的重要手段。基於互聯網的服務型企業(如線上購物、社交網絡、搜索引擎等)經過監控各類系統及應用的數以萬計的KPI(如CPU利用率、每秒請求量等)來確保服務可靠性。KPI上的異常一般反映了其相關應用上可能出現故障,如服務器故障、網絡負載太高、外部攻擊等。於是,異常檢測技術被普遍用於及時檢測異常事件以達到快速止損的目的。數據結構
大多數異常檢測算法(如雅虎的EDAGS,Twitter的BreakoutDetection,FaceBook的prophet)都須要爲每條KPI單獨創建異常檢測模型,在面對海量KPI時,會產生極大的模型選擇、參數調優、模型訓練及異常標註開銷。幸運的是,因爲許多KPI之間存在隱含的關聯性,它們是較爲類似的。若是咱們可以找到這些類似的KPI(例如在一個負載均衡的服務器集羣中每一個服務器上的每秒請求量KPI是類似的),將它們劃分爲若干聚類簇,則能夠在每一個聚類簇中應用相同的異常檢測模型,從而大大下降各項開銷。併發
在同一個業務指標的前提下:負載均衡
本文主要從時間對齊的多條時序KPI中進行類似性度量,時間點上的指標的類似性和時序曲線形態的類似性機器學習
當p=1時,表示曼哈頓距離;p=2時,表示歐幾里得距離;當p趨近於無窮大時,該距離轉換爲切比雪夫距離,具體以下式所式:數據結構和算法
閔可夫斯基距離比較直觀,可是它與數據的分佈無關,具備必定的侷限性,若是x方向的幅值遠遠大於y方向的幅值,這個距離公式就會過分方法x維度的做用。所以在加算前,須要對數據進行變換(去均值,除以標準差)。這種方法在假設數據各個維度不相關的狀況下,利用數據分佈的特性計算出不一樣的距離。若是數據維度之間數據相關,這時該類距離就不合適了!
1.2 馬氏距離:若不一樣維度之間存在相關性和尺度變換等關係,須要使用一種變化規則,將當前空間中的向量變換到另外一個能夠簡單度量的空間中去測量。假設樣本之間的協方差矩陣是Σ,利用矩陣分解(LU分解)能夠轉換爲下三角矩陣和上三角矩陣的乘積:Σ=LLT。消除不一樣維度之間的相關性和尺度變換,須要對樣本x作以下處理:z=L−1(x−μ),通過處理的向量就能夠利用歐式距離進行度量。
2.形狀之間的類似性(空間上的結構類似性)
2.1 編輯距離
如何去比較兩個不一樣長度的字符串的類似性?給定兩個字符串,由一個轉成另外一個所須要的最小編輯操做,其中須要有三個操做,相同位置字符的替換、對字符串中某個位置進行插入與刪除。具體的遞歸表達式以下:
2.2 DTW(Dynamic Time Warpping)距離
動態時間規整(Dynamic Time Warping;DTW)是一種將時間規整和距離測度相結合的一種非線性規整技術。主要思想是把未知量均勻地伸長或者縮短,直到與參考模式的長度一致,在這一過程當中,未知量的時間軸要不均勻地扭曲或彎折,以使其特徵與參考模式特徵對正。
DTW(Dynamic Time Warping)距離的計算過程以下:
假設,兩個時間序列Q和C,Q={q1,q2,…,qn},C={c1,c2,…,cm}。構造一個(n, m)的矩陣,第(i, j)單元記錄兩個點(qi,cj)之間的歐氏距離,d(qi,cj)=|qi−cj|。一條彎折的路徑W,由若干個彼此相連的矩陣單元構成,這條路徑描述了Q和C之間的一種映射。設第k個單元定義爲wk=(i,j)k,則w={w1,w2,w3,...,wK},max(n,m)<=K<=n+m−1。
這條彎折的路徑知足以下的條件:
在知足上述條件的多條路徑中,最短的,花費最少的一條路徑是:
DTW距離的計算過程是一個DP過程,先用歐式距離初始化矩陣,而後使用以下遞推公式進行求解:
數據源:集羣中全部集羣的多指標度量值(秒級數據)
基本的預處理
* and metric_name : machine_022_cpu | select stamp, metric_val order by stamp limit 2000
集羣中有相同屬性的機器大約爲5K臺,那麼咱們就會有通過處理的5K條NET:Tcp的曲線,如今須要對該集合進行聚類,找到其中類似形態的曲線,並發現形態不一致的曲線形態。
本實驗中將時序序列將高維度數據下降到長度爲300的PAA策略。
DBSCAN(Density-BasedSpatial Clustering of Applications with Noise),一種基於密度的聚類方法,即找到被低密度區域分離的稠密區域,要求聚類空間中的必定區域內所包含對象(點或其餘空間對象)的數目不小於某一給定閾值。
其中幾個關鍵術語:
上圖是通常DBSCAN的聚類過程,其中有兩個地方能夠進行較好的優化:
兩個參數
3.1 KD Tree構造
KD(K-Dimensional) Tree,是一種分割K維度數據空間的數據結構。主要應用與多維空間關鍵數據的搜索(如:範圍搜索和近鄰搜索)。
function kdtree(list of points pointList, int depth) { // select axis based on depth so that axis cycles through all valid values var int axis := depth % k; // sort point list and choose median as pivot element select median by axis from pointList; // create node and construct subtree node.location := median; node.leftChild := kdtree(points in pointList before median, depth + 1); node.rightChild := kdtree(points in pointList before median, depth + 1); return node; }
上述算法模型中,最大的問題在於軸點的選擇,選擇好軸點以後,就能夠遞歸去建立這顆樹了。
建樹必須遵循的兩個準則:
選擇軸點的策略
鄰近搜索策略
3.2 參數自動化估計
具體的成分以下圖所示:
具體的參數估計流程以下:
計算任意兩個樣本之間的距離
計算每一個樣本的k-距離值,選擇每一個樣本最近鄰的k個樣本,將該全部樣本的k距離集合進行升序排序,同時記錄每一個候選距離中對應的點對座標(去重複以後,用來記錄該距離有多少個點)
去查找k距離排序以後的若干波動點(見參考文獻)
使用KMeans聚類,對於找到的候選信息(eps,minPts)進行聚類,獲得相應的聚類中心
而後將該參數送入到DBSCAN中進行聚類,對獲得的聚類中心的信息進行斷定,獲得較好的聚類結果
3.3 DBSCAN具體流程
直觀的理解下本節開頭關於聚類指標的說明:
core point:聚類中心向量
Border Point:某個聚類中心的邊界樣本點
MinPts:最少聚類中心的樣本點的數量
ϵ:聚類中心內的最遠邊緣樣本到聚類中心的距離
Noise Point:噪聲樣本點
DBSCAN算法描述中經常使用的概念
密度可達:樣本點p,關於樣本點q對於參數Eps,MinPts密度直達,若它知足p∈Neighbor(q,Eps) 且 |Neighbor(q,Eps)|>=MinPts
密度可達:樣本點p,關於樣本點q對於參數Eps,MinPts密度可達,若存在一系列的樣本點p1,...,pn(其中p1=q, pn=p)使得對於i=1,2...,n−1,樣本點pi密度可達
密度相連:樣本點p,關於樣本點q對於參數Eps,MinPts密度相連,若存在一個樣本點o,使得p和q均由樣本點o密度可達。
具體的算法流程
層次聚類是一種很直觀的算法,就是一層一層的對數據進行聚類操做,能夠自低向上進行合併聚類、也能夠自頂向下進行分裂聚類。
repeat
* | select ts_dencity_cluster(stamp, metric_val, metric_name)
上述輸出結果說明
* | select ts_hierarchical_cluster(stamp, metric_val, metric_name, 2)
* | select ts_hierarchical_cluster(stamp, metric_val, metric_name, 8)
上述輸出結果說明
* | select ts_similar_instance(stamp, metric_val, metric_name, 'machine_008_cpu')
返回結果
阿里雲日誌服務針對日誌提供了完整的解決方案,如下相關功能是日誌進階的必備良藥: