CAT分佈式監控系統(一):CAT功能介紹 CAT監控系統是什麼、能做什麼?

CAT分佈式監控系統(一):CAT監控系統功能介紹

 

       本文概要:

             1、CAT監控系統是什麼。

              2、CAT監控系統能做什麼,能監控些什麼。

       下面有些截圖是CAT 2.0版本的,但和3.0版本沒什麼區別的。

 

一、 簡介

        CAT(Central Application Tracking)是美團開源的基於Java開發的實時分佈式應用監控平臺,提供了全面的監控服務和業務決策支持。

       CAT監控系統的定位:

cat本質上一個實時監控系統,主要體現在監控報表Transaction、event、problem、heartbeat等,cat系統定製的監控模型以及定製的實時分析報表也是cat系統核心優勢。

logview是cat原始的log採集方式,cat的logview使用的技術是threadlocal,將一個thread裏面的打點聚合上報,有一點弱化版本的鏈路功能,但是cat並不是一個標準的全鏈路系統,全鏈路系統參考dapper的論文,業內比較知名的鷹眼,zipkin等,其實經常拿cat和這類系統進行比較其實是不合適的。cat的logview在異步線程等等一些場景下,其實不合適,cat本身模型並不適合這個。在美團點評內部,有mtrace專門做全鏈路分析。

也就是說:CAT定義了一個基本的監控模型,可以用來實時監控,至於要監控些什麼可以自己定義,比如要做分佈式全鏈路跟蹤監控,可以自己埋點獲取監控信息;

怎麼埋點也是有參考方案的,下篇博文將會介紹本人重新封裝的客戶端埋點SDK。

另外,CAT傾向於指標、鏈路事件監控,不太適用於大量業務日誌的場景,因爲無法搜索、分析,CAT只看看到最新的樣本數據和出問題的數據。大量業務日誌的場景應該用ELK。

         github:https://github.com/dianping/cat

         官方DOME:http://unidal.org/cat/r/t?ip=All&queryname=&domain=cat

二、系統/應用狀態監控

        接入CAT客戶端後,CAT客戶端每分鐘發送一次自身的狀態信息。

        狀態信息包括:服務器系統信息、JVM 內存/GC信息、線程信息、CAT監控使用信息等。詳情如下圖:

        狀態信息的原始數據可以查看“Transaction“中的System類型信息,如下圖:

        “Heartbeat”實時報表用來展示狀態信息,可以看到當前項目下所有的部署機器(支付中心只有一臺服務器),如下圖:

        配置說明:這個功能無需其他配置,接入就自動上傳狀態監控信息。

 

三、程序代碼運行情況監控

        監控一段代碼運行情況:運行時間統計、次數、錯誤次數等等。如下圖:

        上面圖一展示的是請求過程中監控的不同代碼段類型的執行情況,不同類型表示範圍不一樣;圖二展示方法類型裏各方法的執行情況。一次請求過程原始監控數據如下(注意類型和上面圖一對應):

        下面對圖中報表進行解釋:

                a)Type統計界面

                b)Name統計界面

                c)一個小時內詳細指標統計

                        1. Duration Distribution表示transaction的執行時間分佈,這個圖可以看出,大部分shopcheckin是在16-64毫秒完成,還有很少部分在512-1024毫秒完成。

                        2. HitOverTime、Averager Duration Over Time,Failures Over Time 縱軸都是以5分鐘爲單位,HitOverTime表示5分鐘內的訪問次數。

                        3. Averager Duration Over Time表示5分鐘內的平均處理時間。

                        4. Failures Over Time表示5分鐘內的Transaction失敗次數。

 

               配置說明:代碼監控需要相關埋點配置,如方法監控可用包路徑、或用@CatMethodMonitori註解配置,更多配置詳情請參考《項目接入說明》。

四、全鏈路監控分析

        上面我們也看到了一次請求過程的原始監控信息,包括URL、METHOD的耗時、參數、返回值等,如下:

        其中經歷了一次跨服務調用service-ribbon à service-hi(注意:跨服務是圖中第二個紅框到第三個紅框,而第一個紅框到第二個紅框是穿透Hystrix熔斷器異步線程的),耗時圖形分析如下:

        “Cross”報表展示了跨服務調用的情況,如下圖:

        相關配置:默認開啓,暫時支持該功能的通信組件:Spring Cloud Ribbon、Spring Cloud Feign(不兼容Sleuth)、Dubbo RPC,更多詳情請參考《項目接入說明》。

五、異常/錯誤等問題監控

        Problem記錄整個項目在運行過程中出現的問題,包括一些錯誤、訪問較長的行爲。Problem的類型如下:

        1、“Problem”實時報表介紹

                All的錯誤界面

                錯誤一個小時內的實時趨勢圖

                點擊機器IP,進入某一臺機器出現的具體問題,這個包括了All中出現的所有錯誤統計之外,還增加了以分鐘和線程爲單位的錯誤分佈圖,具體如下:

        2、“Problem”歷史報表介紹

                1)在選擇了特定的域、報表類型、時間和IP之後,點擊[:: show ::] 查看某一Type下的Problem出現次數的分佈圖。(當前這一天、上一天、上週這一天)

                2)進一步,可以查看該Type下,某個Status的Problem出現次數的分佈圖。(當前這一天、上一天、上週這一天)

        相關配置:URL、方法監控會自動記錄異常名稱,如果需要集成日誌框架(log4j、logback)打印上傳錯誤信息,請參考《項目接入說明》。

SQL執行監控

        SQL執行監控可以看到每個DAO方法執行解析的SQL語句、SQL語句執行時長、以及連接到哪個數據庫(URL)執行;如果SQL執行出現異常,還會記錄異常信息;另外還可以過濾出慢SQL。

        SQL監控執行整體情況如下:


 

       各DAO方法監控如下:

        測試一個方法裏執行CURD的“Log View”信息如下:

       SQL類型(insert/select/update/delete)執行情況的統計如下:

        每個數據庫執行情況的統計如下:

       另外,還可以在“Problem”標籤頁面過濾出慢SQL,如下圖:

        相關配置:支持Mybatis的SQL監控,需要配置Mybatis監控插件,請參考《項目接入說明》。

七、自定義監控/業務監控

        上面介紹這些功能主要是gc-cat-client SDK中實現的,稍微配置一下就可以使用。

        除此外,還有可以自定義監控以實現業務監控,CAT客戶端本身提供了幾種監控類型的API, CAT支持的監控消息類型包括:

                1)、Transaction:適合記錄跨越系統邊界的程序訪問行爲,比如遠程調用,數據庫調用,也適合執行時間較長的業務邏輯監控,Transaction用來記錄一段代碼的執行時間和次數。

                2)、Event:用來記錄一件事發生的次數,比如記錄系統異常,它和transaction相比缺少了時間的統計,開銷比transaction要小。

                3)、Heartbeat:表示程序內定期產生的統計信息, 如CPU%, MEM%, 連接池狀態, 系統負載等。

                4)、Metric:用於記錄業務指標、指標可能包含對一個指標記錄次數、記錄平均值、記錄總和,業務指標最低統計粒度爲1分鐘。

                        Metric一共有三個API,分別用來記錄次數、平均、總和,統一粒度爲一分鐘:

                               a).logMetricForCount:用於記錄一個指標值出現的次數。

                               b).logMetricForDuration:用於記錄一個指標出現的平均值。

                                c).logMetricForSum:用於記錄一個指標出現的總和。

        看到這些類型名稱,可知我們前面介紹的這些功能也是基於這幾種監控消息類型的API實現的。

       一份埋點的樣例:

                Transaction:用來記錄一段程序響應時間;Even:用來記錄一行code的執行次數;Metric:用來記錄一個業務指標。這些指標都是獨立的,可以單獨使用,主要看業務場景。

                下面的埋點代碼裏面表示需要記錄一個頁面的響應時間,並且記錄一個代碼執行次數,以及記錄兩個業務指標,所有用了一個Transaction,一個Event,兩個Metric。Transaction的埋點一定要complete,切記放在finally裏面。

               代碼中自定義好業務指標監控後,然後運行測試上傳一些監控數據,接着到“業務監控配置”頁面(http://192.168.1.52:8888/cat/s/config? op=list)配置大盤顯示和告警,然後就可以在“Business”而頁面看到相關圖表,如下:

八、告警設置

        上面業務監控我們也說到業務指標也可以設置告警的,除此外,Transaction/Event/異常/心跳都可以設置告警,如下圖所示:

        URL(/hi)執行次數告警測試:

九、其他報表統計

        還有一些全局的報表統計,訪問地址(比較隱蔽):http://192.168.1.52:8888/cat/r/overload

        如“全局統計異常”報表,看到各個項目的異常情況:

        “服務可用排行”報表,看到各服務可用情況:

        “線上容量規劃”報表,看到各項目一些資源使用情況:

十、總結

        以上總結了本人發現的且認爲比較有用的CAT監控功能,基本能滿足大部分監控需求,更多功能有待大家挖掘。

        另外,下篇博文將會介紹本人重新封裝的CAT客戶端埋點SDK,歡迎提出建議。

 

【參考資料】

1、 CAT相關文檔

2、 GitHub - dianping/cat: Central Application Tracking

3、 深度剖析開源分佈式監控CAT

4、 大衆點評網監控平臺剖析

5、 透過CAT,來看分佈式實時監控系統的設計與實現

6、 Dapper,大規模分佈式系統的跟蹤系統 by bigbully

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章