# 一、简介

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的第一层分类的视图,可以知道这段时间里面一个分类运行的次数,平均响应时间,延迟,以及分位线。

Cat

【1】项目选择:输入项目名[或者项目应用ID],查看项目数据。
【2】时间选择:通过右上角时间导航栏选择时间:点击[+1h]/[-1h]切换时间为下一小时/上一小时等;点击[now]回到当前小时。CAT默认是以一小时为统计时间跨度,点击[切到历史模式],更改查看报表的时间跨度:默认是小时模式;切换为历史模式后,右侧快速导航,变为month(月报表)、week(周报表)、day(天报表),可以点击进行查看,注意报表的时间跨度会有所不同。
【3】机器分组:CAT可以将若干个机器,作为一个分组进行数据统计。默认会有一个All分组,代表所有机器的统计数据,即集群统计数据。如果有多个集群时,会展示不同的集群名称,以及所属的机器IP。
【4】所有Type汇总表格,第一层分类(Type),点击后查看第二级分类(称为name)数据:
 ■ Transaction的埋点的TypeName由业务自己定义,当打点了Cat.newTransaction(type, name)时,第一层分类是type,第二级分类是name
 ■ 第二级分类数据叫是统计相同type下的所有name数据,数据均与第一级type一样的展示风格

Cat

 ■ Transaction的5级查询体系。埋点时,合理的定义TypeName

Cat

【5】单个Type指标图表: 点击show,查看Type所有name分钟级统计,如下图:

Cat Cat

【6】指标说明:显示的是小时粒度第一级分类(type)的次数、错误数、失败率等数据。
【7】样本logview:L代表logview,为一个样例的调用链路。一般关联的是日志系统。 例如,URL接入埋点。可看到URL响应时间为19ms。其中, t为transaction开始, T为结束。
Cat

【9】分位线说明:小时粒度的时间第一级分类(type)相关统计
 95line表示95%的请求的响应时间比参考值要小,999line表示99.9%的响应时间比参考值要小,95line以及99line,也称之为tp95、tp99。

# Event

监控一段代码运行次数: 例如记录程序中一个事件记录了多少次,错误了多少次。Event报表的整体结构与Transaction报表几乎一样,无耗时概念。

应用启动后默认会打点的部分:

打点 来源组件 描述
System cat-client 上报监控数据的打点信息、Reboot重启等

报表介绍
第一级分类(Type)统计界面: Type统计界面展示了一个Event的第一层分类的视图,Event相对于Transaction少了运行时间统计。可以知道这段时间里面一个分类运行的次数,失败次数,失败率,采样logViewQPS
第二级分类(Name)统计界面: 第二级分类在Type统计界面中点击具体的Type进入,展示的是相同type下所有的name数据,可以理解为某type下更细化的分类。

Type统计界面详细介绍

Cat

所有Type汇总报表
第一层分类(Type),点击查看第二级分类(称为name)数据: Event的埋点的TypeName由业务自己定义,当打点了Cat.newEvent(type, name)时,第一层分类是type,第二级分类是name
第二级分类数据叫是统计相同type下的所有name数据,如下图,数据均与第一级type一样的展示风格:

Cat

指标说明 显示的是小时粒度第一级分类(type)的次数、错误数、失败率等数据。

Cat

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;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

# Problem

Problem记录整个项目在运行过程中出现的问题,包括一些异常、错误、访问较长的行为。Problem报表是由logview存在的特征整合而成,方便用户定位问题。

报表介绍

Cat

来源: 业务代码显示调用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),代表错误类型,比如errorlong-url等;第二级分类(称为Status),对应具体的错误,比如一个异常类名等。
错误数分布: 点击typestatusshow,分别展示typestatus的分钟级错误数分布:

Cat

链路sample: 原始日志查看里一般会有出错的整个链路及错误堆栈,这里默认展示60条log。
自定义阈值: 对于较长耗时,也认为是problem错误,cat可以选择不同的耗时阈值。例如:接入cat-filter后,此处可以选择long-url不同的阈值,筛选不同的长URL

Cat

Exception统计

Cat

为避免CAT统计不准,在Clogging
 ■ 请不要把错误消息,记成INFO日志
 ■ 请不要把普通消息,记成ERROR/FATAL日志
 ■ 最好记成Exception对象,而不是字符串

# Heartbeat

报表介绍Heartbeat报表是CAT客户端,以一分钟为周期,定期向服务端汇报当前运行时候的一些状态。有Exception统计,URL访问量统计[logview展现了一次URL访问的内部流程],最慢的URL访问,SQL,服务调用...统计。

Cat

机器分组: 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 使用手册链接

(adsbygoogle = window.adsbygoogle || []).push({});