开发中Cat是什么?
Cat
[Central Application Tracking
]是基于Java
开发的分布式实时监控系统,有一个非常强大和丰富的可视化报表界面,在Cat
提供的报表界面中有非常多的功能,几乎能看到你想要的任何维度的报表数据。缺点就是集成的时候具有代码的侵入性。在中间件(RPC、数据库、缓存、MQ 等)框架中得到广泛应用,为各业务线提供系统的性能指标、健康状况、实时告警等服务。开源地址链接
CAT
部署信息: 15台 CAT物理监控集群,单台机器支持15w QPS,2000+业务应用,7000+应用服务器,50TB消息,每天450亿消息。
Cat
支持如下报表:
报表 | 说明 |
---|---|
Transaction | 一段代码运行时间、次数,比如 URT、Cache、SQL执行次数和响应时间 |
Event | 一段代码的执行次数,比如异常等 |
Problem | 系统可能出现的异常,包括访问较慢的程序等 |
Hearbeat | JVM内部一些状态信息,Memory,Thread等 |
Metric | 业务监控报表 |
Matrix | 一个请求调用链路统计 |
RPC | SOA系统用关于RPC调用的报表 |
Cache | 缓存使用分析统计 |
Dependency | 系统之间实时调用依赖关系,包括远程服务、数据库、缓存等 |
… | … |
报表详情
Transaction
监控程序中的一个步骤,有开始、结束。消耗一段时间。Type
统计界面展示了一个Transaction
的第一层分类的视图,可以知道这段时间里面一个分类运行的次数,平均响应时间,延迟,以及分位线。
1】项目选择:输入项目名[或者项目应用ID],查看项目数据。
【2】时间选择:通过右上角时间导航栏选择时间:点击[+1h]/[-1h]切换时间为下一小时/上一小时等;点击[now]回到当前小时。CAT默认是以一小时为统计时间跨度,点击[切到历史模式],更改查看报表的时间跨度:默认是小时模式;切换为历史模式后,右侧快速导航,变为month(月报表)、week(周报表)、day(天报表),可以点击进行查看,注意报表的时间跨度会有所不同。
【3】机器分组:CAT可以将若干个机器,作为一个分组进行数据统计。默认会有一个All分组,代表所有机器的统计数据,即集群统计数据。如果有多个集群时,会展示不同的集群名称,以及所属的机器IP。
【4】所有Type
汇总表格,第一层分类(Type),点击后查看第二级分类(称为name)数据:
■ Transaction
的埋点的Type
和Name
由业务自己定义,当打点了Cat.newTransaction(type, name)
时,第一层分类是type
,第二级分类是name
。
■ 第二级分类数据叫是统计相同type
下的所有name
数据,数据均与第一级type
一样的展示风格
■ Transaction
的5级查询体系。埋点时,合理的定义Type
和Name
【5】单个Type指标图表: 点击show
,查看Type
所有name
分钟级统计,如下图:
【6】指标说明:显示的是小时粒度第一级分类(type)的次数、错误数、失败率等数据。
【7】样本logview:L代表logview,为一个样例的调用链路。一般关联的是日志系统。 例如,URL接入埋点。可看到URL响应时间为19ms。其中, t为transaction开始, T为结束。
【9】分位线说明:小时粒度的时间第一级分类(type)相关统计
95line表示95%的请求的响应时间比参考值要小,999line表示99.9%的响应时间比参考值要小,95line以及99line,也称之为tp95、tp99。
Event
监控一段代码运行次数: 例如记录程序中一个事件记录了多少次,错误了多少次。Event
报表的整体结构与Transaction
报表几乎一样,无耗时概念。
应用启动后默认会打点的部分:
打点 | 来源组件 | 描述 |
---|---|---|
System | cat-client | 上报监控数据的打点信息、Reboot重启等 |
报表介绍
第一级分类(Type)统计界面: Type统计界面展示了一个Event
的第一层分类的视图,Event
相对于Transaction
少了运行时间统计。可以知道这段时间里面一个分类运行的次数,失败次数,失败率,采样logView
,QPS
。
第二级分类(Name)统计界面: 第二级分类在Type
统计界面中点击具体的Type
进入,展示的是相同type
下所有的name
数据,可以理解为某type
下更细化的分类。
Type统计界面详细介绍
所有Type汇总报表
第一层分类(Type),点击查看第二级分类(称为name
)数据: Event
的埋点的Type
和Name
由业务自己定义,当打点了Cat.newEvent(type, name)
时,第一层分类是type
,第二级分类是name
。
第二级分类数据叫是统计相同type
下的所有name
数据,如下图,数据均与第一级type
一样的展示风格:
指标说明 显示的是小时粒度第一级分类(type)的次数、错误数、失败率等数据。
1、指标说明: 显示的是小时粒度第一级分类type
的次数、错误数、失败率等数据。
2、样本logview sample
中是采样的调用链路对应的MessageTree
信息
Code 说明: 想记录在某个方法中一个条件分支中分支1中的函数调用了多少次,分支2中的函数调用了多少次,又失败了多少次。
public void testEvent() {
for (int i = 0; i < 100; i++) {
Transaction t = Cat.newTransaction("Trans", "test");
for (int j = 0; j < 6000; j++) {
if (j % 3 == 0) {
func1();
Cat.logEvent("Func", "Func1");
} else {
boolean result = func2();
Event e = Cat.newEvent("Func", "Func2");
if (result) {
e.setSuccessStatus();
} else {
e.setStatus("False");
}
e.complete();
}
}
t.setStatus(Transaction.SUCCESS);
t.complete();
}
}
private void func1() {
}
private boolean func2() {
Random random = new Random();
int res = random.nextInt(100);
if (res % 2 == 0)
return false;
return true;
}
Problem
Problem
记录整个项目在运行过程中出现的问题,包括一些异常、错误、访问较长的行为。Problem
报表是由logview
存在的特征整合而成,方便用户定位问题。
报表介绍
来源: 业务代码显示调用Cat.logError(e) API进行埋点,具体埋点说明可查看埋点文档。与LOG框架集成,会捕获log日志中有异常堆栈的exception日志。
■ long-url
: 表示Transaction
打点URL
的慢请求
■ long-sql
: 表示Transaction
打点SQL
的慢请求
■ long-service
: 表示Transaction
打点Service
或者PigeonService
的慢请求
■ long-call
: 表示Transaction
打点Call
或者PigeonCall
的慢请求
■ long-cache
: 表示Transaction
打点Cache
开头的慢请求
所有错误汇总报表: 第一层分类(Type),代表错误类型,比如error
、long-url
等;第二级分类(称为Status),对应具体的错误,比如一个异常类名等。
错误数分布: 点击type
和status
的show
,分别展示type
和status
的分钟级错误数分布:
链路sample
: 原始日志查看里一般会有出错的整个链路及错误堆栈,这里默认展示60条log。
自定义阈值: 对于较长耗时,也认为是problem
错误,cat
可以选择不同的耗时阈值。例如:接入cat-filter
后,此处可以选择long-url
不同的阈值,筛选不同的长URL
。
Exception
统计
为避免CAT
统计不准,在Clogging
中:
■ 请不要把错误消息,记成INFO
日志
■ 请不要把普通消息,记成ERROR/FATAL
日志
■ 最好记成Exception
对象,而不是字符串
Heartbeat
报表介绍: Heartbeat
报表是CAT
客户端,以一分钟为周期,定期向服务端汇报当前运行时候的一些状态。有Exception
统计,URL
访问量统计[logview
展现了一次URL
访问的内部流程],最慢的URL
访问,SQL
,服务调用…统计。
机器分组: CAT以机器为粒度展示心跳报表;选择一个具体的机器IP,查看该机器的心跳状态。
指标分组: 心跳指标分组,比如系统指标(System Info)、GC指标(GC Info)、JVM指标(JVMHeap Info)等。
指标趋势图: 以分钟为粒度,展示一个具体指标值的时间趋势。
监控指标介绍
JVM相关指标 以下所有的指标统计都是1分钟内的值,cat最低统计粒度是一分钟。
JVM GC 相关指标 | 描述 |
---|---|
NewGc Count / PS Scavenge Count | 新生代GC次数 |
NewGc Time / PS Scavenge Time | 新生代GC耗时 |
OldGc Count | 老年代GC次数 |
PS MarkSweepTime | 老年代GC耗时 |
Heap Usage | Java虚拟机堆的使用情况 |
None Heap Usage | Java虚拟机Perm的使用情况 |
JVM Thread 相关指标 | 描述 |
---|---|
Active Thread | 系统当前活动线程 |
Daemon Thread | 系统后台线程 |
Total Started Thread | 系统总共开启线程 |
Started Thread | 系统每分钟新启动的线程 |
CAT Started Thread | 系统中CAT客户端启动线程 |
可以参考
java.lang.management.ThreadInfo
的定义
System 相关指标 | 描述 |
---|---|
System Load Average | 系统Load详细信息 |
Memory Free | 系统memoryFree情况 |
FreePhysicalMemory | 物理内存剩余空间 |
/ Free | /根的使用情况 |
/data Free | /data盘的使用情况 |
Cross 报表
某一个应用调用了哪些别人的服务。提供了哪些服务被别人调用。
资料
Cat 使用手册链接