簡介
CAT基于Java開發(fā)的實(shí)時(shí)應(yīng)用監(jiān)控平臺(tái),包括實(shí)時(shí)應(yīng)用監(jiān)控,業(yè)務(wù)監(jiān)控。
CAT支持的監(jiān)控消息類型包括:
- Transaction 適合記錄跨越系統(tǒng)邊界的程序訪問行為,比如遠(yuǎn)程調(diào)用,數(shù)據(jù)庫調(diào)用,也適合執(zhí)行時(shí)間較長的業(yè)務(wù)邏輯監(jiān)控,Transaction用來記錄一段代碼的執(zhí)行時(shí)間和次數(shù)。
- Event 用來記錄一件事發(fā)生的次數(shù),比如記錄系統(tǒng)異常,它和transaction相比缺少了時(shí)間的統(tǒng)計(jì),開銷比transaction要小。
- Heartbeat 表示程序內(nèi)定期產(chǎn)生的統(tǒng)計(jì)信息, 如CPU%, MEM%, 連接池狀態(tài), 系統(tǒng)負(fù)載等。
- Metric 用于記錄業(yè)務(wù)指標(biāo)、指標(biāo)可能包含對一個(gè)指標(biāo)記錄次數(shù)、記錄平均值、記錄總和,業(yè)務(wù)指標(biāo)最低統(tǒng)計(jì)粒度為1分鐘。
- Trace 用于記錄基本的trace信息,類似于log4j的info信息,這些信息僅用于查看一些相關(guān)信息
Logview
CAT監(jiān)控系統(tǒng)將每次URL、Service的請求內(nèi)部執(zhí)行情況都封裝為一個(gè)完整的消息樹、消息樹可能包括Transaction、Event、Heartbeat、Metric和Trace信息。
可視化Logview
[圖片上傳失敗...(image-9b83ca-1517378766023)]
分布式Logview樹【一臺(tái)機(jī)器調(diào)用另外一臺(tái)機(jī)器】
[圖片上傳失敗...(image-538c7d-1517378766023)]
Transaction
一段代碼運(yùn)行時(shí)間、次數(shù),比如URL、Cache、SQL執(zhí)行次數(shù)和響應(yīng)時(shí)間
Transaction實(shí)時(shí)報(bào)表
- Type統(tǒng)計(jì)界面
[圖片上傳失敗...(image-f87703-1517378766023)]
- Name統(tǒng)計(jì)界
[圖片上傳失敗...(image-c16591-1517378766023)]
Transaction歷史統(tǒng)計(jì)報(bào)表
- Transaction\Event月報(bào)表支持每天的趨勢圖,以天為單位,如下圖
[圖片上傳失敗...(image-289e1b-1517378766023)] - Transaction\Event報(bào)表日報(bào)表、周報(bào)表支持同比、環(huán)比對比,時(shí)間精度為5分鐘
[圖片上傳失敗...(image-b3ed04-1517378766023)]
Even
一行代碼運(yùn)行次數(shù),比如出現(xiàn)一個(gè)異常
Event實(shí)時(shí)報(bào)表
Type統(tǒng)計(jì)界面
[圖片上傳失敗...(image-687c55-1517378766023)]Name統(tǒng)計(jì)界面
[圖片上傳失敗...(image-ad3617-1517378766023)]一個(gè)小時(shí)內(nèi)詳細(xì)指標(biāo)統(tǒng)計(jì)
[圖片上傳失敗...(image-d1697d-1517378766023)]
Event歷史報(bào)表
- Transaction\Event月報(bào)表支持每天的趨勢圖,以天為單位,如下圖
[圖片上傳失敗...(image-51d8ca-1517378766023)] - Transaction\Event報(bào)表日報(bào)表、周報(bào)表支持同比、環(huán)比對比,時(shí)間精度為5分鐘
[圖片上傳失敗...(image-bf44fa-1517378766023)]
Problem
根據(jù)Transaction\Event數(shù)據(jù)分析出來系統(tǒng)可能出現(xiàn)的異常,包括訪問較慢的程序,
Problem實(shí)時(shí)報(bào)表
Problem的類型如下:
| 代碼 | 詳解 |
|---|---|
| error | Log4j記錄的錯(cuò)誤異常 |
| call | 表示在遠(yuǎn)程調(diào)用中transaction中出錯(cuò) |
| sql | 表示在數(shù)據(jù)庫的調(diào)用中transaction中出錯(cuò) |
| url | 表示在url請求中調(diào)用transaction中出錯(cuò) |
| failure | 業(yè)務(wù)程序Transaction的失敗(除了call\sql\url之外) |
| heartbeat | 心跳消息 |
| long-url | 執(zhí)行慢的url請求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
| long-service | 執(zhí)行慢的service請求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
| long-sql | 執(zhí)行慢的sql請求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
[圖片上傳失敗...(image-a87ac4-1517378766023)]
點(diǎn)擊機(jī)器IP,進(jìn)入某一臺(tái)機(jī)器出現(xiàn)的具體問題,這個(gè)包括了All中出現(xiàn)的所有錯(cuò)誤統(tǒng)計(jì)之外,還增加了以分鐘和線程為單位的錯(cuò)誤分布圖,具體如下:
[圖片上傳失敗...(image-8fda4d-1517378766023)]
Problem歷史報(bào)表
- 在選擇了特定的域、報(bào)表類型、時(shí)間和IP之后,點(diǎn)擊[:: show ::] 查看某一Type下的Problem出現(xiàn)次數(shù)的分布圖。(當(dāng)前這一天、上一天、上周這一天)
[圖片上傳失敗...(image-8df6a1-1517378766023)] - 進(jìn)一步,可以查看該Type下,某個(gè)Status的Problem出現(xiàn)次數(shù)的分布圖。(當(dāng)前這一天、上一天、上周這一天)
[圖片上傳失敗...(image-eec2c3-1517378766023)]
Heartbeat實(shí)時(shí)報(bào)表
JVM內(nèi)部一些狀態(tài)信息,Memory,Thread等
- Thread信息包括
| 名稱 | 詳細(xì) |
|---|---|
| Active Thread | 系統(tǒng)當(dāng)前活動(dòng)線程 |
| Daemon Thread | 系統(tǒng)后臺(tái)線程 |
| Total Started Thread | 系統(tǒng)總共開啟線程 |
| Started Thread | 系統(tǒng)每分鐘新啟動(dòng)的線程 |
| Cat Started Thread | 系統(tǒng)中CAT客戶端啟動(dòng)線程 |
| Pigeon Started Thread | 系統(tǒng)中Pigeon客戶端啟動(dòng)線程數(shù) |
- System Info信息包括
| 名稱 | 詳細(xì) |
|---|---|
| NewGc Count | 新生代GC次數(shù) |
| OldGc Count | 舊生代GC次數(shù) |
| System Load Average | 系統(tǒng)Load詳細(xì)信息 |
- Memery Info信息包括
| 名稱 | 詳細(xì) |
|---|---|
| Memory Free | 系統(tǒng)memoryFree情況 |
| Heap Usage | Java虛擬機(jī)堆的使用情況 |
| None Heap Usage | Java虛擬機(jī)Perm的使用情況 |
- Disk Info信息包括
詳細(xì)|
---|---
/根的使用情況|
/data盤的使用情況|
- Cat Info信息包括
詳細(xì)|
---|---
Cat每分鐘產(chǎn)生消息數(shù)|
Cat每分鐘丟掉的消息數(shù)|
Cat每分鐘產(chǎn)生消息大小|
Dependency實(shí)時(shí)報(bào)表
系統(tǒng)之間實(shí)時(shí)調(diào)用數(shù)據(jù)信息,包括遠(yuǎn)程服務(wù)、數(shù)據(jù)庫、緩存等
| 名稱 | 詳細(xì) |
|---|---|
| 時(shí)間統(tǒng)計(jì)粒度 | 分鐘 |
| 形狀:圓形 | SOA的一個(gè)服務(wù)或者一個(gè)Web |
| 形狀:矩形 | 數(shù)據(jù)庫一個(gè)實(shí)例 |
| 形狀:菱形 | 緩存一種集群(MemoryCached) |
| 狀態(tài):紅色 | Error |
| 狀態(tài):黃色 | Warning |
| 狀態(tài):綠色 | OK |
| 浮層 | 點(diǎn)擊節(jié)點(diǎn)可以直接查詢這一分鐘內(nèi)這個(gè)節(jié)點(diǎn)的詳細(xì)狀態(tài) |
[圖片上傳失敗...(image-c91a1d-1517378766023)]
- 應(yīng)用監(jiān)控大盤
把所有核心項(xiàng)目用監(jiān)控大盤方式展示,能全局看到項(xiàng)目目前問題。
[圖片上傳失敗...(image-f67934-1517378766023)]
Metric實(shí)時(shí)報(bào)表
公司核心業(yè)務(wù)指標(biāo)監(jiān)控
“當(dāng)前值”表示當(dāng)前實(shí)際值,“基線值”表示根據(jù)歷史趨勢算出來當(dāng)天的基準(zhǔn)線
[圖片上傳失敗...(image-957773-1517378766023)]
Matrix實(shí)時(shí)報(bào)表
一次請求(URL、Service)中的調(diào)用鏈路統(tǒng)計(jì),包括遠(yuǎn)程調(diào)用、sql調(diào)用、緩存調(diào)用
- Ratio表示訪問次數(shù),Min是最少,Max是最大,Avg是平均
- Cost表示時(shí)間消耗,Min是最少,Max是最大,Avg是平均
[圖片上傳失敗...(image-cd39f1-1517378766023)]
調(diào)用鏈路排行
包括遠(yuǎn)程調(diào)用、sql調(diào)用、緩存調(diào)用最多排行
[圖片上傳失敗...(image-1c669-1517378766023)]
Cross實(shí)時(shí)報(bào)表
SOA系統(tǒng)用關(guān)于RPC調(diào)用的報(bào)表(支持粒度服務(wù)、IP、方法)
統(tǒng)計(jì)參數(shù)包括:訪問量,錯(cuò)誤量,響應(yīng)時(shí)間,QPS
客戶端調(diào)用
[圖片上傳失敗...(image-3cd72e-1517378766023)]
服務(wù)端調(diào)用
[圖片上傳失敗...(image-2e5d04-1517378766023)]
Storage實(shí)時(shí)報(bào)表
監(jiān)控一段時(shí)間內(nèi)數(shù)據(jù)庫、Cache訪問情況:各種操作訪問次數(shù)、響應(yīng)時(shí)間、錯(cuò)誤次數(shù)、長時(shí)間訪問量等等。
長時(shí)間訪問定義:操作響應(yīng)時(shí)間超過1秒(數(shù)據(jù)庫),操作響應(yīng)時(shí)間超過50毫秒(cache)
-
統(tǒng)計(jì)報(bào)表
- 可以選擇相應(yīng)操作,查看該操作的各項(xiàng)訪問指標(biāo)。數(shù)據(jù)庫默認(rèn)操作:select,update,delete,insert;cache默認(rèn)操作:add,get,mGet,remove
- Domain是訪問該數(shù)據(jù)庫或cache的應(yīng)用名,All是所有應(yīng)用操作數(shù)據(jù)匯總
- Count: 操作數(shù);Long:長時(shí)間操作數(shù);Avg:響應(yīng)時(shí)間;Error:操作錯(cuò)誤數(shù)
- 點(diǎn)擊查詢可以在當(dāng)前報(bào)表上過濾不同操作訪問情況,方便分析數(shù)據(jù)
[圖片上傳失敗...(image-b90a6b-1517378766023)]
-
統(tǒng)計(jì)曲線圖
- 圖表展示當(dāng)前應(yīng)用操作數(shù)據(jù)庫或cache情況
- 圖表展示的操作種類,與查詢報(bào)表中的操作對應(yīng)一致
[圖片上傳失敗...(image-bfe9a-1517378766023)]
埋點(diǎn)方案
spring-boot
與spring-boot的整合就是在spring-boot的項(xiàng)目中添加一個(gè)配置類。配置類中配置的是由cat提供的過濾器
以上的方案只能監(jiān)控URL的執(zhí)行情況,具體內(nèi)部執(zhí)行情況無法監(jiān)控。
mybatis
對于mybatis的監(jiān)控是通過編寫mybatis插件,然后添加如下配置:
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="plugins">
<array>
<bean class="com.mybatis.CatMybatisPlugins"></bean>
</array>
</property>
<property name="mapperLocations">
<list>
<value>classpath:com/mybatis/*.xml</value>
</list>
</property>
</bean>
以上方案能夠檢測到sql的執(zhí)行情況。
Spring AOP ANNOTATION 監(jiān)控方法執(zhí)行時(shí)間
NOTE : cat不推薦使用aop方法埋點(diǎn),會(huì)有少量性能損耗,推薦使用api,這樣type和name以及成功狀態(tài)可以更加靈活。
通過定義注解與切面來監(jiān)控方法執(zhí)行時(shí)間。使用用例如下:
public interface UserService {
public void delete(Object entity);
public void getAllObjects();
public void save(Object entity);
public void update(Object entity);
}
public class UserServiceImpl implements UserService {
@Override
@CatAnnotation
public void delete(Object entity) {
sleep(30);
System.out.println("UserServiceImpl---刪除方法:delete()---");
}
@Override
@CatAnnotation
public void getAllObjects() {
sleep(40);
System.out.println("UserServiceImpl---查找所有方法:getAllObjects()---");
}
@Override
@CatAnnotation
public void save(Object entity) {
sleep(10);
System.out.println("UserServiceImpl---保存方法:save()---");
}
private void sleep(int time) {
try {
Thread.sleep(time);
} catch (Exception e) {
}
}
@Override
@CatAnnotation
public void update(Object entity) {
sleep(20);
System.out.println("UserServiceImpl---更新方法:update()---");
}
}
優(yōu)缺點(diǎn)對比
優(yōu)點(diǎn)
- 可擴(kuò)展:支持分布式、跨IDC部署,橫向擴(kuò)展。
- 高可用:所有應(yīng)用都可以倒下了,需要監(jiān)控還站著,告訴它們發(fā)生了什么。
- 實(shí)時(shí)處理:信息的價(jià)值會(huì)隨時(shí)間銳減,尤其是事故處理過程中。
- 全量數(shù)據(jù):小概率事件是常態(tài),百萬分之一的概率,碰到了就是100%。
- 高吞吐:要想還原真相,需要全方位的監(jiān)控和度量,必須要有超強(qiáng)的處理吞吐能力。
- 故障容忍:CAT本身故障不應(yīng)該影響業(yè)務(wù)正常運(yùn)轉(zhuǎn),CAT掛了,應(yīng)用不該受影響,只是監(jiān)控能力暫時(shí)減弱。
- 不保證可靠:允許消息丟失,這是一個(gè)很重要的trade-off,雖然目前CAT可以做到4個(gè)9的可靠性。
缺點(diǎn)
- 并不能直接識(shí)別應(yīng)用系統(tǒng)框架服務(wù),這款產(chǎn)品具有很強(qiáng)的侵入性,需要用戶調(diào)用Cat API自定義監(jiān)控打點(diǎn)以及監(jiān)控緯度數(shù)據(jù),側(cè)重于業(yè)務(wù)監(jiān)控 。