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

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

? ? ? ? ? ??

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

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

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

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

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

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

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

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

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

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

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

3.1.4高效定位能力支持

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

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

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