本文根據(jù)孫燕老師在《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》現(xiàn)場(chǎng)演講內(nèi)容整理而成。
講師介紹
孫燕,微博廣告基礎(chǔ)運(yùn)維負(fù)責(zé)人,2009年入職新浪,任職10年間參與博客、圖片、視頻、微博平臺(tái)監(jiān)控、微博廣告多個(gè)產(chǎn)品運(yùn)維,致力于運(yùn)維自動(dòng)化、產(chǎn)品架構(gòu)優(yōu)化、服務(wù)治理、智能監(jiān)控及以監(jiān)控為依托的服務(wù)容災(zāi)建設(shè)。
在上文提到的自動(dòng)擴(kuò)縮容體系當(dāng)中,提到一個(gè)叫Oops的系統(tǒng),這是微博廣告運(yùn)維人員建立的智能監(jiān)控系統(tǒng)。接下來給大家簡(jiǎn)單介紹一下。
1、監(jiān)控面臨的挑戰(zhàn)
說到監(jiān)控,不得不說監(jiān)控遇到的很多問題。
市面上有很多開源的監(jiān)控軟件,比如說常見的Zabbix,在監(jiān)控?cái)?shù)據(jù)量少的情況下,不管是基礎(chǔ)監(jiān)控還是業(yè)務(wù)監(jiān)控,這些開源軟件都是可以直接滿足需求的。
但是隨著監(jiān)控指標(biāo)的增多,加上我們的指標(biāo)是實(shí)時(shí)性變化的,數(shù)據(jù)要求又比較高,這些原生軟件不再滿足我們需求了。另外,微博廣告的業(yè)務(wù)數(shù)據(jù)有特殊性,一般運(yùn)維關(guān)注的數(shù)據(jù)是系統(tǒng)的性能,系統(tǒng)的性能數(shù)據(jù)有時(shí)候來源于業(yè)務(wù)日志。
但是微博廣告的業(yè)務(wù)日志是收入,很多業(yè)務(wù)日志是一條都不能丟的,比如說結(jié)算的曝光每一條曝光對(duì)于廣告來說,都是真金白銀,對(duì)精準(zhǔn)性要求比較高,單獨(dú)通過性能監(jiān)控的日志收集方法是不能滿足需求的,這也是我們面臨的挑戰(zhàn)。
另外,監(jiān)控系統(tǒng)一般都會(huì)具備告警功能,有告警就會(huì)有告警問題,接下來會(huì)詳細(xì)地介紹告警問題。還面臨問題定位方面的挑戰(zhàn),在監(jiān)控越來越完善的基礎(chǔ)上,很多開發(fā)的操作情況發(fā)生了變化,一旦發(fā)生問題,第一個(gè)反應(yīng)并不是上服務(wù)器看一下系統(tǒng)怎么了,而是翻監(jiān)控,看看哪些監(jiān)控指標(biāo)發(fā)生了問題,所以監(jiān)控系統(tǒng)會(huì)越來越多地面向于問題定位這個(gè)方向。
2、Oops整體架構(gòu)面臨的挑戰(zhàn)
作為監(jiān)控系統(tǒng),Oops在架構(gòu)上并沒有什么出奇的地方,所有的監(jiān)控?zé)o非就是四個(gè)階段:從客戶端進(jìn)行數(shù)據(jù)采集、數(shù)據(jù)的清洗和計(jì)算、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)展示。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
3、監(jiān)控?cái)?shù)據(jù)流向特點(diǎn)
所有的監(jiān)控系統(tǒng)都逃不開這四個(gè)階段,只是根據(jù)業(yè)務(wù)的不同進(jìn)行了定制化的工作。針對(duì)廣告業(yè)務(wù)的監(jiān)控流向,我們把數(shù)據(jù)分成兩類,有一部分精密數(shù)據(jù)的計(jì)算,我們采取的是離線分析的方式,通過采集軟件將所有的日志采集到Kafka,通過計(jì)算的工具進(jìn)行拆洗、計(jì)算,計(jì)算之后落存儲(chǔ),還有另外一個(gè)團(tuán)隊(duì)開發(fā)的針對(duì)于這一部分?jǐn)?shù)據(jù)的頁面展示化,還有一個(gè)系統(tǒng)叫hubble,針對(duì)精細(xì)數(shù)據(jù)的展現(xiàn),實(shí)現(xiàn)個(gè)性化定制的展現(xiàn)。
另外一部分是運(yùn)維比較關(guān)心的數(shù)據(jù),今天來了多少流量?流量有多少是正常的?有多少是異常的?平均耗時(shí)是多少?針對(duì)這一部分,我們采取了實(shí)時(shí)數(shù)據(jù)計(jì)算的方法。
在數(shù)據(jù)采集階段發(fā)生了變化,我們并不采集全量日志,而是在客戶端做了預(yù)處理,進(jìn)行分類計(jì)算。比如說監(jiān)控?cái)?shù)據(jù),就按監(jiān)控?cái)?shù)據(jù)的方法計(jì)算;告警數(shù)據(jù),就按告警數(shù)據(jù)的計(jì)算。而且按照用戶讀取的需求進(jìn)行分類存儲(chǔ),保證了高并發(fā)數(shù)據(jù)的實(shí)時(shí)性。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
4、海量指標(biāo)監(jiān)控系統(tǒng)流程
接下來詳細(xì)介紹實(shí)時(shí)數(shù)據(jù)計(jì)算。首先從數(shù)據(jù)采集上講,上文提到我們不采取全量的采集方式,而是通過Agent對(duì)數(shù)據(jù)進(jìn)行處理,在數(shù)據(jù)采集階段,在數(shù)據(jù)產(chǎn)生的服務(wù)器上,針對(duì)不同的需求按不同的時(shí)間進(jìn)行分類聚合,最終向后推送的數(shù)據(jù)是key-value、計(jì)算方法這種模式,推送給proxy。proxy拿到已經(jīng)被打包的數(shù)據(jù)進(jìn)行拆包,然后送給不同的計(jì)算結(jié)點(diǎn),再按照key進(jìn)行計(jì)算,打時(shí)間戳。
這個(gè)數(shù)據(jù)并不精準(zhǔn),但我們可以接受部分損失,只需要保證數(shù)據(jù)的趨勢(shì)是正確的。另外,關(guān)于分類計(jì)算,不同的需求推送給不同的計(jì)算節(jié)點(diǎn)。存儲(chǔ)也進(jìn)行了分類,實(shí)時(shí)性要求比較強(qiáng)的話會(huì)直接放到內(nèi)存,以最精細(xì)粒度進(jìn)行存儲(chǔ)。前三個(gè)小時(shí)的數(shù)據(jù)是按秒存的,按天計(jì)算的數(shù)據(jù)是按10秒、30秒存的,一些單機(jī)數(shù)據(jù)是按分鐘存的。
另外一些歷史性的數(shù)據(jù)需要出報(bào)表的,比如說要看前一周的數(shù)據(jù),前一個(gè)月的數(shù)據(jù),按照大數(shù)據(jù)的方式存到OpenTSDB當(dāng)中。存儲(chǔ)的數(shù)據(jù)提供一個(gè)API,通過API我們進(jìn)行了分類計(jì)算、分類存儲(chǔ),這種分類的需求來源于用戶,需要看用戶有什么要求,要什么樣的數(shù)據(jù)。
比如,Dashboard的展示數(shù)據(jù)會(huì)直接被放到內(nèi)存里。另外,上文提到的在線擴(kuò)縮容數(shù)據(jù),會(huì)相應(yīng)獲取數(shù)據(jù)給用戶,其他相關(guān)的獲取需求API也會(huì)進(jìn)行分類獲取。
接下來我們計(jì)算過的數(shù)據(jù)還有一部分會(huì)存儲(chǔ)到Redis通過WatchD作為告警中心的數(shù)據(jù),因?yàn)楦婢瘮?shù)據(jù)一般都只要求當(dāng)前數(shù)據(jù),不會(huì)有人需要查看上個(gè)月這臺(tái)機(jī)器的負(fù)載有沒有告警。
所以Alert節(jié)點(diǎn)計(jì)算之后的數(shù)據(jù)直接存在Redis,Redis把這個(gè)數(shù)據(jù)拿出來之后經(jīng)過告警中心根據(jù)告警規(guī)則進(jìn)行清洗,通過各種方式推送到需求方。同時(shí)有一個(gè)相對(duì)個(gè)性化的展示叫九宮格。我們的九宮格實(shí)際上是一個(gè)結(jié)合報(bào)警功能的監(jiān)控,它是一個(gè)頁面,但具備了告警功能。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
接下來看一下監(jiān)控圖,下面三張圖是范冰冰宣布分手拿到的流量,我們的反映是非常靈敏的,平均耗時(shí)也漲上來了。
第三張圖是拿到這些數(shù)據(jù)之后,自動(dòng)平臺(tái)顯示應(yīng)該擴(kuò)容了。藍(lán)色跟綠色的流量線已經(jīng)降下來了,大部分量調(diào)到云服務(wù)器上。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
下圖是我們的九宮格,因?yàn)闀r(shí)效性比較強(qiáng),正常來說是以產(chǎn)品為頁面,以業(yè)務(wù)線為格子,每個(gè)格子記錄的是單機(jī)的詳細(xì)信息。如果在這一組服務(wù)器當(dāng)中單機(jī)故障數(shù)超過一定的比例,這個(gè)格子會(huì)變顏色。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
所以在正常的運(yùn)維工位上都會(huì)有這樣的大屏幕,運(yùn)維可以一目了然發(fā)現(xiàn)自己所有負(fù)責(zé)的業(yè)務(wù)線情況,而不是讓一臺(tái)臺(tái)機(jī)器在這里展現(xiàn),這樣就沒有辦法看到業(yè)務(wù)線情況了。九宮格可以讓運(yùn)維更加直觀地看到當(dāng)前的告警情況。
5、告警
告警有很多的問題,我們遇到的問題可以分為以下四個(gè)方面:
1)告警數(shù)量巨大
運(yùn)維人員需要關(guān)注所有部分,從系統(tǒng)到服務(wù)、接口等等,維度很多,一旦有問題,各種策略都會(huì)觸發(fā)報(bào)警,報(bào)警數(shù)量多到一定程度,基本上等于沒有報(bào)警。
2)重復(fù)告警率高
告警策略一般會(huì)周期性執(zhí)行,一直到告警條件不被滿足,如果服務(wù)一直不恢復(fù),就會(huì)重復(fù)報(bào)下去,另外,同一個(gè)故障也可能引發(fā)不同層次的告警。
比如,我們有一個(gè)業(yè)務(wù)線叫超粉,會(huì)有360臺(tái)服務(wù)器,流量高峰時(shí)360臺(tái)服務(wù)器會(huì)同時(shí)發(fā)送告警,這種告警的重復(fù)率很高。
3)告警有效性不足
很多時(shí)候,網(wǎng)絡(luò)抖動(dòng)、擁堵、負(fù)載暫時(shí)過高或者變更等原因,會(huì)觸發(fā)報(bào)警,但這類報(bào)警要么不再重現(xiàn),要么可以自愈。
比如一個(gè)硬盤在接近80%的時(shí)候開始告警了,你讓它告嗎?好像得告,但似乎不告也可以。
4)告警模式粗放
無論是否重要、優(yōu)先級(jí)如何,告警都通過郵件、短信、AppPUSH發(fā)送到接收人,就像暴風(fēng)一樣襲擊著接收人,接收人沒有辦法從中獲取到有效的信息,經(jīng)常會(huì)讓真正重要的告警淹沒在一大堆普通告警中。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
針對(duì)這些問題,我們采取了以下措施:
1)抖動(dòng)收斂
對(duì)于這種大規(guī)模服務(wù)器的維護(hù),抖動(dòng)是非常常見的現(xiàn)象。網(wǎng)絡(luò)抖一抖,整個(gè)服務(wù)單元就會(huì)向你告警。
針對(duì)這種抖動(dòng),我們?cè)黾恿艘恍┎呗裕秳?dòng)的時(shí)候會(huì)前后比較,監(jiān)測(cè)重復(fù)性,看看是不是具備告警的意義,通過增加告警策略這種方式來進(jìn)行收斂。比如說流量突增的時(shí)候,需要查看是不是同單元都出現(xiàn)了這個(gè)情況。
2)告警的分類和分級(jí)
詳細(xì)定義告警級(jí)別,發(fā)送優(yōu)先級(jí)、升級(jí)策略等,可有效減少粗放模式下告警接收量。比如,一些低優(yōu)先等級(jí)的告警會(huì)讓它告,處理的級(jí)別會(huì)低一點(diǎn)。
3)同類合并
同一個(gè)原因可能會(huì)觸發(fā)一個(gè)服務(wù)池里面的所有實(shí)例都報(bào)警,比如同時(shí)無法連接數(shù)據(jù)庫(kù),其實(shí)只需要報(bào)一次即可。
4)變更忽略
我們的好多變更都是在Kunkka平臺(tái)上操作的,開發(fā)有時(shí)候會(huì)選中一個(gè)通知,現(xiàn)在是變更,告警請(qǐng)忽略。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
以上措施能解決告警問題中80%的問題,現(xiàn)在大家都在朝著更高級(jí)的方向發(fā)展,我們也簡(jiǎn)單做了一些探索。在原有告警數(shù)據(jù)流情況下引入了工具SkyLine,這個(gè)工具包含了多種算法,在異常檢測(cè)環(huán)節(jié)中,能夠通過它內(nèi)置的算法將我們傳入的數(shù)據(jù)自動(dòng)去抖動(dòng),提供平滑的數(shù)據(jù),等你再拿到這個(gè)數(shù)據(jù)時(shí)就不需要再檢測(cè)是不是告警。
這個(gè)工具避免了人工操作,通過Skyline將數(shù)據(jù)進(jìn)行平滑,提供一份準(zhǔn)確的數(shù)據(jù),我們只需要通過這份數(shù)據(jù),進(jìn)行規(guī)則判斷,決定是否需要告警就好了,減少了對(duì)數(shù)據(jù)準(zhǔn)確性判斷的復(fù)雜過程。接著是根因分析部分,隨著監(jiān)控的覆蓋面越來越廣,監(jiān)控精確性越來越高。
等故障出現(xiàn)的時(shí)候,開發(fā)人員就會(huì)去翻監(jiān)控圖,去查看大概是哪些原因?qū)е铝斯收?。隨著Dashboard越來越多,即便是經(jīng)驗(yàn)非常豐富的工作人員也很難快速地定位到原因會(huì)出現(xiàn)哪個(gè)方面、該去去看哪張個(gè)監(jiān)控圖。
出現(xiàn)流量突增的情況時(shí),Skyline會(huì)通過內(nèi)部的算法Luminosity尋找相似的情況,查看相同的時(shí)間內(nèi)是否有其他地方出現(xiàn)流量異常,并將根源問題展示在TOPN上,這樣就能夠快速查看在故障出現(xiàn)的前后哪些業(yè)務(wù)也出現(xiàn)了流量變化,方便對(duì)故障原因進(jìn)行分析和定位。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
還有一項(xiàng)非常重要的工作——服務(wù)治理,這里只進(jìn)行簡(jiǎn)單的介紹。
1、為什么需要服務(wù)治理
微博廣告現(xiàn)階段所出現(xiàn)的問題主要有:架構(gòu)越來越復(fù)雜,上文提到微博廣告的服務(wù)器已經(jīng)達(dá)到3000臺(tái),所以在這種服務(wù)器數(shù)量情況下,架構(gòu)會(huì)越來越復(fù)雜,穩(wěn)定性要求也變得非常高;開發(fā)的多語言環(huán)境對(duì)上線發(fā)布也造成了挑戰(zhàn);資源使用是否合理性,對(duì)運(yùn)維來說也是一個(gè)挑戰(zhàn)。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
2、低成本和高可用的平衡
針對(duì)這些問題,我們進(jìn)行了低成本和高可用的平衡,爭(zhēng)取用最小的服務(wù)器達(dá)到最穩(wěn)定的架構(gòu)。在保證服務(wù)穩(wěn)定的情況下,將流量進(jìn)行均分,分到最小服務(wù)單元三機(jī)房部署為基本規(guī)則,保障在一個(gè)機(jī)房掛掉的情況下,另外2/3的服務(wù)器能承載全部的流量。
關(guān)于上下游之間調(diào)用的平衡,盡量減少跨運(yùn)營(yíng)商的調(diào)用,微博廣告每一毫秒的消耗都會(huì)影響到收入。我們的請(qǐng)求時(shí)間是1毫秒、1毫秒地優(yōu)化下來的,這些損耗產(chǎn)生在網(wǎng)絡(luò)和服務(wù)器上,很難通過人力彌補(bǔ),因此在這方面我們也非常謹(jǐn)慎。
另外,小功能會(huì)抽象出功能的共同點(diǎn),將這些功能服務(wù)化,服務(wù)則按單元化部署。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
3、服務(wù)發(fā)現(xiàn)及負(fù)載均衡
在服務(wù)治理過程中,我們會(huì)根據(jù)服務(wù)的引入服務(wù)自動(dòng)發(fā)現(xiàn),盡量減少服務(wù)變更環(huán)節(jié)的人工干預(yù),提高安全性和實(shí)時(shí)性,自建負(fù)載均衡會(huì)有標(biāo)準(zhǔn)的數(shù)據(jù)輸入和數(shù)據(jù)發(fā)布的過程,可以大大提升后期的可擴(kuò)展性和可用性。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
4、服務(wù)治理成績(jī)
經(jīng)過近半年的服務(wù)治理,我們達(dá)到了這樣的成績(jī):
架構(gòu)更加強(qiáng)健,容災(zāi)能力提高;
系統(tǒng)、數(shù)據(jù)、配置標(biāo)準(zhǔn)化;
服務(wù)器的合理使用,成本控制。
圖片來源于:《2019DAMS中國(guó)數(shù)據(jù)智能管理峰會(huì)》PPT
其中,我覺得最重要的是系統(tǒng)、數(shù)據(jù)、配置標(biāo)準(zhǔn)化的過程。
今天好多分享的嘉賓也提到了AIops,這些上層的建設(shè)都是依賴于整個(gè)業(yè)務(wù)標(biāo)準(zhǔn)化的過程,中國(guó)有句古話,工欲善其事,必先利其器,我們所有的標(biāo)準(zhǔn)化過程就是為下一步人工智能打下堅(jiān)實(shí)的基礎(chǔ),希望我們的工作能夠以技術(shù)保證微博系統(tǒng)穩(wěn)定,助力微博廣告的收入。