如何實現多維智能監控?--AI運維的實踐探索【一】

作者丨吳樹生:騰訊高級工程師,負責SNG大數據監控平臺建設。近十年監控系統開發經驗,具有構建基于大數據平臺的海量高可用分布式監控系統研發經驗。

導語:監控數據多維化后,帶來新的應用場景。SNG的哈勃多維監控平臺在完成大數據架構改造后,嘗試引入AI能力,多維根因分析是其中一試點,用于摸索AI的應用經驗。本分分享探索過程和經驗,希望可給后續AI應用提供參考。

前言

在2015年構建多維監控平臺時用kmeans做了異常點多維根因分析的嘗試,后因種種原因而擱置了深入研究。雖中止了兩年,但一直未忘當初的夢想。隨著掀起AI浪潮,平臺和技術也已成熟,監控團隊歷經兩個月的重新調研和預研后取得突破,另辟蹊徑地找到異常點的多維根因分析方法,我們稱為MDRCA(Multi-Dimensional Root Cause Analysis)算法。

這篇文章為持續兩年多的夢畫上一個句號,它是監控團隊第一代成果總結:介紹監控多維數據特點、基于kmeans多維根因分析方法、第一代MDRCA算法和AI在監控領域應用經驗。筆者不敢貪功,僅將成果描述出來,如有偏差不全之處還望與讀者多交流修正。

監控多維數據特點

監控的核心是對監控對象的指標采集、處理、檢測和分析。傳統監控的對象是一個單一的實體,例如服務器、路由器、交換機等。這些單一對象通過指標反映運行狀態,例如服務器的狀態指標有CPU使用率、內存使用大小、磁盤IO和網卡流量等。

傳統監控系統通過定時任務采集這些監控對象的指標數據,經過校正后存儲起來用于展示和異常檢測。異常檢測通過判斷指標是否偏離設置的閾值來標識異常事件。

在傳統監控之后,將監控對象擴展為一個虛擬的業務功能或業務模塊,這時的對象仍是單一的,可用一個唯一ID表達。對象的指標也相應的轉變為反映業務功能狀態的指標,例如接口調用次數、http返回200次數、http返回500次數等。

這些指標數據通常需要在應用程序埋點上報。數據處理、存儲和異常檢測與傳統監控一致。

隨著業務擴展,業務模塊間的關系愈加復雜。通過單一對象的指標反映的狀態已不能滿足業務監控需求。業務異常往往體現在多個對象的指標異常,用戶收到告警后需要在大量指標數據中剝絲抽繭般地分析異常原因。

這個狀況伴生了運維痛點:一是告警量大;二是分析耗時長。

解決這一問題的關鍵是建立對象和指標的關聯模型。通過相關性收斂對象和指標,減少告警量。并通過關聯模型中的調用關系模型和層次關系模型快速找到問題根因。對傳統監控中的對象翻譯為多維度屬性后對指標數據進行處理、存儲和異常檢測,形成多維監控。對象的維度屬性將對象分類,構建了對象的關聯模型。

這樣對單一對象的異常檢測可提煉為對某一維度屬性的異常檢測,從而減少檢測對象。在發生異常后根據維度下鉆分析,有規則地提供分析路徑,避免盲目分析,減少分析耗時。

用A、B和C這三個業務模塊來說明上面介紹的多維監控形成過程:

這三個模塊的調用關系為A調用B,B調用C。C根據機房劃分為C1和C2兩個子模塊。A模塊下有2臺機器(10.0.1.1和10.0.1.2),B下有3臺機器(10.0.2.1、10.0.2.2和10.0.2.3),C1下有1臺機器(10.0.3.11),C2下有2臺機器(10.0.3.21和10.0.3.22)。

假設C模塊下的機器負載已飽和,也就是說如果其中有一臺機器異常,則提供有損服務,影響B和A的成功率。如果C2模塊下的10.0.3.21機器異常,則會觸發10.0.3.21機器告警及A和B下的5臺機器告警,總共有6個對象產生告警。

在實際運營中,往往有多個指標反映一個功能狀態,進一步增加告警量。

為解決例子描述的告警量大和分析耗時痛點,將監控對象的機器翻譯成業務模塊,從而形成一個業務模塊和機器的多維度數據。異常檢測也由機器維度更改為業務模塊維度,減少檢測對象的數量。在分析異常時,沿著業務模塊到機器的層級關系可查找出異常點。

還有一種多維數據的場景是面向APP應用。APP的請求自身帶有版本、機型、運營商和地域這些維度信息。發現指標異常后需要判斷是哪個維度特性造成的異常或異常影響的維度范圍。

監控多維數據由三部分組成:

  • 時間維度,監控系統時間粒度通常取1分鐘粒度;
  • 業務特性維度,后端服務的維度通常為業務模塊,APP監控的維度通常為版本、機型、運營商和地域;
  • 指標,如成功率,耗時和延時分段統計等。

下表是一個SNG移動監控的多維數據樣例:

圖片描述

基于Kmeans分類的多維根因分析方法

在建設多維監控平臺初期,為解決人工逐個觀察各維度的異常數據帶來的效率問題,使用kmeans對成功率指標分類。推薦出分類后的異常維度后再做二次分析。
下圖是2014年12月手Q接入層SSO模塊的成功率分鐘曲線。當天中午13:00附近接入層成功率由接近99.9%下降為99.5%。

圖片描述

發生異常后,通過人工分析的步驟為分別查看某一維度的成功率,找出成功率低并且總量大的維度條件。選定最可疑的維度條件再重復剛剛介紹的分析過程。直到遍歷完所有維度,找出成功率下降的維度組合。
例如:模塊維度有A、B和C三個模塊,A模塊下有命令字(a1,a2和a3),B模塊下有命令字(b1,b2),C模塊下有命令字(c1,c2和c3)。

在異常點的指標統計如下表:

圖片描述

  • 按模塊觀察,模塊A的成功率為99.75%,總數為300;模塊B的成功率為95.83%,總數為150;模塊C的成功率為99.4%,總數為300。
  • 經過比較,模塊B成功率顯著低于模塊A和模塊C,并且接近95%。模塊B成為可以維度條件。
  • 接著觀察模塊B條件下的命令字,其中命令字b1的成功率顯著低于異常點平均成功率95%。

分析完成后確定模塊B的命令字b1造成成功率下降。

使用kmeans對成功率分類模擬人工分類操作。對各維度的成功率進行分類后可以得到顯著差異的維度條件。
如對上面例子的各模塊成功率做kmeans分類,可以獲得成功率有顯著差異的模塊B和命令字b1。稱具有顯著差異的維度集合為反向分析。反向分析結果在二次分析時需要特別關注。

下面兩張圖是對手 Q 接入層異常模塊分析的反向分析結果, 結合接入層的響應量判斷出異常模塊的RedTouchSvc,異常命令字為RedTouchSvc.ClientReport。

圖片描述

圖片描述

MDRCA(Multi-Dimensional Root Cause Analysis)算法

基于Kmeans對成功率分析方法在一定程度上提升了問題分析效率,但存在兩個問題:

  • 只能應用于成功率的指標分析,對于累積量的指標如請求量則失去作用;
  • 未引入成功率總量的權重,分類后推薦出的異常維度條件需要二次人工分析。

中斷近兩年,并在建設完成多維監控平后,監控團隊重新投入人力調研實現多維根因分析方法。在監控領域AI剛剛起步,可參考的論文和經驗較少。我們在走了一段彎路后,借鑒和改進廣告推薦中的異常分析算法,實現MDRCA算法,解決Kmeans成功率分類方法的兩個問題。

對于指標我們分兩類:單一變量指標和復合指標。

  • 單一變量指標:請求量、響應量等不依賴其他變量獨立統計的指標。
  • 復合指標:成功率這類需要通過兩個或多個變量做除法計算的指標。

這里我們用單一變量指標請求量來說明MDRCA算法的原理。

假設一個業務的請求量X(m)的某一維度下有m個值,分解到各維度的請求量為(x1,x2,…,xn,n=m)。X(m)可用公式表示:

圖片描述

在異常時刻t 觀察到異常的請求量為A(m)。A(m) 由各維度在t 時刻的值組成。A(m) 可用公式表示:
圖片描述

也就是說觀察到的總體請求量異常由各維度的異常分量組成。
根據歷史觀察值獲得時刻 t 的請求量預測值F(m)。F(m)由各維度的預測值組成。F(m) 可用公式表示:
圖片描述

生成預測值算法有多種,一種方法是取前一天對于時刻 t 的值。在本文的 MDRCA 算法中,預測值取離前7天的 t-20,t 時刻的平均值最近的一天的 t 時刻作為參考點。
在MDRCA算法中定義一個值 Explanatory Power,簡稱EP來衡量觀察維度 i 下維度值 j 對異常的占比,或稱貢獻度。EP的計算公式為:
圖片描述

例如,異常時刻t的請求量為1000,根據歷史數據預測時刻t的請求量為1500。維度 i 下的維度值 j 在異常時刻 t 的請求量值為200,根據j的歷史數據預測時刻 t 下 j 的請求量值應為500。根據公式計算可知j的EP值為(200-500)/(1000-1500)=0.6。

當維度下有值的變化方向與異常值變化方向相反時,EP取值為負數。這時其他維度值的EP取值也可能大于1。但是觀察維度下所有維度值的EP和為1。

MDRCA算法中定義另一個值Surprise來衡量觀察維度 i 下維度值 j 的變化差異。為計算JSD,先計算兩個變量 p 和 q 。其中 p 為維度值 j 在預測值中的占比,q 為維度值 j 在異常值中的占比。p 和 q 的計算公式如下:

  1. 和 q 的取值為(0,1)。獲得 p 和 q 后,維度值 j 的變化差異計算公式為:

圖片描述

至此,我們獲得衡量維度值 j 的異常貢獻值 EP 和變化差異值 Surprise。對這兩個值用四象限方法解釋如下:
圖片描述

從四象限中可知,維度中 EP 和 Surprise 分類大的維度值可作為候選維度。對 EP 和Surprise 分類可采用前面介紹的 kmeans 分類方法。
選出每個維度下的候選維度集合后,計算各集合的 Surprise 和用于衡量各維度的異常變化差異。差異越大的維度越有可能成為異常的主要影響因素。

在這還用了另一個技巧: 異常的主要影響因素往往是少量維度值的集合。所以取后續集合的 Surprise均值大的維度作為優先選擇的條件。選出維度后,在選擇維度中貢獻大的維度值作為優先條件。

MDRCA算法的多維根因分析方法如下:

圖片描述

以上為對單一變量的MDRCA算法介紹。對成功率這類復合指標EP計算為求分子分母兩個變量的偏導,Surprise的計算方法為求分子和分母變量的Surprise值之和。

AI應用經驗

為借助AI的東風解決監控領域的痛點,同時摸索AI在監控的實踐經驗。我們拿智能多維分析探路。中間經歷曲折踩坑,反思當中的過程有幾點經驗值得在后續開發過程中借鑒。

其一,梳理AI應用開發過程的角色。

新近的互聯網浪潮AI,必然吸引不少新老程序員踏浪,如何才能在浪中不翻船呢?
經過摸索后,我們認為在AI應用開發中需要以下四類角色:

  • 領域專家

深入了解業務的領域專家能把握住該業務的核心痛點,結合AI找出著力點和給AI專家提供業務領域信息;

  • AI專家

這個角色知識淵博、深入掌握算法和實踐。理解領域專家提供的痛點信息后,預研并提供算法指導和支撐。

  • 算法工程化專家

這個角色拿到AI專家提供的算法后做工程化實現和優化提升算法性能。

  • 應用開發專家

這類角色是將AI成果上線應用,提升易用性和用戶體驗,同時在應用中預設收集用戶操作和反饋信息的渠道。

其二,先調研、讀論文和參考業界做法的研究步驟。

讀論文很重要。領域專家梳理出核心痛點,業界也存在類似痛點,并且有相關研究。不妨先參考業界做法,讀懂和理解相關論文和應用場景后再做改進。

其三,溝通交流。

在監控領域AI應用剛剛起步,大家還在摸著石頭過河,可參考的成功案例較少。所謂三個臭皮匠抵過一個諸葛亮,聚在一起學習交流,有利于糾正錯誤認識,明晰算法應用場景和擴展思路。

結語

最后,再次感謝SNG監控團隊小伙伴們的努力,摸索出了以上經驗。也歡迎大家多交流指正。團隊也在持續探索更優的多維監控異常分析算法,后續也將持續推出系列文章。大家敬請關注。

參考資料: 1 Adtributor: Revenue Debugging in Advertising Systems Ranjita
Bhagwan,Rahul Kumar,Ramachandran Ramjee, George Varghese,Surjyakanta
Mohapatra, Hemanth Manoharan, and Piyush Shah, Microsoft, 2014

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/391991.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/391991.shtml
英文地址,請注明出處:http://en.pswp.cn/news/391991.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.Net Web開發技術棧

有很多朋友有的因為興趣,有的因為生計而走向了.Net中,有很多朋友想學,但是又不知道怎么學,學什么,怎么系統的學,為此我以我微薄之力總結歸納寫了一篇.Net web開發技術棧,以此幫助那些想學&#…

使用Python和MetaTrader在5分鐘內開始構建您的交易策略

In one of my last posts, I showed how to create graphics using the Plotly library. To do this, we import data from MetaTrader in a ‘raw’ way without automation. Today, we will learn how to automate this process and plot a heatmap graph of the correlation…

卷積神經網絡 手勢識別_如何構建識別手語手勢的卷積神經網絡

卷積神經網絡 手勢識別by Vagdevi Kommineni通過瓦格德維科米尼(Vagdevi Kommineni) 如何構建識別手語手勢的卷積神經網絡 (How to build a convolutional neural network that recognizes sign language gestures) Sign language has been a major boon for people who are h…

spring—第一個spring程序

1.導入依賴 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.0.9.RELEASE</version></dependency>2.寫一個接口和實現 public interface dao {public void save(); }…

請對比html與css的異同,css2與css3的區別是什么?

css主要有三個版本&#xff0c;分別是css1、css2、css3。css2使用的比較多&#xff0c;因為css1的屬性比較少&#xff0c;而css3有一些老式瀏覽器并不支持&#xff0c;所以大家在開發的時候主要還是使用css2。CSS1提供有關字體、顏色、位置和文本屬性的基本信息&#xff0c;該版…

基礎 之 數組

shell中的數組 array (1 2 3) array ([1]ins1 [2]ins2 [3]ins3)array ($(命令)) # 三種定義數組&#xff0c;直接定義&#xff0c;鍵值對&#xff0c;直接用命令做數組的值。${array[*]}${array[]}${array[0]} # 輸出數組中的0位置的值&#xff0c;*和…

Linux_異常_08_本機無法訪問虛擬機web等工程

這是因為防火墻的原因&#xff0c;把響應端口開啟就行了。 # Firewall configuration written by system-config-firewall # Manual customization of this file is not recommended. *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m st…

Building a WAMP Dev Environment [3/4] - Installing and Configuring PHP

Moved to http://blog.tangcs.com/2008/10/27/wamp-installing-configuring-php/轉載于:https://www.cnblogs.com/WarrenTang/archive/2008/10/27/1320069.html

ipywidgets_未來價值和Ipywidgets

ipywidgetsHow to use Ipywidgets to visualize future value with different interest rates.如何使用Ipywidgets可視化不同利率下的未來價值。 There are some calculations that even being easy becoming better with a visualization of his terms. Moreover, the sooner…

2019 css 框架_宣布CSS 2019調查狀態

2019 css 框架by Sacha Greif由Sacha Greif 宣布#StateOfCSS 2019調查 (Announcing the #StateOfCSS 2019 Survey) 了解JavaScript狀況之后&#xff0c;幫助我們確定最新CSS趨勢 (After the State of JavaScript, help us identify the latest CSS trends) I’ve been using C…

計算機主機后面輻射大,電腦的背面輻射大嗎

眾所周知&#xff0c;電子產品的輻射都比較大&#xff0c;而電腦是非常常見的電子產品&#xff0c;它也存在著一定的輻射&#xff0c;那么電腦的背面輻射大嗎?下面就一起隨佰佰安全網小編來了解一下吧。有資料顯示&#xff0c;電腦后面的輻射比前面大&#xff0c;長期近距離在…

spring— Bean標簽scope配置和生命周期配置

scope配置 singleton 默認值&#xff0c;單例的prototype 多例的request WEB 項目中&#xff0c;Spring 創建一個 Bean的對象&#xff0c;將對象存入到 request 域中session WEB 項目中&#xff0c;Spring 創建一個 Bean 的對象&#xff0c;將對象存入session 域中global sess…

裝飾器3--裝飾器作用原理

多思考&#xff0c;多記憶&#xff01;&#xff01;&#xff01; 轉載于:https://www.cnblogs.com/momo8238/p/7217345.html

用folium模塊畫地理圖_使用Folium表示您的地理空間數據

用folium模塊畫地理圖As a part of the Data Science community, Geospatial data is one of the most crucial kinds of data to work with. The applications are as simple as ‘Where’s my food delivery order right now?’ and as complex as ‘What is the most optim…

Windows下安裝Python模塊時環境配置

“Win R”打開cmd終端&#xff0c;如果直接在里面使用pip命令的時候&#xff0c;要么出現“syntax invalid”&#xff0c;要么出現&#xff1a; pip is not recognized as an internal or external command, operable program or batch file. 此時需要將C:\Python27\Scripts添加…

播客2008

http://blog.tangcs.com/2008/12/29/year-2008/轉載于:https://www.cnblogs.com/WarrenTang/articles/1364465.html

linear在HTML的作用,CSS3里的linear-gradient()函數

linear-gradient() 函數用于創建一個線性漸變的 "圖像"。為了創建一個線性漸變&#xff0c;你需要設置一個起始點和一個方向(指定為一個角度)的漸變效果。你還要定義終止色。終止色就是你想讓Gecko去平滑的過渡&#xff0c;并且你必須指定至少兩種&#xff0c;當然也…

golang底層深入_帶有Golang的GraphQL:從基礎到高級的深入研究

golang底層深入by Ridham Tarpara由里德姆塔帕拉(Ridham Tarpara) 帶有Golang的GraphQL&#xff1a;從基礎到高級的深入研究 (GraphQL with Golang: A Deep Dive From Basics To Advanced) GraphQL has become a buzzword over the last few years after Facebook made it ope…

spring—Bean實例化三種方式

1&#xff09; 使用無參構造方法實例化 它會根據默認無參構造方法來創建類對象&#xff0c;如果bean中沒有默認無參構造函數&#xff0c;將會創建失敗 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework.o…

bzoj 3439: Kpm的MC密碼

Description 背景 想Kpm當年為了防止別人隨便進入他的MC&#xff0c;給他的PC設了各種奇怪的密碼和驗證問題&#xff08;不要問我他是怎么設的。。。&#xff09;&#xff0c;于是乎&#xff0c;他現在理所當然地忘記了密碼&#xff0c;只能來解答那些神奇的身份驗證問題了。。…