前言: CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring、MyBatis、Dubbo 等框架以及Log4j 等结合,支持PHP、C++、Go等多语言应用,基本接入了美团点评上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团点评各业务线提供系统的性能指标、健康状况、监控告警等,在微服务监控领域也是非常有用的一套组件。支撑这美团每天450亿的消息,50TB的数据监控,应用于 7000+应用服务器,2000+的业务,单台机器能15W qps,15台CAT物理集群,有着极高的性能,同时CAT支持丰富的报表,架构拥有灵活的扩展性,用户可以定制自己的监控、报表需求,本文将就CAT的部署、架构源码以及多语言支持等方面展开剖析。CAT在携程、陆金所、猎聘网、找钢网、平安银行等多家互联网公司生产环境应用。
目录:
1.1 介绍
1.2 背景介绍
1.3 Cat系统的特性
1.4 消息树
1.5 CAT服务端部署
1.6 CAT客户端Demo
(二) CAT服务端初始化
2.1 Cat模块
2.2 Cat-servlet初始化
2.3 plexus - IOC容器
2.4 模块的加载 - 模型模式
2.5 cat-home的setup
2.6 TcpSocketReceiver--- netty reactor 模式的应用
2.7 消息的解码
(三) CAT客户端原理
3.1 cat客户端部分核心类
3.2 消息的组织 - 消息树
3.3 客户端的初始化
3.4 消息生产 -- 入栈
3.5 Context 线程本地变量
3.6 Transaction事务的开启
3.7 其他类型消息组合
3.8 消息的完成-出栈
3.9 消息的发送-队列化
3.10 消息的序列化
3.11 MessageId的设计
(四) 服务端消息分发
4.1 分发架构
4.2 分析管理器的初始化
4.3 消费者与周期管理器的初始化
4.4 什么是周期?
4.5 周期任务-任务队列
4.6 消息分发
4.7 周期策略
(五) 配置与数据库操作
5.1 CAT配置
5.2 代码自动生成
5.3 数据库操作
5.4 数据库连接管理
(六) 消息分析器与报表(一)
6.1 消息分析器的构建
6.2 TopAnalyzer
6.3 EventAnalyzer - 事件发生次数分析
6.4 MetricAnalyzer - 业务分析
6.5 ProblemAnalyzer -异常分析
6.6 TransactionAnalyzer - 事务分析
(七)消息分析器与报表(二)
7.1 CrossAnalyzer-调用链分析
7.2 StorageAnalyzer --数据库/缓存分析
7.3 StateAnalyzer -- CAT状态分析
7.4 HeartbeatAnalyzer -- 心跳分析
7.5 DumpAnalyzer -- 原始消息LogView存储
7.6 自定义分析器与报表
(八) 报表持久化
8.1 周期结束
8.2 分析器的结束 -- 报表持久化
8.3 报表预处理
8.4 报表的文件存储 -- 重入锁
8.5 报表的数据库存储
8.6 定时任务
(九) 管理平台MVC框架
9.1 Servlet容器与请求生命周期
9.2 页面路由初始化
9.3 请求处理流程
(十)与JAVA框架的集成
10.1 与Spring MVC集成
10.2 与Spring Boot 集成
10.3 与Spring Cloud 集成
10.4 与dubbo集成
10.5 与MyBatis集成
10.6 与Log4j集成
(十一) 其他语言支持
11.1 PHP语言
11.2 C++语言
11.3 LUA语言
11.4 Go语言
11.5 Python语言
11.6 Node.js语言
11.7 Android埋点
11.8 Object C -- IOS 埋点
(十二) 报警与监控提醒
12.1 短信通知
12.2 邮件通知
(十三) CAT与实时计算
13.1 hadoop模块
13.2 spark实时计算模块
介绍
大众点评CAT系统原型和理念来源于eBay的CAL的系统,CAT系统第一代设计者吴其敏在eBay工作长达十几年,对CAL系统有深刻的理解。CAT不仅增强了CAL系统核心模型,还添加了更丰富的报表。自2014年开源以来,CAT在携程、陆金所、猎聘网、找钢网等多家互联网公司生产环境应用。
CAT是一个实时和接近全量的监控系统,它侧重于对Java应用的监控,除了与点评RPC组件融合的很好之外,他将会能与Spring、MyBatis、Dubbo 等框架以及Log4j 等结合,不久将会支持PHP、C++、Go等多语言应用,基本接入了美团点评上海侧所有核心应用。目前在中间件(MVC、RPC、数据库、缓存等)框架中得到广泛应用,为美团点评各业务线提供系统的性能指标、健康状况、监控告警等,在微服务监控领域也是非常有用的一套组件。
在详细了解CAT的整体设计细节之后,我们可以在CAT基础之上轻松扩展我们自己的监控和数据收集模块。
背景介绍
CAT整个产品研发是从2011年底开始的,当时正是大众点评App Net迁移Java的核心起步阶段。当初大众点评App已经有核心的基础中间件、RPC组件Pigeon、统一配置组件lion。整体Java迁移已经在服务化的路上。随着服务化的深入,整体Java在线上部署规模逐渐变多,同时,暴露的问题也越来越多。典型的问题有:
-
大量报错,特别是核心服务,需要花很久时间才能定位。
-
异常日志都需要线上权限登陆线上机器排查,排错时间长。
-
有些简单的错误定位都非常困难(一次将线上的库配置到了Beta,花了整个通宵排错)。
-
很多不了了之的问题都怀疑是网络问题(从现在看,内网真的很少出问题)。
虽然那时候也有一些简单的监控工具(比如Zabbix,自己研发的Hawk系统等),可能单个工具在某方面的功能还不错,但整体服务化水平参差不齐、扩展能力相对较弱,监控工具间不能互通互联,使得查找问题根源基本都需要在多个系统之间切换,有时候真的是靠“人品”才能找出根源。适逢吴其敏从eBay加入大众点评成为首席架构师,eBay的CAL系统在内部非常成功,就在这样天时地利与人和的情况下,我们开始研发了大众点评App第一代监控系统——CAT。
Cat系统的特性
- 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
- 全量数据:最开始的设计目标就是全量采集,全量的好处有很多。
- 高可用:所有应用都倒下了,需要监控还站着,并告诉工程师发生了什么,做到故障还原和问题定位。
- 故障容忍:CAT本身故障不应该影响业务正常运转,CAT挂了,应用不该受影响,只是监控能力暂时减弱。
- 高吞吐:要想还原真相,需要全方位地监控和度量,必须要有超强的处理吞吐能力。
- 可扩展:支持分布式、跨IDC部署,横向扩展的监控系统。
- 不保证可靠:允许消息丢失,这是一个很重要的trade-off,目前CAT服务端可以做到4个9的可靠性,可靠系统和不可靠性系统的设计差别非常大。
C