CAT链路监控
背景:从单体架构到微服务架构的演变, 一个业务请求往往会流转多个服务, 大型互联网产品服务架构尤为复杂,腾讯的抢红包服务, 阿里的交易支付服务, 可能就流转成百上千个服务节点, 面对众多服务, 如何监控管理? 服务请求一旦出现问题, 如何快速定位问题? 如何保障服务的高可用, 做到全面的监控与预警? 如何分析统计服务的运行状况? 看下链路监控产品如何解决这些问题。
CAT简介
- CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
- CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
- CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。
CAT优势
- 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中。
- 全量数据:全量采集指标数据,便于深度分析故障案例。
- 高可用:故障的还原与问题定位,需要高可用监控来支撑。
- 故障容忍:故障不影响业务正常运转、对业务透明。
- 高吞吐:海量监控数据的收集,需要高吞吐能力做保证。
- 可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统。
- 报表丰富: 帮助管理人员从各个角度了解系统的整体状况。
CAT报表
- 报错统计报表
- 业务统计报表
- LOGVIEW统计
- 可视化LOGVIEW
- 应用类型报表
报表名称 | 报表用途 |
---|---|
Transaction实时报表 | 一段代码的运行时间/次数/分布、比如URL/Cache/SQL执行次数和响应时间 |
Event实时报表 | 事件产生的次 数/分布,比如出现一个异常 |
Problem实时报表 | 根据Transaction/Event数据分析出来的系统出现的异常,包括访问较慢的程序等 |
Heartbeat实时报表 | JVM内部一些状态信息,Load/Memory/GC/Thread等 |
Metric实时报表 | 业务指标采集监控报表 |
Matrix实时报表 | 一个请求调用分布统计(一次请求中调用多少次SQL/RPC/Cache等),可评估应用设计的合理性 |
CAT链路监控原理
链路监控机制
CAT架构设计
整体设计
简单即是最好原则设计, 主要分为三个模块cat-client,cat-consumer,cat-home。
- cat-client 提供给业务以及中间层埋点的底层sdk。
- cat-consumer 用于实时分析从客户端的提供的数据。
- cat-home 作为用户提供给用户的展示的控制端。
客户端设计
客户端设计是CAT系统设计中最为核心的一个环节,客户端要求是做到API简单、高可靠性能、无论在任何场景下客户端都不能影响各业务服务的性能(监控只是公司核心业务流程一个旁路环节)
服务端单机cat-consumer的整体架构:
当某个报表处理器处理来不及时候,比如Transaction报表处理比较慢,可以通过配置支持开启多个Transaction处理线程,并发消费消息。
CAT安装配置
不建议在Windows下部署, 设计上对window支持不好, 容易出各种问题。
- 下载CAT源码, 如GIT方式过慢, 可用Download Zip 方式打包下载。
- 构建CAT服务war包将MAVEN加入到系统PATH, 执行mvn命令:
mvn clean install -Dmaven.test.skip=true
- 创建数据库
先创建CAT数据库, 采用utf8mb4字符集, 再导入{CAT_SRC}/script/目录下的CatApplication.sql脚本。
- 配置修改
运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限, 如果程序是在E盘, 则需创建e:/data/appdatas/cat目录
- 配置/data/appdatas/cat/client.xml
<?xml version="1.0" encoding="utf-8"?>
<config mode="client"><servers><server ip="127.0.0.1" port="2280" http-port="8080"/></servers>
</config>
- 配置/data/appdatas/cat/datasources.xml
<?xml version="1.0" encoding="utf-8"?><data-sources><data-source id="cat"><maximum-pool-size>3</maximum-pool-size><connection-timeout>1s</connection-timeout><idle-timeout>10m</idle-timeout><statement-cache-size>1000</statement-cache-size><properties><driver>com.mysql.jdbc.Driver</driver><url><![CDATA[jdbc:mysql://127.0.0.1:3306/cat]]></url> <!-- 请替换为真实数据库URL及Port --><user>root</user> <!-- 请替换为真实数据库用户名 --><password>root</password> <!-- 请替换为真实数据库密码 --><connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties></properties></data-source>
</data-sources>
- TOMCAT配置
修改tomcat conf 目录下 server.xml, 检查好端口没有被其他程序占用。
<Connector port="8080" protocol="HTTP/1.1"URIEncoding="utf-8" connectionTimeout="20000"redirectPort="8443" /> <!-- 增加 URIEncoding="utf-8" -->
如果内存不足, 需作调整 linux
CATALINA_OPTS="-Xms1024m -Xmx2048m -Xss1024K -XX:MetaspaceSize=512m -XX:MaxMetaspaceSize=1024m"
- 启动
-
执行start.sh
-
打开控制台地址: http://127.0.0.1:8080/cat/s/config?op=routerConfigUpdate
-
默认用户名:admin 默认密码:admin
CAT集群部署
不作详细介绍, 具体可参考官方文档: CAT集群部署
总结:CAT的单机部署, 虚拟机下, 注意绑定的IP, TOMCAT下注意采用UTF8编码, 防止乱码, 如本机内存有限, 可以将CAT占用内存调小些。