每天5萬(wàn)條告警,騰訊如何做到“咖啡運(yùn)維”?
這十多年來(lái),騰訊運(yùn)維團(tuán)隊(duì)里發(fā)生的點(diǎn)點(diǎn)滴滴,在我內(nèi)心中,每件事情印象都很深刻。
我把一些故事梳理了一下,發(fā)現(xiàn)有些事情可以跟大家交流分享,所以借這個(gè)機(jī)會(huì)跟大家談?wù)勻v訊最近一兩年做的一些 AI 落地。
我們都做些什么?
在 IT 行業(yè),稍微大一點(diǎn)的企業(yè)都會(huì)設(shè)有運(yùn)維團(tuán)隊(duì),我們的運(yùn)維團(tuán)隊(duì)和大家一樣會(huì)做很多基礎(chǔ)工作,比如資產(chǎn)的管理、服務(wù)器管理、業(yè)務(wù)架構(gòu)規(guī)劃等等。
以 2015 年天津大爆炸的事件為例:
在業(yè)務(wù)架構(gòu)上,我們之前做過(guò) QQ 全國(guó)多地高可用分布,所以在天津大爆炸事件中,是由運(yùn)維來(lái)主導(dǎo)將北方天津接入的用戶(hù)從天津 IDC 機(jī)房遷到了上海和深圳。
這也是有史以來(lái)***規(guī)模的用戶(hù)遷移,用戶(hù)是無(wú)感知的,這就是我們運(yùn)維團(tuán)隊(duì)日常工作的一個(gè)縮影。
還有,每年的紅包是大家比較熟悉的,每年都會(huì)由運(yùn)維團(tuán)隊(duì)參與到整個(gè)項(xiàng)目當(dāng)中。
另外,運(yùn)維團(tuán)隊(duì)也需要關(guān)注成本,會(huì)花很多力氣去優(yōu)化設(shè)備、帶寬的使用情況。
其他的還包括大家可能都聽(tīng)說(shuō)過(guò)的一些突發(fā)事件,比如 8 億人軍裝照、直播業(yè)務(wù)井噴、鹿晗事件、紅米首發(fā)事件等等,后面都有我們的團(tuán)隊(duì)支撐。
我來(lái)自騰訊的 SNG 社交網(wǎng)絡(luò)業(yè)務(wù),旗下主要有 QQ、QQ 空間、騰訊云、QQ 會(huì)員、QQ 音樂(lè)等很多產(chǎn)品。
它有一些特點(diǎn),比如單體業(yè)務(wù)非常大,有兩萬(wàn)多臺(tái),也有超過(guò) 19 年的老業(yè)務(wù),然后每年還會(huì)有 20+ 個(gè)新業(yè)務(wù)上線(xiàn)。
有些業(yè)務(wù)會(huì)慢慢地衰退,新老業(yè)務(wù)變換得非常快,同時(shí)我們也在做一些 2B 的事。
我們運(yùn)維團(tuán)隊(duì)所處的環(huán)境和面臨的問(wèn)題都非常復(fù)雜,那么有些什么樣的問(wèn)題呢?今天的分享是關(guān)于我們?cè)?AI 領(lǐng)域監(jiān)控方面的事件,我先把這個(gè)問(wèn)題拋出來(lái)。
SNG 每天有 5 萬(wàn)條短信告警,每個(gè)人一天***能收到 1500 條。大家想象一下,一個(gè)手機(jī)每天收 1500 條短信是多么讓人崩潰的事情。
講個(gè)笑話(huà),我們的一些 Leader 說(shuō),他們不看具體告警的內(nèi)容,而是看告警的發(fā)送頻率,頻率快了就有問(wèn)題,如果每天按照固定的頻率發(fā)就沒(méi)什么問(wèn)題。
這是個(gè)玩笑,但很深刻的折射出我們運(yùn)維所面臨的告警量巨大的挑戰(zhàn)是非常嚴(yán)峻的。
每天發(fā)出 5 萬(wàn)條告警,它背后有將近 900 萬(wàn)的監(jiān)控指標(biāo),這是巨大的問(wèn)題,同時(shí)也是非常寶貴的數(shù)據(jù)。但是我們過(guò)去沒(méi)怎么用好,今天分享的也是我們?cè)谶@點(diǎn)做的實(shí)踐。
我們的愿望:咖啡運(yùn)維
以上是我們大致的背景情況,而早先我們的愿望是能做到“咖啡運(yùn)維”。什么是咖啡運(yùn)維?
剛?cè)肼毜臅r(shí)候老板跟我們說(shuō),做運(yùn)維的個(gè)人目標(biāo)就是喝著咖啡做運(yùn)維,翹著二郎腿就把運(yùn)維工作做好。
然而十多年過(guò)去了還是沒(méi)有達(dá)到,非常艱難,業(yè)務(wù)增長(zhǎng)非??欤\(yùn)維的人數(shù)和規(guī)模增長(zhǎng)卻遠(yuǎn)遠(yuǎn)沒(méi)有業(yè)務(wù)和研發(fā)團(tuán)隊(duì)增長(zhǎng)快,我們要解決的問(wèn)題反而越來(lái)越多。
正在做哪些監(jiān)控?
在監(jiān)控上很難做到平衡,因?yàn)橐?、?zhǔn)、全,其實(shí)本身就是矛盾的。這是我們的業(yè)務(wù)架構(gòu),先看一下左邊的時(shí)間軸:
從 2006 年我入職騰訊開(kāi)始,我們的運(yùn)維和研發(fā)開(kāi)始 DO 分離,運(yùn)維開(kāi)始主導(dǎo)去做各種監(jiān)控系統(tǒng),陸陸續(xù)續(xù)十多年來(lái),建立了 20 多個(gè)監(jiān)控系統(tǒng),非常可怕。
很少有企業(yè)做這么多,多數(shù)企業(yè)一套監(jiān)控系統(tǒng)做好就可以了。而我們這么多監(jiān)控系統(tǒng),并非重復(fù)建設(shè),到目前看每套系統(tǒng)也都有存在價(jià)值的。
在 2009 年的時(shí)候,我們的監(jiān)控指標(biāo)非常少,監(jiān)控系統(tǒng)不到 10 個(gè),每天的短信告警數(shù)量也不多。差不多到了 2014 年的時(shí)候,監(jiān)控系統(tǒng)數(shù)超過(guò)了 20 個(gè),算是***狀態(tài)了。
而現(xiàn)在我們的監(jiān)控實(shí)例已經(jīng)超過(guò) 2000 萬(wàn)個(gè),隨著監(jiān)控實(shí)例的增加,告警也增加了非常多,告警泛濫的問(wèn)題沒(méi)有得到解決。
有哪些一樣的地方?
先來(lái)看看我們和大家有哪些做得一樣:
- 在運(yùn)維團(tuán)隊(duì)上和大家一樣,會(huì)被需求驅(qū)動(dòng),來(lái)自研發(fā)團(tuán)隊(duì)、老板、產(chǎn)品的各種驅(qū)動(dòng)。
- 業(yè)務(wù)受架構(gòu)的能力制約,為了解決一個(gè)問(wèn)題就建立一種方式方法監(jiān)控,這樣慢慢地建成。
- 過(guò)去的視野放在監(jiān)控點(diǎn)上,一個(gè)點(diǎn)一個(gè)點(diǎn)地解決問(wèn)題,不斷地給它們優(yōu)化。
- 可以把一件事情做得非常深入,在一個(gè)點(diǎn)上不斷優(yōu)化,對(duì)于監(jiān)控這么復(fù)雜的事情,這個(gè)效果并不是特別的好。
我們有哪些監(jiān)控呢?具體如下:
- 基礎(chǔ)指標(biāo)監(jiān)控,每家都有,我們也一樣。
- 自動(dòng)化測(cè)試模擬監(jiān)控,我們通過(guò)模擬用戶(hù)請(qǐng)求的方式來(lái)對(duì)我們的服務(wù)進(jìn)行播測(cè)發(fā)現(xiàn)問(wèn)題。
- 模塊間調(diào)用質(zhì)量監(jiān)控,在我們的監(jiān)控里是非常重要的體系,它是由服務(wù)的調(diào)用數(shù)據(jù)上報(bào)到后通過(guò)各種運(yùn)算,來(lái)反應(yīng)服務(wù)調(diào)用成面的監(jiān)控。
- 測(cè)速與返回碼統(tǒng)計(jì),下圖是直接由用戶(hù)端報(bào)給我們的各種數(shù)據(jù),其實(shí)這些監(jiān)控特別多,我前面提到的有一大半都是干這些事的,大家一看也能看懂,都很熟悉。
用的方法和大家也是類(lèi)似的,畫(huà)線(xiàn)、做統(tǒng)計(jì)圖、做一些分類(lèi),我們也做類(lèi)似的事情,但就是解決不了根本的問(wèn)題。
不過(guò)并不是說(shuō)這些系統(tǒng)就不能解決問(wèn)題。我舉個(gè)案例,2012 年 8 月,據(jù)報(bào)告顯示:QQ 空間首頁(yè)比微博首頁(yè)慢 35%。
為了解決這個(gè)問(wèn)題,我們聯(lián)合了公司十幾個(gè)團(tuán)隊(duì),很多骨干成員一起做系統(tǒng)的各種優(yōu)化,歷時(shí)將近 8 個(gè)月,最終取得了較好的效果。
這里面包括:
- 天津聯(lián)通 IDC 分布,優(yōu)化北方 15 省聯(lián)通用戶(hù)。
- 空間首頁(yè) DOM 節(jié)點(diǎn)裁剪,減少首屏渲染時(shí)間。
- 動(dòng)態(tài)加速對(duì)空間框架進(jìn)行加速。
- 空間 Set 合并重整,換新機(jī)型,減少穿越。
- 根據(jù) GSLB 測(cè)速結(jié)果,重新調(diào)整全國(guó)各省就近接入點(diǎn)。
- 空間框架機(jī)升級(jí) QZHTTP 版本,支持新特性。
- 中小運(yùn)營(yíng)商、移動(dòng)寬帶 CAP 接入。
非常直觀的案例,說(shuō)明傳統(tǒng)的手段還是有用的,也有一定的價(jià)值。但問(wèn)題是,為了做這一件事,我們投入了大量的時(shí)間、人力、精力。
所以這也促使我們不斷地思考應(yīng)該如何調(diào)整,因此就有了下一部分的內(nèi)容——有哪些不一樣的地方。
有哪些不一樣的地方?
我自己總結(jié)這些不一樣,其實(shí)是放下包袱去做創(chuàng)新。并不是要對(duì)系統(tǒng)進(jìn)行所謂的重構(gòu),破舊立新。
因?yàn)槊刻紫到y(tǒng)都有自己存在的價(jià)值,現(xiàn)在很多監(jiān)控系統(tǒng)也還在使用,它們的存在必有其價(jià)值,但我們可以?xún)?yōu)化后臺(tái)架構(gòu)落后的問(wèn)題。
關(guān)于架構(gòu)落后,我首先想分享的是多維的內(nèi)容。這也不算創(chuàng)新,因?yàn)殡S著業(yè)界大數(shù)據(jù)處理技術(shù)的強(qiáng)大,海量監(jiān)控?cái)?shù)據(jù)開(kāi)始被按多種緯度進(jìn)行組合分析,成為發(fā)掘數(shù)據(jù)背后隱藏問(wèn)題的最主要的監(jiān)控手段。
數(shù)據(jù)被處理成多種維度的視角
多維是什么呢?前面提到的監(jiān)控大家一看就明白了,基本上從我們想采集各種單維度或最多兩個(gè)維度的數(shù)據(jù)報(bào)到我們的系統(tǒng)開(kāi)始,根據(jù)時(shí)間的序列會(huì)進(jìn)行所謂的曲線(xiàn)會(huì)聚,做少量的分類(lèi)。
現(xiàn)在每一條上報(bào)的數(shù)據(jù)所帶的維度是非常多的,只要研發(fā)團(tuán)隊(duì)愿意往我這邊報(bào),沒(méi)有任何的限制,報(bào)一百個(gè)維度都能接受,我們后臺(tái)能把這些報(bào)上來(lái)的成千上萬(wàn)的維度用各種方式去做一些聚類(lèi)。
就像截圖上看到的,可以用不同的維度組合去對(duì)產(chǎn)品各種方面的數(shù)據(jù)進(jìn)行透視,這是我們的織云多維監(jiān)控系統(tǒng)。
數(shù)據(jù)可以選擇不同的緯度組合來(lái)看,比如說(shuō)版本、平臺(tái)、客戶(hù)端、網(wǎng)絡(luò)制式還有省份等等,這些數(shù)據(jù)其實(shí)就是在我們同一條數(shù)據(jù)報(bào)上來(lái)之后,在織云多維里做的處理。
在下面還可以看到***緩沖率、二次緩沖率、***加載的時(shí)長(zhǎng)錯(cuò)誤量等分緯度的數(shù)據(jù)。
原來(lái)的監(jiān)控?cái)?shù)據(jù)每次都要單獨(dú)上報(bào),現(xiàn)在通過(guò)一條就可以在系統(tǒng)里***地落地,這也是我們現(xiàn)在主流的監(jiān)控手段。
我們監(jiān)控多維數(shù)據(jù)所使用的技術(shù),應(yīng)該和大家比較接近,基本是一致的:
效果如何,同樣舉個(gè)案例,大概在 2014 年的時(shí)候,我們手機(jī)端用戶(hù)的訪(fǎng)問(wèn)開(kāi)始超過(guò) PC,帶來(lái)的問(wèn)題就是運(yùn)維壓力山大。
過(guò)去我們做的運(yùn)維監(jiān)控體系基本都是基于 PC 的,但是手機(jī)端用戶(hù)一來(lái),千奇百怪的問(wèn)題都出現(xiàn)了。
運(yùn)維在幫助研發(fā)團(tuán)隊(duì)一起優(yōu)化產(chǎn)品體驗(yàn)時(shí),利用多維的技術(shù),把系統(tǒng)中各種數(shù)據(jù)全部報(bào)到織云多維監(jiān)控中,運(yùn)維來(lái)做分析。
以上表格里是七個(gè)優(yōu)化點(diǎn),實(shí)際上不止,我記得這個(gè)項(xiàng)目到后面運(yùn)維大概有四十多個(gè)優(yōu)化點(diǎn)。
一個(gè)手機(jī)端的產(chǎn)品,發(fā)現(xiàn)了四十多個(gè)待優(yōu)化的點(diǎn),這些數(shù)據(jù)原來(lái)是分散在各處的,利用多維監(jiān)控之后,可以更加方便的把各種異常分析出來(lái)。
這個(gè)例子中,是我們運(yùn)維團(tuán)隊(duì)的兩位骨干在三個(gè)月左右的時(shí)間里完成的。對(duì)比前面的案例,這次場(chǎng)景更復(fù)雜,而且技術(shù)的難度也更高了,但在發(fā)現(xiàn)問(wèn)題的過(guò)程中,反而效率提升是非常的明顯。
前面幾十個(gè)團(tuán)隊(duì)八個(gè)月時(shí)間做的事,在這里就兩個(gè)人、兩三個(gè)月也能做到,效果卻能更好。
DLP:業(yè)務(wù)生死指標(biāo)
第二個(gè)想分享的,是關(guān)于 5 萬(wàn)條短信告警問(wèn)題。我和很多同行交流過(guò),基本上大家都有同樣的問(wèn)題,每個(gè)大點(diǎn)的運(yùn)維團(tuán)隊(duì)都面臨著告警泛濫的問(wèn)題,但到目前沒(méi)有哪個(gè)是可以***解決的。
所以我們做了一些嘗試,在 2016 年的時(shí)候推出 DLP,也就是業(yè)務(wù)生死指標(biāo),它有幾個(gè)限定:
***個(gè)要求,不能設(shè)定閾值。這是運(yùn)維規(guī)定的,完全根據(jù)指標(biāo)值做波動(dòng)判斷。
第二個(gè)要求,一個(gè)服務(wù)只能有一個(gè)生死指標(biāo)。大家會(huì)奇怪為什么有這樣的要求,那么請(qǐng)思考一下,我們?yōu)槭裁从心敲炊嗟母婢?/p>
為了保證這個(gè)服務(wù)不出問(wèn)題或是出了問(wèn)題能***時(shí)間被發(fā)現(xiàn),有的服務(wù)有四百多個(gè)指標(biāo)來(lái)監(jiān)控它,這些監(jiān)控指標(biāo)有運(yùn)維配的、有研發(fā)配的、也有產(chǎn)品配的。
這樣下來(lái),怎么可能不出現(xiàn)告警泛濫的情況?所以生死指標(biāo)里一個(gè)服務(wù)只允許有一個(gè)指標(biāo),衡量這個(gè)服務(wù)到底生還是死的指標(biāo)。
第三個(gè)要求,不建議用業(yè)務(wù)指標(biāo)做生死指標(biāo)。什么叫業(yè)務(wù)指標(biāo)?比如說(shuō)在線(xiàn)、收入曲線(xiàn)等這些指標(biāo)對(duì)業(yè)務(wù)來(lái)說(shuō)非常重要,但對(duì)于衡量一個(gè)系統(tǒng)是否有“生死”故障來(lái)說(shuō),這些指標(biāo)很有可能變成干擾。
舉個(gè)例子,比如你的業(yè)務(wù)正好在做一個(gè)推廣活動(dòng)、那么用戶(hù)的在線(xiàn)數(shù)、購(gòu)買(mǎi)量等產(chǎn)品指標(biāo)都會(huì)發(fā)生巨大的變化。
如果你對(duì)這些指標(biāo)進(jìn)行監(jiān)控,并不能衡量這個(gè)業(yè)務(wù)是生是死,所以我們不推薦用業(yè)務(wù)指標(biāo)來(lái)做 DLP 監(jiān)控。
什么叫閾值?過(guò)去我們絕大多數(shù)的監(jiān)控系統(tǒng)都是通過(guò)閾值來(lái)告警的:比如訪(fǎng)問(wèn)量超過(guò)一萬(wàn)的要告警、量低于幾百的要告警……
以前的監(jiān)控都是這樣做的,但是在我們這里面不允許,全部是去掉閾值的。我個(gè)人認(rèn)為“去閾值”是未來(lái)運(yùn)維監(jiān)控的趨勢(shì),而我們只是通過(guò)另外一個(gè)手段踐行了這個(gè)概念。
當(dāng)然一開(kāi)始推行,項(xiàng)目難度非常大,基本上所有的產(chǎn)品都不接受,研發(fā)也不接受,因?yàn)楹孟裉缓锨槔砹?,推?dòng)起來(lái)非常痛苦。
但是后來(lái)隨著我們不斷的推動(dòng),有的業(yè)務(wù)逐漸開(kāi)始試用并感受到了好處,他們收到的 DLP 告警非常的準(zhǔn),告警的數(shù)量也很少。
以前一天要收一千條,現(xiàn)在可能一天一條兩條,多了也就十條,這是很明顯的差異。數(shù)量少了反而大家愿意去處理告警了,故障反而少了。
怎么去閾值?很簡(jiǎn)單,我們?cè)诔晒β噬鲜褂昧私y(tǒng)計(jì)學(xué)的方式,設(shè)一個(gè)成功率的滑動(dòng)窗口,利用環(huán)比同比數(shù)據(jù)通過(guò) 3Sigma 算法計(jì)算出一個(gè)動(dòng)態(tài)率值區(qū)間,只要超出這個(gè)區(qū)間就認(rèn)為 DLP 出現(xiàn)了問(wèn)題。
這不算是一個(gè)很難的技術(shù)但實(shí)踐效果卻非常好,作為最早嘗試將“去閾值”概念用于生產(chǎn)環(huán)境,我覺(jué)得一定要跟大家分享 DLP 的實(shí)踐。
目前正在遇到告警泛濫的企業(yè)可以考慮借鑒嘗試一下,至少在我們團(tuán)隊(duì)實(shí)實(shí)在在落地了,我們二十多萬(wàn)的服務(wù)器都已經(jīng)上線(xiàn)了,也經(jīng)過(guò)了兩年多的驗(yàn)證。
舉個(gè)例子,這是我們 DLP 告警的效果:
一旦告警出來(lái),它會(huì)把這個(gè)告警發(fā)生的影響時(shí)間區(qū)間畫(huà)出來(lái),并繪制出和過(guò)去的同比變化。
同時(shí)通過(guò)對(duì)多種維度進(jìn)行聚類(lèi),會(huì)把是否有主調(diào) IP、被調(diào) IP、返回碼匯聚等情況分析出來(lái),也會(huì)把是否有版本發(fā)布、網(wǎng)絡(luò)變更等事件關(guān)聯(lián)起來(lái)。
由于 DLP 告警本身很準(zhǔn),再加上告警出來(lái)后用戶(hù)可以得到這么多的輔助信息,用戶(hù)自然會(huì)發(fā)現(xiàn) DLP 非常有幫助。
這個(gè)圖的最下方是訪(fǎng)問(wèn)關(guān)系的記錄,也是下面要重點(diǎn)跟大家分享的。
# ROOT:根源智能分析法
ROOT 是今天想重點(diǎn)跟大家分享的內(nèi)容,這個(gè)項(xiàng)目是在 2010 年做的,當(dāng)時(shí)我們也不知道有什么根源分析的概念,只是要做一個(gè)嘗試去解決運(yùn)維分析故障時(shí)特別困難的問(wèn)題。
于是 2010 年啟動(dòng)代號(hào) ROOT 的項(xiàng)目,大約在 2012 年做出來(lái),2014 年才在行業(yè)大會(huì)上分享出來(lái)。
今天,我再把這個(gè)項(xiàng)目拿出來(lái)跟大家一起探討,是因?yàn)槲覀冇?AI 的方式將這個(gè)理念重新地 AI 化了,非常有意思,我個(gè)人認(rèn)為對(duì)于 AI 在我們傳統(tǒng)數(shù)據(jù)上落地非常有借鑒價(jià)值。
首先,什么是 ROOT?我們現(xiàn)在把它叫做根源定位(有別于根因分析)。
我總結(jié)了一句話(huà)來(lái)描述它:基于業(yè)務(wù)架構(gòu),結(jié)合數(shù)據(jù)訪(fǎng)問(wèn)關(guān)系流,通過(guò)時(shí)間相關(guān)性、面積權(quán)重等算法,將監(jiān)控告警進(jìn)行篩選分類(lèi),發(fā)掘有業(yè)務(wù)價(jià)值的告警,并直接分析給出告警根源。
怎么做的呢?我們?cè)?2010 年的時(shí)候,正好在嘗試做“自然運(yùn)維”(和現(xiàn)在的 DevOps 理念很像)。
研發(fā)和運(yùn)維要分工、做配合,基于特定的一些流程去完成我們的日常工作和運(yùn)維管理,包括現(xiàn)在所謂的交互鏈,我們當(dāng)時(shí)沒(méi)有把它包裝成 DevOps 這么高大上的名詞。
當(dāng)時(shí)的理念是基于業(yè)務(wù)架構(gòu)去運(yùn)維。騰訊的業(yè)務(wù)挺復(fù)雜的,人員變動(dòng)也很大,運(yùn)維不熟悉業(yè)務(wù)架構(gòu)往往是做好運(yùn)維工作的障礙。
于是我們和研發(fā)一起制定了關(guān)于業(yè)務(wù)架構(gòu)的規(guī)范,研發(fā)團(tuán)隊(duì)會(huì)在我們規(guī)范出來(lái)的業(yè)務(wù)架構(gòu)中去完成增加或減少、變更服務(wù)等的一系列任務(wù),我們運(yùn)維也會(huì)做一些系統(tǒng)把這個(gè)業(yè)務(wù)架構(gòu)圖展現(xiàn)出來(lái),并管理起來(lái)。
下圖這是我們產(chǎn)品的頁(yè)面。在這個(gè)頁(yè)面上,運(yùn)維和研發(fā)都能看到當(dāng)前的業(yè)務(wù)架構(gòu)是怎樣的,這就是我們的初衷:
也是基于這個(gè)背景,大約 2010 年的時(shí)候,我們將各個(gè)業(yè)務(wù)的架構(gòu)管理起來(lái)。上圖是一個(gè)廣告業(yè)務(wù)架構(gòu)的一部分。
有了這個(gè)產(chǎn)品后,我們突發(fā)奇想:如果其中有一個(gè)節(jié)點(diǎn)在產(chǎn)生告警的時(shí)候,問(wèn)題是否不一定是它自己的,而是后面某個(gè)節(jié)點(diǎn)出的問(wèn)題?
這是非常合理的考慮。舉個(gè)例子,如果我的用戶(hù)說(shuō)我的服務(wù)訪(fǎng)問(wèn)很慢,有可能不是接入層的問(wèn)題,而是后端的邏輯服務(wù)比較慢,死機(jī)、宕機(jī)或者是網(wǎng)絡(luò)問(wèn)題……
我們不能把問(wèn)題定位只限制在接入層,那怎么把整條的業(yè)務(wù)撮到一起去呢?能不能有種技術(shù)把它降維到網(wǎng)狀呢?
我們通過(guò)把高維度的網(wǎng)狀訪(fǎng)問(wèn)關(guān)系數(shù)據(jù)降維到鏈狀,主要通過(guò)窮舉的方式把訪(fǎng)問(wèn)關(guān)系鏈從圖中拎出來(lái),順利完成降維。
降維的方式挺簡(jiǎn)單的,從訪(fǎng)問(wèn)開(kāi)始,把整個(gè)訪(fǎng)問(wèn)數(shù)據(jù)列舉出來(lái),就能得到降維之后的二維數(shù)據(jù)。
剛才大家看到的復(fù)雜網(wǎng)絡(luò)圖其實(shí)是這樣的一條一條的鏈路,沒(méi)有任何邏輯的,然后再把我們前面有提到的 20 多套監(jiān)控系統(tǒng)發(fā)出來(lái)的告警數(shù)據(jù),都在這條鏈路上進(jìn)行各種疊加。
得到如下的效果:
從運(yùn)維經(jīng)驗(yàn)上看,相隔近的連續(xù)告警,后面告警是引起前端告警原因的概率更大。
我們現(xiàn)在要做的是用數(shù)學(xué)的方式把它描繪出來(lái),這就是我們整個(gè)系統(tǒng)的主要思想和實(shí)現(xiàn)方式。
產(chǎn)品上我們把它做成如下圖所示,把權(quán)重***的告警鏈路按時(shí)間維度透視出來(lái)。
圖中縱軸是這條訪(fǎng)問(wèn)鏈路的模塊,橫軸是時(shí)間軸,粉紅色的點(diǎn)是我們的告警疊加在時(shí)間鏈上后的效果。
我就可以看到在同一個(gè)時(shí)間片內(nèi)有告警,這些告警雖然屬于不同的模塊,相關(guān)性也不是很大。
但下面兩個(gè)模塊每天都在告警,這個(gè)情況很正常,是閾值配錯(cuò)了,這種情況也非常常見(jiàn),我們沒(méi)有辦法一個(gè)個(gè)去解決。
這一種持續(xù)告警在我們的系統(tǒng)中大量存在,對(duì)我們的告警分析是很大的一種干擾,我們希望把這個(gè)過(guò)濾掉,而聚焦在某一個(gè)時(shí)間片范圍內(nèi)相關(guān)性非常大的告警分析上。
時(shí)間片與時(shí)間的相關(guān)性是很重要的,我們認(rèn)為告警本身有一個(gè)所謂的時(shí)效性,所以有時(shí)間窗,比如告警有快慢,還有告警延遲的問(wèn)題。
連續(xù)性的告警絕大多數(shù)都是干擾因素,基于這樣的想法,我們把告警做了分類(lèi),分成了原因告警和現(xiàn)象告警。
現(xiàn)象告警往往只是一個(gè)表象,好像服務(wù)出了問(wèn)題、前端服務(wù)訪(fǎng)問(wèn)慢,但可能只是一個(gè)現(xiàn)象,原因不在自己身上而是在后端的某一個(gè)服務(wù)器上。源在別的地方,我們要找到根源,這是根源分析的思路。
我們把告警分為持續(xù)告警、波動(dòng)告警和關(guān)聯(lián)告警。這是 2014 年的數(shù)據(jù),我們驚奇地發(fā)現(xiàn)在系統(tǒng)中有 65% 是持續(xù)的,代表了 65% 的告警數(shù)據(jù)極大可能是干擾,因?yàn)椴幻鞯脑蚨刻煸诟婢?/p>
有 24% 的告警是波動(dòng)告警,這種告警指標(biāo)一會(huì)兒上去,沒(méi)一會(huì)兒又下去了,可能是某個(gè)服務(wù)中斷后恢復(fù)了,或者有某個(gè)產(chǎn)品進(jìn)行版本發(fā)布,都有可能,但是最終是恢復(fù)了。
運(yùn)維也不需要去查,不需要關(guān)注。真正的我們系統(tǒng)能關(guān)聯(lián)出來(lái)的告警只有 9.2%,也就是不到 10% 的才是真正有問(wèn)題。
我們應(yīng)該把運(yùn)維的精力放到這里,絕大多數(shù)的告警運(yùn)維都不需要花時(shí)間去查的,這是我們的數(shù)據(jù)分析。那么前面的數(shù)據(jù)算法,怎么做這個(gè)分析呢?
2012 年左右,運(yùn)維根據(jù)經(jīng)驗(yàn)所設(shè)計(jì)的“權(quán)重與面積算法”,原理就是在同樣長(zhǎng)度的鏈路上通過(guò)疊加上去的告警的排列不同,可以把它優(yōu)先的權(quán)重算出來(lái)。
從運(yùn)維的經(jīng)驗(yàn)上來(lái)判斷,告警間隔越緊密,這些告警的相關(guān)性就越高;告警的間隔越稀疏,它的關(guān)聯(lián)性就越低。
所以這三條鏈路雖然同樣是七個(gè)節(jié)點(diǎn)的鏈路,同樣每個(gè)鏈路上都疊加了四種不同類(lèi)型的告警,我們最終還是能算出來(lái),***個(gè)權(quán)重是***的,這個(gè)算法挺簡(jiǎn)單的,后面有源代碼的公開(kāi)。
這個(gè)算法也開(kāi)創(chuàng)了咱們?cè)谧龈捶治鰰r(shí)通過(guò)數(shù)據(jù)做運(yùn)維分析的方式,用過(guò)一段時(shí)間,準(zhǔn)確率不是很高,大概 60% 左右。
它的想法和技術(shù)都是很老的,這是 ROOT 在 2012 到 2014 年的時(shí)候我們做的比較有意思的嘗試。
跟進(jìn)時(shí)代,踐行 AIOps
我們這兩年對(duì) AI 的思考,做了很多在運(yùn)維監(jiān)控的 AI 嘗試,發(fā)現(xiàn)其實(shí)根源分析這塊是很重要的一部分。所以,下面也是我今天分享的重點(diǎn)。
我們踐行 AI 的一些嘗試,整個(gè)內(nèi)容有 5 個(gè)階段:
文本 + NLP
***個(gè)階段是文本 + NLP 的處理問(wèn)題,比較有特點(diǎn)的產(chǎn)品叫輿情監(jiān)控,還有智能對(duì)話(huà)機(jī)器人這部分。
預(yù)測(cè) / 判問(wèn)題
第二個(gè)階段是預(yù)測(cè)和預(yù)判問(wèn)題。預(yù)測(cè)是大家比較喜歡的,很多團(tuán)隊(duì)都通過(guò) AI 的方式做預(yù)測(cè)。
比如基于在線(xiàn)預(yù)算量、預(yù)測(cè)未來(lái)等等相關(guān)的比較多,基本上是基于時(shí)間序列。
信息收斂問(wèn)題
第三個(gè)階段是信息收斂的階段,前面提到這么多,有很多的方式去收斂。多維的系統(tǒng)就非常的好用,我覺(jué)得也是未來(lái)的趨勢(shì)。雖然不是我們重點(diǎn)分析的,但是可以去借鑒。
根因分析
第四個(gè)是根因分析問(wèn)題,其實(shí)并不重要,重要的是下一個(gè)階段。
根源分析
***是根源分析的問(wèn)題,下面詳細(xì)介紹一下根源分析方面在 AI 上的嘗試。
我把前面 ROOT 的問(wèn)題給大家引出來(lái),它的準(zhǔn)確率只有 60%,同時(shí)還有很多別的問(wèn)題。
為什么只有 60% 呢?原因在于:
- 有的場(chǎng)景是解決不了的。比如各種 GW 等 IP 接口大量匯聚的場(chǎng)景,這在騰訊是很普遍的。
而這種高匯聚的場(chǎng)景成了 ROOT 系統(tǒng)構(gòu)建關(guān)系鏈路中的關(guān)鍵點(diǎn),很多的流量都會(huì)經(jīng)過(guò)它。這個(gè)節(jié)點(diǎn)結(jié)果成了 ROOT 分析的干擾因素,用 AI 的說(shuō)法是它的熵太大了。
- 關(guān)系鏈不是完整的。前面提到業(yè)務(wù)拓?fù)鋱D關(guān)系能繪出來(lái)的前提,首先是我們基于業(yè)務(wù)架構(gòu)去做運(yùn)維管理,然后通過(guò)模塊之間的調(diào)用關(guān)系來(lái)構(gòu)建鏈路。
這些數(shù)據(jù)都是基于 CMDB 來(lái)匯聚關(guān)系,也就是關(guān)系是限定在業(yè)務(wù)邏輯范圍內(nèi),空間就是空間,音樂(lè)就是音樂(lè),不會(huì)超出范圍。
所以我們現(xiàn)在怎么去解決這些問(wèn)題呢?
***,針對(duì)于 IP 匯聚的問(wèn)題,就是我們把所有匯聚在 DBSCAN 上面進(jìn)行分類(lèi),如下圖:
通過(guò)一些特征對(duì)數(shù)據(jù)進(jìn)行分類(lèi),把我們關(guān)鍵的數(shù)據(jù)拆開(kāi),拆成多個(gè)服務(wù)頁(yè),參與數(shù)據(jù)的重新運(yùn)算。
原來(lái)只是一個(gè)點(diǎn),現(xiàn)在變成了很多很多的服務(wù)節(jié)點(diǎn),解決了以前解決不了的一些問(wèn)題。
第二個(gè),關(guān)系劃分。前面有提到我們服務(wù)有很強(qiáng)的業(yè)務(wù)邏輯在里面,但實(shí)際的關(guān)系不是這樣的,我們嘗試用社交領(lǐng)域的市場(chǎng),通過(guò)實(shí)際的訪(fǎng)問(wèn)關(guān)系來(lái)劃分。
這里可以看到,左邊的圖是所有的訪(fǎng)問(wèn)關(guān)系,右邊的圖是經(jīng)過(guò)劃分之后形成的訪(fǎng)問(wèn)關(guān)系。
以前我們系統(tǒng)是直接割斷,而現(xiàn)在,我們的系統(tǒng)因?yàn)閷?shí)際上有很強(qiáng)的關(guān)系,就像我們的 QQ 關(guān)系鏈一樣,會(huì)有各種的交互,哪怕可能不屬于同一類(lèi)人,但是之間的關(guān)系是非常強(qiáng)的,解決了鏈路被切斷的問(wèn)題。
第三個(gè),權(quán)重。剛才前面提到的面積權(quán)重方案是經(jīng)驗(yàn)問(wèn)題,我們通過(guò)把鏈路告警數(shù)據(jù),歷史上所有的告警數(shù)據(jù)拿出來(lái)做平面計(jì)算,發(fā)現(xiàn) A 和 B、B 和 C 之間的真實(shí)告警相關(guān)性上的數(shù)據(jù)概念。
這就是非常符合邏輯了,AB 同時(shí)告警的情況下,歷史上出現(xiàn)的概率非常高,當(dāng)前又出現(xiàn)這種情況,它的相關(guān)性很高,這個(gè)業(yè)務(wù)的概念是很合適的,這是相當(dāng)于把傳統(tǒng)的數(shù)據(jù)用運(yùn)維的理念通過(guò) AI 的方式重新定義。
我們新系統(tǒng)中的準(zhǔn)確率會(huì)高很多,發(fā)現(xiàn)通過(guò) AI 的引進(jìn)之后,方法還是這個(gè)方法,原理還是這樣的原理,但是它的價(jià)值是大幅度提升的。
聶鑫,騰訊運(yùn)維總監(jiān)。從開(kāi)發(fā)到運(yùn)維,伴隨騰訊社交網(wǎng)絡(luò)運(yùn)營(yíng)部成長(zhǎng)的十年,負(fù)責(zé)過(guò)騰訊社交產(chǎn)品所有業(yè)務(wù)運(yùn)維工作,目前主要負(fù)責(zé)業(yè)務(wù)運(yùn)維、織云產(chǎn)品、AIOps 體系等團(tuán)隊(duì)管理工作。經(jīng)歷多個(gè)業(yè)務(wù)產(chǎn)品的誕生到蓬勃,伴隨著運(yùn)維團(tuán)隊(duì)的成長(zhǎng)和成熟,見(jiàn)證著騰訊一代代運(yùn)營(yíng)技術(shù)的創(chuàng)新和發(fā)展。