1. 程式人生 > >大眾點評Cat--架構分析

大眾點評Cat--架構分析

cpu 等等 alert 監控 前臺 參數 consumer cat 組織

轉自:http://blog.csdn.net/szwandcj/article/details/51025669

Cat功能強大且多,光日誌的報表和圖表分析就有十幾種,但文檔卻很少,寥寥無幾找到一些粒度卻還很粗而且都是偏功能性的介紹。此外cat的配置也特別豐富,但幾乎所有的cat文檔裏卻鮮少提及。這些都導致很多方面都是缺失的,尤其是對於使用者來說,缺失了這些可能就意味著後面會步入大坑。

大綱

大眾點評Cat–整體架構
大眾點評Cat–server架構分析

整體架構

Cat的定位是實時監控平臺,但是與其說是監控平臺,更像是個數據倉庫,在數據倉庫的基礎上提供豐富的報表分析功能。
技術分享圖片
Cat分c端和s端,c使用cat接口向s上報統一格式的日誌信息。Cat的c是產生日誌的地方(一般來說就是被監控的應用,上圖中的應用節點),相應的s則是接受日誌、消費日誌的地方(上圖中的server節點),日誌消費後生成會日誌報表。

S分為job machine, alert machine和sender machine,前者表示可以運行定時任務的節點,後者則代表可以進行告警任務的節點。定時任務將報表數據轉換成圖表數據;告警則基於一定規則對報表數據做篩選剔出相應的告警數據,還有種特殊的告警用於對第三方應用做ping(2次ping不通或者超時則告警),告警節點如果不同時是發送節點則只保存告警信息,如果是發送節點則發送消息提醒(微信,短信,郵箱)給相應的運維人員。

運維人員可以直接通過s端提供的web前臺功能查看報表信息以及圖表信息。

服務節點除了對日誌做處理還提供rest服務–報表數據查詢和基礎數據查詢及變更接口。Cat前臺提供功能做配置變更和查詢,用戶也可以編程調用rest接口做變更和查詢。Cat集群內部,不同節點之間數據交換都是通過rest服務來的,例如後面要介紹的應用節點到服務節點拉取路由信息查詢以及告警節點向服務節點拉取報表信息等。

消息樹結構

技術分享圖片
Cat使用消息樹(MessageTree)組織日誌,樹的每個節點都是一個消息(Message),消息共有5種具體類型,分別是Transaction, Trace, Event,Heartbeat和Metric。每個消息樹都有一個唯一的messageId,且消息樹之間有單父級關系。

Transaction可以理解為是一個事務,它分為三種–獨立事務,分支事務以及標記事務。事務之間可以互相嵌套,事務還可以嵌套任意其他消息類型,也只有事務才可以嵌套消息。

分支事務是從當前事務裏派生出的異步事務,當前事務不需要等待其完成。分支事務創建新的消息樹,和主事務之間是平行的關系。主事務通過新建event記錄與分支事務之間的關系(一種軟連接關系),分支事務通過設置消息樹的parentMessageId維護與主事務消息之間的關系。

標記事務和分支事務之間非常類似,但標記事務是當前事務的子事務而不是另一個平行事務。其他線程可以通過tag(標記)找到標記事務並進行綁定,標記事務創建新event記錄綁定信息,每一次綁定對應一個event,event裏記錄綁定線程的事務信息;同時綁定線程會也通過parentMessageId維護與主事務消息之間的關系。
技術分享圖片

Event代表系統是在某個時間點發生的一次事件,例如新用戶註冊、登陸,系統異常等,理論上可以記錄任何事情。

Trace記錄debug或者info信息。

Metric記錄一些指標信息,cat提供logMetricForSum, logMetricForCount以及logMetricForDuration對指標做簡單的度量統計。

Heartbeat則是用來記錄系統的心跳信息,例如cpu,內存等等。Cat默認收集c端(見上節c和s的區分)節點的心跳信息。對報文結構感興趣的可以查看status.xsd。

關鍵配置的靜態結構

Cat有三個重要配置,分別是ClientConfig, RouterConfig和ServerConfig,分別代表客戶端信息,服務路由信息以及服務端配置信息。
技術分享圖片
每個客戶端對應一組對服務器以及一個domain信息,客戶端默認從這組服務中的一個節點上拉取路由配置信息。客戶端的查詢參數裏帶有domain信息,服務端的路由配置裏如果有相應的domain則返回相應domain下的一組server信息,如果沒有則返回default servers。

返回的路由信息包含一組日誌服務節點以及采樣比例(sample),日誌服務節點包含權重,socket端口號以及id(ip)。采樣比例是指客戶端的cat日誌多少次裏抽樣發送1次,例如0.2則代表記錄5次日誌會忘服務端發送1次。

客戶端拉取到router信息後,和router的日誌server列表中第一個可用server之間建立netty channel,並啟動一個線程對channel進行維護。對channel的維護主要包括:
1. 比較服務端路由信息和客戶端上次抓取的是否一致,不一致則更新客戶端router信息,並重新建立新channel
2. 判斷當前channel狀態,如果狀態不正常,則從router的server列表裏重新找出一個能用的server建立channel

客戶端拉取不到router信息時,默認使用客戶端下的server列表作為遠程日誌服務器組。

ServerConfig主要用於服務端節點的職能描述,主要有以下幾類功能:
1. 定義服務節點職能,可以運行哪類任務,以及是否可以發送告警信息和是否是hdfs存儲節點。
2. 通過consoleConfig定義相應報表數據的獲取節點,一般用於告警節點遠程拉取所有節點的報表數據進行篩選。
3. ConsumerConfig定義各種類型的事務時間閾值,從名字可以看出來分別定義url,sql以及cache類型的事務時間的閾值,超過這個時間會被認為是一個problem。

大眾點評Cat--架構分析