簡(jiǎn)介
CAT基于Java開(kāi)發(fā)的實(shí)時(shí)應(yīng)用監(jiān)控平臺(tái),包括實(shí)時(shí)應(yīng)用監(jiān)控搏存,業(yè)務(wù)監(jiān)控。
CAT支持的監(jiān)控消息類(lèi)型包括:
- Transaction 適合記錄跨越系統(tǒng)邊界的程序訪(fǎng)問(wèn)行為,比如遠(yuǎn)程調(diào)用,數(shù)據(jù)庫(kù)調(diào)用墩新,也適合執(zhí)行時(shí)間較長(zhǎng)的業(yè)務(wù)邏輯監(jiān)控马澈,Transaction用來(lái)記錄一段代碼的執(zhí)行時(shí)間和次數(shù)瓢省。
- Event 用來(lái)記錄一件事發(fā)生的次數(shù),比如記錄系統(tǒng)異常痊班,它和transaction相比缺少了時(shí)間的統(tǒng)計(jì)勤婚,開(kāi)銷(xiāo)比transaction要小。
- Heartbeat 表示程序內(nèi)定期產(chǎn)生的統(tǒng)計(jì)信息, 如CPU%, MEM%, 連接池狀態(tài), 系統(tǒng)負(fù)載等涤伐。
- Metric 用于記錄業(yè)務(wù)指標(biāo)馒胆、指標(biāo)可能包含對(duì)一個(gè)指標(biāo)記錄次數(shù)、記錄平均值凝果、記錄總和祝迂,業(yè)務(wù)指標(biāo)最低統(tǒng)計(jì)粒度為1分鐘。
- Trace 用于記錄基本的trace信息器净,類(lèi)似于log4j的info信息型雳,這些信息僅用于查看一些相關(guān)信息
Logview
CAT監(jiān)控系統(tǒng)將每次URL、Service的請(qǐng)求內(nèi)部執(zhí)行情況都封裝為一個(gè)完整的消息樹(shù)掌动、消息樹(shù)可能包括Transaction四啰、Event、Heartbeat粗恢、Metric和Trace信息柑晒。
可視化Logview
[圖片上傳失敗...(image-9b83ca-1517378766023)]
分布式Logview樹(shù)【一臺(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)表支持每天的趨勢(shì)圖,以天為單位,如下圖
[圖片上傳失敗...(image-289e1b-1517378766023)] - Transaction\Event報(bào)表日?qǐng)?bào)表涌庭、周報(bào)表支持同比芥被、環(huán)比對(duì)比,時(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)表支持每天的趨勢(shì)圖坐榆,以天為單位,如下圖
[圖片上傳失敗...(image-51d8ca-1517378766023)] - Transaction\Event報(bào)表日?qǐng)?bào)表拴魄、周報(bào)表支持同比、環(huán)比對(duì)比,時(shí)間精度為5分鐘
[圖片上傳失敗...(image-bf44fa-1517378766023)]
Problem
根據(jù)Transaction\Event數(shù)據(jù)分析出來(lái)系統(tǒng)可能出現(xiàn)的異常席镀,包括訪(fǎng)問(wèn)較慢的程序匹中,
Problem實(shí)時(shí)報(bào)表
Problem的類(lèi)型如下:
代碼 | 詳解 |
---|---|
error | Log4j記錄的錯(cuò)誤異常 |
call | 表示在遠(yuǎn)程調(diào)用中transaction中出錯(cuò) |
sql | 表示在數(shù)據(jù)庫(kù)的調(diào)用中transaction中出錯(cuò) |
url | 表示在url請(qǐng)求中調(diào)用transaction中出錯(cuò) |
failure | 業(yè)務(wù)程序Transaction的失敗(除了call\sql\url之外) |
heartbeat | 心跳消息 |
long-url | 執(zhí)行慢的url請(qǐng)求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
long-service | 執(zhí)行慢的service請(qǐng)求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
long-sql | 執(zhí)行慢的sql請(qǐng)求(可以進(jìn)行進(jìn)行時(shí)間篩選) |
[圖片上傳失敗...(image-a87ac4-1517378766023)]
點(diǎn)擊機(jī)器IP,進(jìn)入某一臺(tái)機(jī)器出現(xiàn)的具體問(wèn)題豪诲,這個(gè)包括了All中出現(xiàn)的所有錯(cuò)誤統(tǒng)計(jì)之外顶捷,還增加了以分鐘和線(xiàn)程為單位的錯(cuò)誤分布圖,具體如下:
[圖片上傳失敗...(image-8fda4d-1517378766023)]
Problem歷史報(bào)表
- 在選擇了特定的域屎篱、報(bào)表類(lèi)型服赎、時(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信息包括
名稱(chēng) | 詳細(xì) |
---|---|
Active Thread | 系統(tǒng)當(dāng)前活動(dòng)線(xiàn)程 |
Daemon Thread | 系統(tǒng)后臺(tái)線(xiàn)程 |
Total Started Thread | 系統(tǒng)總共開(kāi)啟線(xiàn)程 |
Started Thread | 系統(tǒng)每分鐘新啟動(dòng)的線(xiàn)程 |
Cat Started Thread | 系統(tǒng)中CAT客戶(hù)端啟動(dòng)線(xiàn)程 |
Pigeon Started Thread | 系統(tǒng)中Pigeon客戶(hù)端啟動(dòng)線(xiàn)程數(shù) |
- System Info信息包括
名稱(chēng) | 詳細(xì) |
---|---|
NewGc Count | 新生代GC次數(shù) |
OldGc Count | 舊生代GC次數(shù) |
System Load Average | 系統(tǒng)Load詳細(xì)信息 |
- Memery Info信息包括
名稱(chēng) | 詳細(xì) |
---|---|
Memory Free | 系統(tǒng)memoryFree情況 |
Heap Usage | Java虛擬機(jī)堆的使用情況 |
None Heap Usage | Java虛擬機(jī)Perm的使用情況 |
- Disk Info信息包括
詳細(xì)|
---|---
/根的使用情況|
/data盤(pán)的使用情況|
- 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ù)庫(kù)卖毁、緩存等
名稱(chēng) | 詳細(xì) |
---|---|
時(shí)間統(tǒng)計(jì)粒度 | 分鐘 |
形狀:圓形 | SOA的一個(gè)服務(wù)或者一個(gè)Web |
形狀:矩形 | 數(shù)據(jù)庫(kù)一個(gè)實(shí)例 |
形狀:菱形 | 緩存一種集群(MemoryCached) |
狀態(tài):紅色 | Error |
狀態(tài):黃色 | Warning |
狀態(tài):綠色 | OK |
浮層 | 點(diǎn)擊節(jié)點(diǎn)可以直接查詢(xún)這一分鐘內(nèi)這個(gè)節(jié)點(diǎn)的詳細(xì)狀態(tài) |
[圖片上傳失敗...(image-c91a1d-1517378766023)]
- 應(yīng)用監(jiān)控大盤(pán)
把所有核心項(xiàng)目用監(jiān)控大盤(pán)方式展示揖曾,能全局看到項(xiàng)目目前問(wèn)題。
[圖片上傳失敗...(image-f67934-1517378766023)]
Metric實(shí)時(shí)報(bào)表
公司核心業(yè)務(wù)指標(biāo)監(jiān)控
“當(dāng)前值”表示當(dāng)前實(shí)際值亥啦,“基線(xiàn)值”表示根據(jù)歷史趨勢(shì)算出來(lái)當(dāng)天的基準(zhǔn)線(xiàn)
[圖片上傳失敗...(image-957773-1517378766023)]
Matrix實(shí)時(shí)報(bào)表
一次請(qǐng)求(URL炭剪、Service)中的調(diào)用鏈路統(tǒng)計(jì),包括遠(yuǎn)程調(diào)用翔脱、sql調(diào)用奴拦、緩存調(diào)用
- Ratio表示訪(fǎng)問(wèn)次數(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ù)包括:訪(fǎng)問(wèn)量,錯(cuò)誤量辣吃,響應(yīng)時(shí)間锉矢,QPS
客戶(hù)端調(diào)用
[圖片上傳失敗...(image-3cd72e-1517378766023)]
服務(wù)端調(diào)用
[圖片上傳失敗...(image-2e5d04-1517378766023)]
Storage實(shí)時(shí)報(bào)表
監(jiān)控一段時(shí)間內(nèi)數(shù)據(jù)庫(kù)、Cache訪(fǎng)問(wèn)情況:各種操作訪(fǎng)問(wèn)次數(shù)齿尽、響應(yīng)時(shí)間、錯(cuò)誤次數(shù)灯节、長(zhǎng)時(shí)間訪(fǎng)問(wèn)量等等循头。
長(zhǎng)時(shí)間訪(fǎng)問(wèn)定義:操作響應(yīng)時(shí)間超過(guò)1秒(數(shù)據(jù)庫(kù)),操作響應(yīng)時(shí)間超過(guò)50毫秒(cache)
-
統(tǒng)計(jì)報(bào)表
- 可以選擇相應(yīng)操作炎疆,查看該操作的各項(xiàng)訪(fǎng)問(wèn)指標(biāo)卡骂。數(shù)據(jù)庫(kù)默認(rèn)操作:select,update,delete,insert;cache默認(rèn)操作:add,get,mGet,remove
- Domain是訪(fǎng)問(wèn)該數(shù)據(jù)庫(kù)或cache的應(yīng)用名形入,All是所有應(yīng)用操作數(shù)據(jù)匯總
- Count: 操作數(shù)全跨;Long:長(zhǎng)時(shí)間操作數(shù);Avg:響應(yīng)時(shí)間亿遂;Error:操作錯(cuò)誤數(shù)
- 點(diǎn)擊查詢(xún)可以在當(dāng)前報(bào)表上過(guò)濾不同操作訪(fǎng)問(wèn)情況浓若,方便分析數(shù)據(jù)
[圖片上傳失敗...(image-b90a6b-1517378766023)]
-
統(tǒng)計(jì)曲線(xiàn)圖
- 圖表展示當(dāng)前應(yīng)用操作數(shù)據(jù)庫(kù)或cache情況
- 圖表展示的操作種類(lèi),與查詢(xún)報(bào)表中的操作對(duì)應(yīng)一致
[圖片上傳失敗...(image-bfe9a-1517378766023)]
埋點(diǎn)方案
spring-boot
與spring-boot的整合就是在spring-boot的項(xiàng)目中添加一個(gè)配置類(lèi)蛇数。配置類(lèi)中配置的是由cat提供的過(guò)濾器
以上的方案只能監(jiān)控URL的執(zhí)行情況挪钓,具體內(nèi)部執(zhí)行情況無(wú)法監(jiān)控。
mybatis
對(duì)于mybatis的監(jiān)控是通過(guò)編寫(xiě)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>
以上方案能夠檢測(cè)到sql的執(zhí)行情況耳舅。
Spring AOP ANNOTATION 監(jiān)控方法執(zhí)行時(shí)間
NOTE : cat不推薦使用aop方法埋點(diǎn)碌上,會(huì)有少量性能損耗,推薦使用api浦徊,這樣type和name以及成功狀態(tài)可以更加靈活馏予。
通過(guò)定義注解與切面來(lá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)對(duì)比
優(yōu)點(diǎn)
- 可擴(kuò)展:支持分布式盔性、跨IDC部署霞丧,橫向擴(kuò)展。
- 高可用:所有應(yīng)用都可以倒下了纯出,需要監(jiān)控還站著蚯妇,告訴它們發(fā)生了什么敷燎。
- 實(shí)時(shí)處理:信息的價(jià)值會(huì)隨時(shí)間銳減,尤其是事故處理過(guò)程中箩言。
- 全量數(shù)據(jù):小概率事件是常態(tài)硬贯,百萬(wàn)分之一的概率,碰到了就是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)的侵入性轮洋,需要用戶(hù)調(diào)用Cat API自定義監(jiān)控打點(diǎn)以及監(jiān)控緯度數(shù)據(jù)制市,側(cè)重于業(yè)務(wù)監(jiān)控 。