1.摘要:
在大型互聯網架構中,爲提升平臺的計算能力及資源利用率,普遍採用分佈式技術。然而使用分佈式技術也會帶來一些潛在問題,若主機的資源需求與資源分配不匹配、部分主機長時間負載過重,容易導致服務失效,造成服務中斷或數據丟失;同時當系統發生故障時由於服務分散在不同主機上導致問題難以定位,故障排查耗時等問題。因此,有必要將AIOps技術應用於分佈式系統運維中。針對電信行業某一運營服務,通過對該服務下全部機器的監控數據及該服務的調用耗時數據進行預處理生成機器可計算的數據,使用KNN、邏輯迴歸等模型進行分類計算,從而預測出30分鐘後該服務調用是否超時。因此,我們可以提前對此類告警加以防範或採取措施,從而提前預測故障機器,不必等服務真正出現故障後進行修復操作。
2.功能介紹:
爲提升運維人員的工作效率並減輕運維人員工作負擔,本系統將充分利用大數據及人工智能技術,通過構建監控數據用戶畫像提取出豐富的特徵矩陣並與時序數據進行整合,利用機器學習分類算法對特徵信息進行分類計算構建分類模型,通過已訓練生成的分類模型對當前數據進行計算,以實現對分佈式服務調用超時的預測功能。
3.系統架構:
圖1系統架構圖
4.實現原理:
4.1數據採集
開發人員通過自建監控平臺對該服務進行監控,將監控到的主機時序數據及服務調用耗時數據存放至Hadoop以構建全量數據。
4.2構建用戶畫像
對採集到的數據構建用戶畫像,提取特徵矩陣。在構建用戶畫像階段又包括3個步驟:數據預處理、特徵抽取、生成標籤。其架構圖如下圖2所示:
圖2構建用戶畫像架構圖
- 數據預處理:數據預處理類似於ETL工作,主要完成數據清洗,以及對噪聲數據進行過濾,例如黑名單中的數據等,如果涉及到文本信息處理還需先對文本進行分詞、去停用詞等操作。
- 特徵抽取:針對字符數據,例如CPU使用率、內存使用率進行特定抽取並使用歸一化方法將數據處理爲[0,1];針對文本數據主要採用TF*IDF、卡方檢驗、信息增益相混合的特徵抽取方法,首先針對長文本,系統採用TF*IDF方法進行特徵抽取,針對短文本,系統採用卡方檢驗方法進行特徵抽取,然後系統使用信息增益對特徵進行打分,根據評分設置權重。
- 構建標籤體系:對監控數據進行標籤處理,構建標籤體系。通常構建三層標籤體系,前兩層標籤爲細粒度標籤,往往從數據採集層獲取,針對不同服務選用不同服務超時閾值進行切分,例如針對權限服務我們選擇當調用耗時超過100毫秒設爲異常數據否則爲正常數據;而第三層爲粗粒度標籤,系統使用K-means算法對已抽取的特徵信息進行聚類計算,生成相應的K個聚簇,令這K個聚簇的質心爲粗粒度標籤信息。
4.3數據存儲
將提取出的特徵信息、標籤數據存儲至Hive中,以構建數據倉庫,方便後續進行統計分析及模型訓練;
4.4數據建模
此模塊爲本系統重點模塊,本系統主要選用機器學習的分類算法,其中分類算法種類繁多,針對衆多算法我們通過對已處理後的監控數據進行模型實驗以驗證哪種模型更適合我們的場景,其驗證結果如下表1所示:
表1模型驗證結果表
|
accurate |
precision (正常) |
recall (正常) |
F1 (正常) |
precision (異常) |
recall (異常) |
F1 (異常) |
KNN(uniform) |
0.88095 |
0.88 |
1 |
0.94 |
0.5 |
0.5 |
0.5 |
KNN(distance) |
0.87797 |
0.88 |
1 |
0.94 |
0.25 |
0.33 |
0.28 |
Logistic Regression |
0.88095 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
Naïve Bayes |
0.12797 |
0.8 |
0.01 |
0.03 |
0.12 |
0.97 |
0.21 |
SVM |
0.88095 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
Decision Tree |
0.78273 |
0.88 |
1 |
0.94 |
0.18 |
0.16 |
0.17 |
Random Foreast |
0.88095 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
AdaBoost |
0.88095 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
GBDT |
0.88095 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
LSTM |
0.96541 |
0.88 |
1 |
0.94 |
0 |
0 |
0 |
實際運維工作中,運維人員更加關注針對故障信息預測得到的結果,因此實驗中突出針對預測到故障信息所計算得到的評價指標進行對比,我們對異常數據的預測效果進行加粗,可以發現KNN模型更適合分佈式服務調用耗時的預測場景,於是我們選擇KNN對數據進行模型計算,通過表1可以得出以下信息:
- KNN算法應用於分佈式服務故障預測場景中的效果明顯優於其它七種分類算法,基於KNN算法所得到的實驗結果中,針對故障數據所計算得到的召回率、精確率及F測度值均優於其它七種算法達到的指標效果。
- 雖然樸素貝葉斯算法對故障數據的召回率相對較高,但其準確率太低,因此不適用於該應用場景。
綜上所述,KNN算法比較適合應用於分佈式服務故障預測,同時藉助其優異的數據結構能夠有效地進行分佈式計算任務。另外由於主機每種性能指標之間存在相互聯繫,同時各種指標單位不一致,通常傳統識別主機性能是否發生故障使用閾值方式對各指標值進行邏輯判斷獲取。另外,KNN算法簡單,易於理解,易於實現,無需估計參數,特別適合對稀有事件進行分類,同時故障數據本身具有稀疏性的特點。因此考慮到數據及應用場景特點並結合算法自身特徵,基於KNN算法的分佈式服務故障預測模型具有一定的可用性及有效性。
KNN算法的核心思想是如果一個樣本在特徵空間中的K個最相鄰的樣本中的大多數屬於某一個類別,則該樣本也屬於這個類別,並具有這個類別上樣本的特性。其算法流程如下:
- 計算已知類別數據集中的點與當前之間的距離;
- 按照距離遞增次序排序;
- 選取與當前點距離最近的k個點;
- 確定前k個點所在的類別的出現頻率;
- 返回前k個點出現頻率最高的類別作爲當前點的預測類別;
4.5模型計算
針對上述建模過程,模型構建完成後將投入系統進行計算,進而完成預測任務。系統首先針對監控數據用戶畫像生成的特徵矩陣進行數據預處理,然後針對生成的特徵數據使用KNN算法進行模型計算。模型計算架構圖如下圖3所示:
圖3模型計算架構圖
4.6數據展現
通過模型計算生成預測結果,當系統預測到異常信息後通過微信/短信等方式發送至運維人員的移動端令運維人員能夠及時對故障信息進行排查。預測報表結果如下圖4所示:
圖4服務預測報表