简介
CAT基于Java开发的实时应用监控平台,包括实时应用监控,业务监控。
CAT支持的监控消息类型包括:
- Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数。
- Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小。
- Heartbeat 表示程序内定期产生的统计信息, 如CPU%, MEM%, 连接池状态, 系统负载等。
- Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟。
- Trace 用于记录基本的trace信息,类似于log4j的info信息,这些信息仅用于查看一些相关信息
Logview
CAT监控系统将每次URL、Service的请求内部执行情况都封装为一个完整的消息树、消息树可能包括Transaction、Event、Heartbeat、Metric和Trace信息。
可视化Logview
[图片上传失败...(image-9b83ca-1517378766023)]
分布式Logview树【一台机器调用另外一台机器】
[图片上传失败...(image-538c7d-1517378766023)]
Transaction
一段代码运行时间、次数,比如URL、Cache、SQL执行次数和响应时间
Transaction实时报表
- Type统计界面
[图片上传失败...(image-f87703-1517378766023)]
- Name统计界
[图片上传失败...(image-c16591-1517378766023)]
Transaction历史统计报表
- Transaction\Event月报表支持每天的趋势图,以天为单位,如下图
[图片上传失败...(image-289e1b-1517378766023)] - Transaction\Event报表日报表、周报表支持同比、环比对比,时间精度为5分钟
[图片上传失败...(image-b3ed04-1517378766023)]
Even
一行代码运行次数,比如出现一个异常
Event实时报表
Type统计界面
[图片上传失败...(image-687c55-1517378766023)]Name统计界面
[图片上传失败...(image-ad3617-1517378766023)]一个小时内详细指标统计
[图片上传失败...(image-d1697d-1517378766023)]
Event历史报表
- Transaction\Event月报表支持每天的趋势图,以天为单位,如下图
[图片上传失败...(image-51d8ca-1517378766023)] - Transaction\Event报表日报表、周报表支持同比、环比对比,时间精度为5分钟
[图片上传失败...(image-bf44fa-1517378766023)]
Problem
根据Transaction\Event数据分析出来系统可能出现的异常,包括访问较慢的程序,
Problem实时报表
Problem的类型如下:
代码 | 详解 |
---|---|
error | Log4j记录的错误异常 |
call | 表示在远程调用中transaction中出错 |
sql | 表示在数据库的调用中transaction中出错 |
url | 表示在url请求中调用transaction中出错 |
failure | 业务程序Transaction的失败(除了call\sql\url之外) |
heartbeat | 心跳消息 |
long-url | 执行慢的url请求(可以进行进行时间筛选) |
long-service | 执行慢的service请求(可以进行进行时间筛选) |
long-sql | 执行慢的sql请求(可以进行进行时间筛选) |
[图片上传失败...(image-a87ac4-1517378766023)]
点击机器IP,进入某一台机器出现的具体问题,这个包括了All中出现的所有错误统计之外,还增加了以分钟和线程为单位的错误分布图,具体如下:
[图片上传失败...(image-8fda4d-1517378766023)]
Problem历史报表
- 在选择了特定的域、报表类型、时间和IP之后,点击[:: show ::] 查看某一Type下的Problem出现次数的分布图。(当前这一天、上一天、上周这一天)
[图片上传失败...(image-8df6a1-1517378766023)] - 进一步,可以查看该Type下,某个Status的Problem出现次数的分布图。(当前这一天、上一天、上周这一天)
[图片上传失败...(image-eec2c3-1517378766023)]
Heartbeat实时报表
JVM内部一些状态信息,Memory,Thread等
- Thread信息包括
名称 | 详细 |
---|---|
Active Thread | 系统当前活动线程 |
Daemon Thread | 系统后台线程 |
Total Started Thread | 系统总共开启线程 |
Started Thread | 系统每分钟新启动的线程 |
Cat Started Thread | 系统中CAT客户端启动线程 |
Pigeon Started Thread | 系统中Pigeon客户端启动线程数 |
- System Info信息包括
名称 | 详细 |
---|---|
NewGc Count | 新生代GC次数 |
OldGc Count | 旧生代GC次数 |
System Load Average | 系统Load详细信息 |
- Memery Info信息包括
名称 | 详细 |
---|---|
Memory Free | 系统memoryFree情况 |
Heap Usage | Java虚拟机堆的使用情况 |
None Heap Usage | Java虚拟机Perm的使用情况 |
- Disk Info信息包括
详细|
---|---
/根的使用情况|
/data盘的使用情况|
- Cat Info信息包括
详细|
---|---
Cat每分钟产生消息数|
Cat每分钟丢掉的消息数|
Cat每分钟产生消息大小|
Dependency实时报表
系统之间实时调用数据信息,包括远程服务、数据库、缓存等
名称 | 详细 |
---|---|
时间统计粒度 | 分钟 |
形状:圆形 | SOA的一个服务或者一个Web |
形状:矩形 | 数据库一个实例 |
形状:菱形 | 缓存一种集群(MemoryCached) |
状态:红色 | Error |
状态:黄色 | Warning |
状态:绿色 | OK |
浮层 | 点击节点可以直接查询这一分钟内这个节点的详细状态 |
[图片上传失败...(image-c91a1d-1517378766023)]
- 应用监控大盘
把所有核心项目用监控大盘方式展示,能全局看到项目目前问题。
[图片上传失败...(image-f67934-1517378766023)]
Metric实时报表
公司核心业务指标监控
“当前值”表示当前实际值,“基线值”表示根据历史趋势算出来当天的基准线
[图片上传失败...(image-957773-1517378766023)]
Matrix实时报表
一次请求(URL、Service)中的调用链路统计,包括远程调用、sql调用、缓存调用
- Ratio表示访问次数,Min是最少,Max是最大,Avg是平均
- Cost表示时间消耗,Min是最少,Max是最大,Avg是平均
[图片上传失败...(image-cd39f1-1517378766023)]
调用链路排行
包括远程调用、sql调用、缓存调用最多排行
[图片上传失败...(image-1c669-1517378766023)]
Cross实时报表
SOA系统用关于RPC调用的报表(支持粒度服务、IP、方法)
统计参数包括:访问量,错误量,响应时间,QPS
客户端调用
[图片上传失败...(image-3cd72e-1517378766023)]
服务端调用
[图片上传失败...(image-2e5d04-1517378766023)]
Storage实时报表
监控一段时间内数据库、Cache访问情况:各种操作访问次数、响应时间、错误次数、长时间访问量等等。
长时间访问定义:操作响应时间超过1秒(数据库),操作响应时间超过50毫秒(cache)
-
统计报表
- 可以选择相应操作,查看该操作的各项访问指标。数据库默认操作:select,update,delete,insert;cache默认操作:add,get,mGet,remove
- Domain是访问该数据库或cache的应用名,All是所有应用操作数据汇总
- Count: 操作数;Long:长时间操作数;Avg:响应时间;Error:操作错误数
- 点击查询可以在当前报表上过滤不同操作访问情况,方便分析数据
[图片上传失败...(image-b90a6b-1517378766023)]
-
统计曲线图
- 图表展示当前应用操作数据库或cache情况
- 图表展示的操作种类,与查询报表中的操作对应一致
[图片上传失败...(image-bfe9a-1517378766023)]
埋点方案
spring-boot
与spring-boot的整合就是在spring-boot的项目中添加一个配置类。配置类中配置的是由cat提供的过滤器
以上的方案只能监控URL的执行情况,具体内部执行情况无法监控。
mybatis
对于mybatis的监控是通过编写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的执行情况。
Spring AOP ANNOTATION 监控方法执行时间
NOTE : cat不推荐使用aop方法埋点,会有少量性能损耗,推荐使用api,这样type和name以及成功状态可以更加灵活。
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()---");
}
}
优缺点对比
优点
- 可扩展:支持分布式、跨IDC部署,横向扩展。
- 高可用:所有应用都可以倒下了,需要监控还站着,告诉它们发生了什么。
- 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
- 全量数据:小概率事件是常态,百万分之一的概率,碰到了就是100%。
- 高吞吐:要想还原真相,需要全方位的监控和度量,必须要有超强的处理吞吐能力。
- 故障容忍:CAT本身故障不应该影响业务正常运转,CAT挂了,应用不该受影响,只是监控能力暂时减弱。
- 不保证可靠:允许消息丢失,这是一个很重要的trade-off,虽然目前CAT可以做到4个9的可靠性。
缺点
- 并不能直接识别应用系统框架服务,这款产品具有很强的侵入性,需要用户调用Cat API自定义监控打点以及监控纬度数据,侧重于业务监控 。