首頁 > 科技

揭祕百度微服務監控:百度遊戲服務監控的演進

2021-07-17 03:05:36

導讀:臣聞防患於未然者易,除患於已然者難 —— 明·馬文升《添風憲以撫流民疏》

作為一個程式設計師,是否有留意到每逢節假日在各大景區時有程式設計師開啟電腦緊急處理線上問題?如果線上出現大量的報警,這時我們該如何判斷是自身服務問題還是依賴服務問題?午夜線上重大問題出現,如何能夠喚醒相關人員快速響應?相信這些問題對於很多同學都不陌生,監控的重要性不言而喻,那如何打造一個完善的監控系統,協助程式設計師發現並高效定位問題?本文將介紹百度遊戲微服務監控實踐,基於百度完善的監控基礎實施,我們打造了較為完善的監控系統,下面我們向大家介紹我們的實踐歷程。

全文4583字,預計閱讀時間 9分鐘。

一、背景

隨著業務的快速發展,遊戲服務端研發同學平均每人要維護2~3個微服務,後續業務場景增多可能會引入更多微服務,如何高效的獲悉整個微服務系統的運行狀態,業務異常時如何快速發現問題並解除故障,遊戲服務端研發同學在監控實踐上做了很多工作嘗試。

初期的監控基於公司的Argus監控(日誌伺服器相關監控)、Monitor監控平臺(業務監控)、Sia監控(視覺化監控)等覆蓋了一些基礎的監控,但是由於缺乏體系、缺少和業務的結合,整體的效果並不理想,不少問題依然是客服和產品同學反饋,同時在跟進問題過程中研發最為頭疼的一個點是在問題定位上往往要花很長的時間,這個對業務造成了一定的負面影響。在這種情況下我們系統化的梳理了面臨的問題並體系化的設計和優化完善了監控系統,並著重針對問題定位做了和業務的深度結合,大大提升了問題的定位效率。

下面將就我們監控系統的建設過程整體介紹,希望對讀者有所幫助。

二、微服務監控初探

監控建設初期我們主要是基於百度的監控基礎設施新增各種監控,但是由於缺乏體系效果並不理想。儘管初探階段我們監控能力不夠完善且能力較弱,但這些分散的監控措施也幫助研發同學發現了不少系統問題,為後續的體系化和多維度組合監控打下了基礎。

2.1、日誌和伺服器監控

利用百度Argus監控平臺,實現對機器狀態和業務日誌的監控,遊戲微服務藉助機器及日誌監控能力對線上服務進行了監控的覆蓋。

我們初期對Argus監控的應用偏單維化,結合業務場景的深度不夠,諸如某個問題某些例項的監測閾值及多維度報警能力初期並沒有考慮設計,下面是對於百度Argus監控的能力和流程介紹:

argus整體資料流如下,可以支援電話、SMS、簡訊及百度如流報警

日誌相關監控業界有大家熟悉的ELK Stack 方案(Elasticseach + Logstash + Kibana),使用Beats(可選)在每臺伺服器上安裝後,作為日誌客戶端收集器,然後通過Logstash進行統一的日誌收集、解析、過濾等處理,再將資料傳送給Elasticsearch中進行儲存分析,最後使用Kibana來進行資料的展示。

2.2、服務輪詢監控

利用百度monitor監控平臺,對於核心的介面採用定時輪詢檢測的機制來輔助監控線上服務質量,monitor平臺支援視覺化配置,但是需要針對每個場景做定製化配置,隨著業務快速的迭代,這種監控新增的效率和易用性已不能滿足業務的需求。

2.3、服務視覺化監控

利用公司SIA智慧監控系統,實現了服務流量、可用性、效能等指標的監控視覺化,可以輔助業務研發視覺化的觀察服務線上狀態並基於線上異常狀態報警。但是業務對於SIA智慧監控能力並沒有充分使用,導致視覺化的輔助作用有限,智慧能力沒有體現。

圖3 監控視覺化

對於業界的視覺化監控工具,有諸如Kibana、Grafana等,相關的能力都已很完善,基本可以滿足業務的各種展現需求,大家可以參考瞭解。

三、微服務監控演進

如上面所闡述的,監控初探階段的監控措施雖然可以輔助研發發現和定位一些問題,但是還是存在諸多問題,主要是如下四個方面:

  • 風險暴露滯後,大多報警發生時已造成影響;
  • 監控缺乏統一規劃,相關監控項混亂且覆蓋極不完整;
  • 監控能力弱,無法提供有效異常資訊;
  • 報警混亂,研發被報警資訊轟炸;

從整體監繫統建設成本和收益來看,我們不會將過去的監控全部推翻,而是基於在現有基礎監控的能力上加以完善。首先我們以系統化的視角對於監控系統做全面設計,然後基於設計強化監控系統各個部分的能力。

3.1、監控系統化設計

目標:有效預防、及時發現、快速止損;

落地:基於系統化的設計目標,做了如下的落地思路拆解。

實現上從風險控制、智慧監控、智慧報警、高效定位四個方面來設計微服務系統的監控系統化工作,整體流程如下:

下面從風險控制、智慧監控、智慧報警和高效定位四個方面逐一介紹。

3.1.1風險控制設計

線上問題發現的時機越早越好,由於研發同學水平客觀上存在差異,且通過cooder review無法有效規避上線問題的發生,所以遊戲業務研發在自動化case和釋出環節做了較多的工作,以減少問題的發生。下面是研發做的主要風險控制項,通過這些風險控制項的落地,目前已經可以減少95%以上的上線中問題。

3.1.2智慧監控設計

遊戲業務初期的監控,是分散的監控新增:日誌監控使用argus,視覺化的監控實驗SIA智慧監控平臺,監控的覆蓋和監控系統之間的協同效果並沒有做全局考慮,這樣就暴露出一些問題,如:

問題1:

按照監控物件劃分的監控,是在單一維度上做到有效覆蓋,但是系統全局波動異常如何探測?

問題2:

某個例項因為網路或機器磁碟偶發故障導致pvlost突增,如何高效的獲得資訊?

問題3:

系統可用性波動,是某個機房的問題,還是特定介面的問題,或是訪問下游的異常?

(1)智慧異常檢測

利用SIA系統的智慧異常檢測演算法,將耗時、流量、SLA指標、收入等指標納入到監控體系,可以高效探測到系統的週期/非週期波動異常,下面簡單介紹下主要的演算法。

通過將上述指標同遊戲業務的流量、耗時、收入等指標的結合,在系統週期性或非週期性的波動時,即使是較為緩慢的下降也可以通過這些週期性檢測工具

有效檢測,大大提高異常檢測覆蓋度。

(2)全場景監控覆蓋

我們從4個象限覆蓋監控,做到問題暴露無死角,同時針對諸如服務維度的監控,還細化了多維度的篩選能力,力求從宏觀視角便於發現問題的同時也做到在微觀世界能夠輔助高效定位問題。

這裡我們著重提下資料監控,我們針對遊戲業務的特殊化場景,細化了需要監控的資料以及場景,以確保監控的完整覆蓋,下面是資料相關的一些監控項。

(3)多維度監控視覺化輔助

多維度篩選能力:服務、介面、錯誤碼、機房、機器例項;

異常多維度視覺化 :如pvlost基於介面、機器、機房的分佈;

錯誤分佈視覺化:分介面、分錯誤碼;

圖6 多維度監控視覺化

3.1.3智慧報警設計

報警整體做了分級報警設計,基於不同的場景設定不同的報警範圍和報警方式,減少了非重要報警的資訊氾濫,同時在報警應用上有如下整體設計:

(1)智慧合併過濾與自動升級

智慧過濾:減少報警資訊的過渡氾濫,做一定的資訊篩選;

智慧報警合併:通過資訊的合併,提升報警的資訊簡介度,進一步減少報警資訊氾濫;

報警自動升級:解決了困擾報警觸達不了值班人的問題,通過設定不同閾值擴大到不同的範圍,並升級報警的形式從郵件->如流->簡訊->電話,且報警電話可以設定不斷的撥打直至有人響應為止,解決了觸達的問題;

(2)樣式內容自定義

對於普通的例項報警或服務報警,相應報警資訊按照固定格式進行輸出;

核心邏輯部分新增基於富文字的報警內容定義,完整的展示報警資訊和報警問題,並提供問題的上下文語義,大大提高了資訊量,為定位問題提供了充足有效的資訊。

圖8 報警內容樣式自定義

3.1.4高效定位能力支援

報警暴露資訊高效:對於關鍵核心邏輯採用Trace鏈路+機器人方式來實現報警的高效觸達和自定義化輸出,實現資訊的高效傳遞;

報警資訊確認高效:部分注意考慮在異常資訊報警後,為了確認線上的相關完整日誌資料和請求當時資料情況的快速資料檢索,實時trace系統高效的解決了這個問題;

(1)核心邏輯機器人Trace鏈路資訊

報警暴露資訊在核心邏輯已基本達到了分鐘級的問題報警 + 問題的自動定位,研發基於報警資訊即可以看到對應的問題程式碼行數及出錯原因,大大提高了問題的定位效率。

當然這個方式的報警目前還存在實現成本較高的問題,諸如在遊戲業務的充值完成後給使用者發道具過程中如果存在一次,我們會暴露出請求參數、出錯函數及出錯的具體原因,研究基於這個資料可以直觀的明確具體的問題,但是這個需要較為定製化的實現,有一定接入成本。

(2)實時trace系統接入

利用百度trace中臺的能力,可以做到業務在非侵入式的情況下進行採集,接入成本極低。對於時效性方面採用了百度DataHub訊息佇列,並利用Dstream實時建索引,使得從資料來源到故障定位平臺可以基於關鍵資訊的檢索時效性在5分鐘以內,大大的提高研發定位效率。

四、微服務監控全景圖

4.1使用者觸達

通過多維度視覺化監控,輔助研發基於視覺化介面即可快速分析出問題大致原因;基於智慧報警和業務報表,可以滿足在時效性和業務詳細健康度的全面檢測,讓研發同學全面感知系統的狀態;

4.2監控工具

基於公司提供的Argus監控、Sia智慧監控和機器人監控輔助工具,可以完整的對系統進行全面覆蓋;對於一些長週期的業務資料,諸如應用日活、下載成功率、白屏率等指標資料,則提供定製化的監控以覆蓋此類場景的監控;

4.3監控指標

對於監控指標大體分位如上一些分類,基於這些分類做到監控的有效覆蓋;

4.4監控物件

監控物件從伺服器、業務日誌、服務狀態到業務資料、業務核心邏輯和核心場景,通過全面的監控物件梳理已做到對於監控的全面掌控。

五、總結展望

通過系統化的監控能力建設,無論是在時效性、定位效率還是覆蓋度等均達到了較為理想的狀態,研發對於重大的線上問題可以第一時間感知,並有完善的輔助定位資訊來協助高效定位問題,總結整體監控的實踐過程,主要是有以下幾個方面的心得。

(1)系統化設計落地

監控系統首先要明確解決的是什麼問題,達到的是什麼目標,將問題和目標理解清楚後,實現上就以如何充分解決問題並達成目標來思考,基於這樣一個系統化的分析拆解過程,我們從風險控制、智慧監控、智慧報警、高效定位幾個部分入手來實現我們的監控系統,以達到預期的目標。

(2)分級的思考方式在監控和報警中應用,核心邏輯集中火力

無論是監控還是報警,我們都以目標集中於重要的功能和核心邏輯,如果現有工具無法達到目標,那就考慮多個工具組合來滿足監控的目標。對於通用的邏輯功能則強調覆蓋程度,以現有工具完整覆蓋。

(3)易於實施和落地

公司提供的SIA智慧監控、argus監控都有提供聚合的能力,對於同質的內容監控做到一步到位。而對於異構或差異化的服務,則可以以業務方現有的形式以非侵入能力支援接入,大大提高了監控的新增效率。

(4)充分結合公司現有能力,創新組合應用,提高效率

在使用監控基礎實施的時候,不同的監控工具各有優劣,充分利用不同的監控工具的優勢達到整體監控效果的最優,同時對於諸如一些核心邏輯的監控,創新的使用機器人報警+trace的內容定製化能力,實現對於核心邏輯問題的高效反饋和定位。

雖然在監控系統方面的實踐已經達到了較為理想的效果,但是在系統故障處理、容災等能力的自動化機制上有待進一步完善建設,且對於系統資源的使用並沒有做到智慧化的利用,目前資源的增減仍然有賴於人工的干預。後續的優化目標是在故障自動化處理、資源智慧擴縮容上達到全面的自動化,以提供系統整體的可維護性和可用性。


IT145.com E-mail:sddin#qq.com