揭秘百度微服務(wù)監(jiān)控:百度游戲服務(wù)監(jiān)控的演進(jìn)
時(shí)間:2021-08-19 15:48:49
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]導(dǎo)讀:臣聞防患于未然者易,除患于已然者難——明·馬文升《添風(fēng)憲以撫流民疏》作為一個(gè)程序員,是否有留意到每逢節(jié)假日在各大景區(qū)時(shí)有程序員打開電腦緊急處理線上問題?如果線上出現(xiàn)大量的報(bào)警,這時(shí)我們?cè)撊绾闻袛嗍亲陨矸?wù)問題還是依賴服務(wù)問題?午夜線上重大問題出現(xiàn),如何能夠喚醒相關(guān)人員快速響...

全文4583字,預(yù)計(jì)閱讀時(shí)間 9分鐘。
一、背景
隨著業(yè)務(wù)的快速發(fā)展,游戲服務(wù)端研發(fā)同學(xué)平均每人要維護(hù)2~3個(gè)微服務(wù),后續(xù)業(yè)務(wù)場景增多可能會(huì)引入更多微服務(wù),如何高效的獲悉整個(gè)微服務(wù)系統(tǒng)的運(yùn)行狀態(tài),業(yè)務(wù)異常時(shí)如何快速發(fā)現(xiàn)問題并解除故障,游戲服務(wù)端研發(fā)同學(xué)在監(jiān)控實(shí)踐上做了很多工作嘗試。
初期的監(jiān)控基于公司的Argus監(jiān)控(日志服務(wù)器相關(guān)監(jiān)控)、Monitor監(jiān)控平臺(tái)(業(yè)務(wù)監(jiān)控)、Sia監(jiān)控(可視化監(jiān)控)等覆蓋了一些基礎(chǔ)的監(jiān)控,但是由于缺乏體系、缺少和業(yè)務(wù)的結(jié)合,整體的效果并不理想,不少問題依然是客服和產(chǎn)品同學(xué)反饋,同時(shí)在跟進(jìn)問題過程中研發(fā)最為頭疼的一個(gè)點(diǎn)是在問題定位上往往要花很長的時(shí)間,這個(gè)對(duì)業(yè)務(wù)造成了一定的負(fù)面影響。在這種情況下我們系統(tǒng)化的梳理了面臨的問題并體系化的設(shè)計(jì)和優(yōu)化完善了監(jiān)控系統(tǒng),并著重針對(duì)問題定位做了和業(yè)務(wù)的深度結(jié)合,大大提升了問題的定位效率。
下面將就我們監(jiān)控系統(tǒng)的建設(shè)過程整體介紹,希望對(duì)讀者有所幫助。
二、微服務(wù)監(jiān)控初探
監(jiān)控建設(shè)初期我們主要是基于百度的監(jiān)控基礎(chǔ)設(shè)施添加各種監(jiān)控,但是由于缺乏體系效果并不理想。盡管初探階段我們監(jiān)控能力不夠完善且能力較弱,但這些分散的監(jiān)控措施也幫助研發(fā)同學(xué)發(fā)現(xiàn)了不少系統(tǒng)問題,為后續(xù)的體系化和多維度組合監(jiān)控打下了基礎(chǔ)。
2.1、日志和服務(wù)器監(jiān)控
利用百度Argus監(jiān)控平臺(tái),實(shí)現(xiàn)對(duì)機(jī)器狀態(tài)和業(yè)務(wù)日志的監(jiān)控,游戲微服務(wù)借助機(jī)器及日志監(jiān)控能力對(duì)線上服務(wù)進(jìn)行了監(jiān)控的覆蓋。我們初期對(duì)Argus監(jiān)控的應(yīng)用偏單維化,結(jié)合業(yè)務(wù)場景的深度不夠,諸如某個(gè)問題某些實(shí)例的監(jiān)測閾值及多維度報(bào)警能力初期并沒有考慮設(shè)計(jì),下面是對(duì)于百度Argus監(jiān)控的能力和流程介紹:? ? ? ? ? ? ? ? ? ? ? ??

? ? ? ? ? ??

日志相關(guān)監(jiān)控業(yè)界有大家熟悉的ELK Stack?方案(Elasticseach Logstash Kibana),使用Beats(可選)在每臺(tái)服務(wù)器上安裝后,作為日志客戶端收集器,然后通過Logstash進(jìn)行統(tǒng)一的日志收集、解析、過濾等處理,再將數(shù)據(jù)發(fā)送給Elasticsearch中進(jìn)行存儲(chǔ)分析,最后使用Kibana來進(jìn)行數(shù)據(jù)的展示。
2.2、服務(wù)輪詢監(jiān)控
利用百度monitor監(jiān)控平臺(tái),對(duì)于核心的接口采用定時(shí)輪詢檢測的機(jī)制來輔助監(jiān)控線上服務(wù)質(zhì)量,monitor平臺(tái)支持可視化配置,但是需要針對(duì)每個(gè)場景做定制化配置,隨著業(yè)務(wù)快速的迭代,這種監(jiān)控添加的效率和易用性已不能滿足業(yè)務(wù)的需求。? ? ? ? ? ? ? ??

2.3、服務(wù)可視化監(jiān)控
利用公司SIA智能監(jiān)控系統(tǒng),實(shí)現(xiàn)了服務(wù)流量、可用性、性能等指標(biāo)的監(jiān)控可視化,可以輔助業(yè)務(wù)研發(fā)可視化的觀察服務(wù)線上狀態(tài)并基于線上異常狀態(tài)報(bào)警。但是業(yè)務(wù)對(duì)于SIA智能監(jiān)控能力并沒有充分使用,導(dǎo)致可視化的輔助作用有限,智能能力沒有體現(xiàn)。

對(duì)于業(yè)界的可視化監(jiān)控工具,有諸如Kibana、Grafana等,相關(guān)的能力都已很完善,基本可以滿足業(yè)務(wù)的各種展現(xiàn)需求,大家可以參考了解。
三、微服務(wù)監(jiān)控演進(jìn)
如上面所闡述的,監(jiān)控初探階段的監(jiān)控措施雖然可以輔助研發(fā)發(fā)現(xiàn)和定位一些問題,但是還是存在諸多問題,主要是如下四個(gè)方面:
- 風(fēng)險(xiǎn)暴露滯后,大多報(bào)警發(fā)生時(shí)已造成影響;
- 監(jiān)控缺乏統(tǒng)一規(guī)劃,相關(guān)監(jiān)控項(xiàng)混亂且覆蓋極不完整;
- 監(jiān)控能力弱,無法提供有效異常信息;
- 報(bào)警混亂,研發(fā)被報(bào)警信息轟炸;
3.1、監(jiān)控系統(tǒng)化設(shè)計(jì)
目標(biāo):有效預(yù)防、及時(shí)發(fā)現(xiàn)、快速止損;落地:基于系統(tǒng)化的設(shè)計(jì)目標(biāo),做了如下的落地思路拆解。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

實(shí)現(xiàn)上從風(fēng)險(xiǎn)控制、智能監(jiān)控、智能報(bào)警、高效定位四個(gè)方面來設(shè)計(jì)微服務(wù)系統(tǒng)的監(jiān)控系統(tǒng)化工作,整體流程如下:

下面從風(fēng)險(xiǎn)控制、智能監(jiān)控、智能報(bào)警和高效定位四個(gè)方面逐一介紹。
3.1.1風(fēng)險(xiǎn)控制設(shè)計(jì)
線上問題發(fā)現(xiàn)的時(shí)機(jī)越早越好,由于研發(fā)同學(xué)水平客觀上存在差異,且通過cooder review無法有效規(guī)避上線問題的發(fā)生,所以游戲業(yè)務(wù)研發(fā)在自動(dòng)化case和發(fā)布環(huán)節(jié)做了較多的工作,以減少問題的發(fā)生。下面是研發(fā)做的主要風(fēng)險(xiǎn)控制項(xiàng),通過這些風(fēng)險(xiǎn)控制項(xiàng)的落地,目前已經(jīng)可以減少95%以上的上線中問題。? ? ? ? ? ??

3.1.2智能監(jiān)控設(shè)計(jì)
游戲業(yè)務(wù)初期的監(jiān)控,是分散的監(jiān)控添加:日志監(jiān)控使用argus,可視化的監(jiān)控實(shí)驗(yàn)SIA智能監(jiān)控平臺(tái),監(jiān)控的覆蓋和監(jiān)控系統(tǒng)之間的協(xié)同效果并沒有做全局考慮,這樣就暴露出一些問題,如:
問題1:按照監(jiān)控對(duì)象劃分的監(jiān)控,是在單一維度上做到有效覆蓋,但是系統(tǒng)全局波動(dòng)異常如何探測?問題2:
某個(gè)實(shí)例因?yàn)榫W(wǎng)絡(luò)或機(jī)器磁盤偶發(fā)故障導(dǎo)致pvlost突增,如何高效的獲得信息?問題3:系統(tǒng)可用性波動(dòng),是某個(gè)機(jī)房的問題,還是特定接口的問題,或是訪問下游的異常?
(1)智能異常檢測利用SIA系統(tǒng)的智能異常檢測算法,將耗時(shí)、流量、SLA指標(biāo)、收入等指標(biāo)納入到監(jiān)控體系,可以高效探測到系統(tǒng)的周期/非周期波動(dòng)異常,下面簡單介紹下主要的算法。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

通過將上述指標(biāo)同游戲業(yè)務(wù)的流量、耗時(shí)、收入等指標(biāo)的結(jié)合,在系統(tǒng)周期性或非周期性的波動(dòng)時(shí),即使是較為緩慢的下降也可以通過這些周期性檢測工具
有效檢測,大大提高異常檢測覆蓋度。
(2)全場景監(jiān)控覆蓋我們從4個(gè)象限覆蓋監(jiān)控,做到問題暴露無死角,同時(shí)針對(duì)諸如服務(wù)維度的監(jiān)控,還細(xì)化了多維度的篩選能力,力求從宏觀視角便于發(fā)現(xiàn)問題的同時(shí)也做到在微觀世界能夠輔助高效定位問題。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

這里我們著重提下數(shù)據(jù)監(jiān)控,我們針對(duì)游戲業(yè)務(wù)的特殊化場景,細(xì)化了需要監(jiān)控的數(shù)據(jù)以及場景,以確保監(jiān)控的完整覆蓋,下面是數(shù)據(jù)相關(guān)的一些監(jiān)控項(xiàng)。

(3)多維度監(jiān)控可視化輔助
多維度篩選能力:服務(wù)、接口、錯(cuò)誤碼、機(jī)房、機(jī)器實(shí)例;異常多維度可視化?:如pvlost基于接口、機(jī)器、機(jī)房的分布;錯(cuò)誤分布可視化:分接口、分錯(cuò)誤碼;? ? ? ? ? ? ?? ? ? ? ? ? ?

3.1.3智能報(bào)警設(shè)計(jì)
報(bào)警整體做了分級(jí)報(bào)警設(shè)計(jì),基于不同的場景設(shè)置不同的報(bào)警范圍和報(bào)警方式,減少了非重要報(bào)警的信息泛濫,同時(shí)在報(bào)警應(yīng)用上有如下整體設(shè)計(jì):
(1)智能合并過濾與自動(dòng)升級(jí)

智能過濾:減少報(bào)警信息的過渡泛濫,做一定的信息篩選;
智能報(bào)警合并:通過信息的合并,提升報(bào)警的信息簡介度,進(jìn)一步減少報(bào)警信息泛濫;報(bào)警自動(dòng)升級(jí):解決了困擾報(bào)警觸達(dá)不了值班人的問題,通過設(shè)置不同閾值擴(kuò)大到不同的范圍,并升級(jí)報(bào)警的形式從郵件->如流->短信->電話,且報(bào)警電話可以設(shè)置不斷的撥打直至有人響應(yīng)為止,解決了觸達(dá)的問題;
(2)樣式內(nèi)容自定義對(duì)于普通的實(shí)例報(bào)警或服務(wù)報(bào)警,相應(yīng)報(bào)警信息按照固定格式進(jìn)行輸出;核心邏輯部分添加基于富文本的報(bào)警內(nèi)容定義,完整的展示報(bào)警信息和報(bào)警問題,并提供問題的上下文語義,大大提高了信息量,為定位問題提供了充足有效的信息。

3.1.4高效定位能力支持

報(bào)警暴露信息高效:對(duì)于關(guān)鍵核心邏輯采用Trace鏈路 機(jī)器人方式來實(shí)現(xiàn)報(bào)警的高效觸達(dá)和自定義化輸出,實(shí)現(xiàn)信息的高效傳遞;報(bào)警信息確認(rèn)高效:部分注意考慮在異常信息報(bào)警后,為了確認(rèn)線上的相關(guān)完整日志數(shù)據(jù)和請(qǐng)求當(dāng)時(shí)數(shù)據(jù)情況的快速數(shù)據(jù)檢索,實(shí)時(shí)trace系統(tǒng)高效的解決了這個(gè)問題;
(1)核心邏輯機(jī)器人Trace鏈路信息報(bào)警暴露信息在核心邏輯已基本達(dá)到了分鐘級(jí)的問題報(bào)警 問題的自動(dòng)定位,研發(fā)基于報(bào)警信息即可以看到對(duì)應(yīng)的問題代碼行數(shù)及出錯(cuò)原因,大大提高了問題的定位效率。
當(dāng)然這個(gè)方式的報(bào)警目前還存在實(shí)現(xiàn)成本較高的問題,諸如在游戲業(yè)務(wù)的充值完成后給用戶發(fā)道具過程中如果存在一次,我們會(huì)暴露出請(qǐng)求參數(shù)、出錯(cuò)函數(shù)及出錯(cuò)的具體原因,研究基于這個(gè)數(shù)據(jù)可以直觀的明確具體的問題,但是這個(gè)需要較為定制化的實(shí)現(xiàn),有一定接入成本。? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

(2)實(shí)時(shí)trace系統(tǒng)接入
利用百度trace中臺(tái)的能力,可以做到業(yè)務(wù)在非侵入式的情況下進(jìn)行采集,接入成本極低。對(duì)于時(shí)效性方面采用了百度DataHub消息隊(duì)列,并利用Dstream實(shí)時(shí)建索引,使得從數(shù)據(jù)源到故障定位平臺(tái)可以基于關(guān)鍵信息的檢索時(shí)效性在5分鐘以內(nèi),大大的提高研發(fā)定位效率。?

四、微服務(wù)監(jiān)控全景圖
? ? ? ? ? ??
4.1用戶觸達(dá)
通過多維度可視化監(jiān)控,輔助研發(fā)基于可視化界面即可快速分析出問題大致原因;基于智能報(bào)警和業(yè)務(wù)報(bào)表,可以滿足在時(shí)效性和業(yè)務(wù)詳細(xì)健康度的全面檢測,讓研發(fā)同學(xué)全面感知系統(tǒng)的狀態(tài);
4.2監(jiān)控工具
基于公司提供的Argus監(jiān)控、Sia智能監(jiān)控和機(jī)器人監(jiān)控輔助工具,可以完整的對(duì)系統(tǒng)進(jìn)行全面覆蓋;對(duì)于一些長周期的業(yè)務(wù)數(shù)據(jù),諸如應(yīng)用日活、下載成功率、白屏率等指標(biāo)數(shù)據(jù),則提供定制化的監(jiān)控以覆蓋此類場景的監(jiān)控;
4.3監(jiān)控指標(biāo)
對(duì)于監(jiān)控指標(biāo)大體分位如上一些分類,基于這些分類做到監(jiān)控的有效覆蓋;
4.4監(jiān)控對(duì)象
監(jiān)控對(duì)象從服務(wù)器、業(yè)務(wù)日志、服務(wù)狀態(tài)到業(yè)務(wù)數(shù)據(jù)、業(yè)務(wù)核心邏輯和核心場景,通過全面的監(jiān)控對(duì)象梳理已做到對(duì)于監(jiān)控的全面掌控。
五、總結(jié)展望
通過系統(tǒng)化的監(jiān)控能力建設(shè),無論是在時(shí)效性、定位效率還是覆蓋度等均達(dá)到了較為理想的狀態(tài),研發(fā)對(duì)于重大的線上問題可以第一時(shí)間感知,并有完善的輔助定位信息來協(xié)助高效定位問題,總結(jié)整體監(jiān)控的實(shí)踐過程,主要是有以下幾個(gè)方面的心得。
(1)系統(tǒng)化設(shè)計(jì)落地監(jiān)控系統(tǒng)首先要明確解決的是什么問題,達(dá)到的是什么目標(biāo),將問題和目標(biāo)理解清楚后,實(shí)現(xiàn)上就以如何充分解決問題并達(dá)成目標(biāo)來思考,基于這樣一個(gè)系統(tǒng)化的分析拆解過程,我們從風(fēng)險(xiǎn)控制、智能監(jiān)控、智能報(bào)警、高效定位幾個(gè)部分入手來實(shí)現(xiàn)我們的監(jiān)控系統(tǒng),以達(dá)到預(yù)期的目標(biāo)。
(2)分級(jí)的思考方式在監(jiān)控和報(bào)警中應(yīng)用,核心邏輯集中火力無論是監(jiān)控還是報(bào)警,我們都以目標(biāo)集中于重要的功能和核心邏輯,如果現(xiàn)有工具無法達(dá)到目標(biāo),那就考慮多個(gè)工具組合來滿足監(jiān)控的目標(biāo)。對(duì)于通用的邏輯功能則強(qiáng)調(diào)覆蓋程度,以現(xiàn)有工具完整覆蓋。
(3)易于實(shí)施和落地公司提供的SIA智能監(jiān)控、argus監(jiān)控都有提供聚合的能力,對(duì)于同質(zhì)的內(nèi)容監(jiān)控做到一步到位。而對(duì)于異構(gòu)或差異化的服務(wù),則可以以業(yè)務(wù)方現(xiàn)有的形式以非侵入能力支持接入,大大提高了監(jiān)控的添加效率。
(4)充分結(jié)合公司現(xiàn)有能力,創(chuàng)新組合應(yīng)用,提高效率在使用監(jiān)控基礎(chǔ)實(shí)施的時(shí)候,不同的監(jiān)控工具各有優(yōu)劣,充分利用不同的監(jiān)控工具的優(yōu)勢達(dá)到整體監(jiān)控效果的最優(yōu),同時(shí)對(duì)于諸如一些核心邏輯的監(jiān)控,創(chuàng)新的使用機(jī)器人報(bào)警 trace的內(nèi)容定制化能力,實(shí)現(xiàn)對(duì)于核心邏輯問題的高效反饋和定位。
雖然在監(jiān)控系統(tǒng)方面的實(shí)踐已經(jīng)達(dá)到了較為理想的效果,但是在系統(tǒng)故障處理、容災(zāi)等能力的自動(dòng)化機(jī)制上有待進(jìn)一步完善建設(shè),且對(duì)于系統(tǒng)資源的使用并沒有做到智能化的利用,目前資源的增減仍然有賴于人工的干預(yù)。后續(xù)的優(yōu)化目標(biāo)是在故障自動(dòng)化處理、資源智能擴(kuò)縮容上達(dá)到全面的自動(dòng)化,以提供系統(tǒng)整體的可維護(hù)性和可用性。