什么是CAT

CAT是由大众点评开源的一款调用链监控系统,基于JAVA开发的。有很多互联网企业在使用,热度非常高。它有一个非常强大和丰富的可视化报表界面,这一点其实对于一款调用链监控系统而来非常的重要。在CAT提供的报表界面中有非常多的功能,几乎能看到你想要的任何维度的报表数据。

特点:聚合报表丰富,中文支持好,国内案例多

国内案例:携程、点评、陆金所


1. CAT报表介绍

CAT支持如下报表:

报表名称 报表内容
Transaction报表 一段代码的运行时间、次数、比如URL/cache/sql执行次数相应时间
Event报表 一段代码运行次数,比如出现一次异常
Problem报表 根据Transaction/Event数据分析出系统可能出现的一次,慢程序
Heartbeat报表 JVM状态信息

Transaction报表:

Event报表

Problem报表

Heartbeat报表

2. 下载与安装

建议用mysql5.x版本,mysql8版本有兼容性问题,下面踩坑

2.1 github源码下载

要安装CAT,首先需要从github上下载最新版本的源码。

官方给出的建议如下:

  • 注意cat的3.0代码分支更新都发布在master上,包括最新文档也都是这个分支
  • 注意文档请用最新master里面的代码文档作为标准,一些开源网站上面一些老版本的一些配置包括数据库等可能遇到不兼容情况,请以master代码为准,这份文档都是美团点评内部同学为这个版本统一整理汇总。内部同学已经核对,包括也验证过,如果遇到一些看不懂,或者模糊的地方,欢迎提交PR。

所以本次学习中将会使用master分支的3.0版本。CAT的官方github地址:

https://github.com/dianping/cat/tree/master

打开页面之后,进行下载源码包。

2.2 模块介绍

在本地用idea加载下载的cat项目,目录结构如下。

  • cat-client: 客户端,上报监控数据
  • cat-consumer: 服务端,收集监控数据进行统计分析,构建丰富的统计报表
  • cat-alarm: 实时告警,提供报表指标的监控告警
  • cat-hadoop: 数据存储,logview 存储至 Hdfs
  • cat-home: 管理端,报表展示、配置管理等

CAT服务端的环境要求如下:

  • Linux 2.6以及之上(2.6内核才可以支持epoll),线上服务端部署请使用Linux环境,Mac以及Windows环境可以作为开发环境,美团点评内部CentOS 6.5
  • Java 6,7,8,服务端推荐使用jdk7的版本,客户端jdk6、7、8都支持
  • MySQL 5.6,5.7,更高版本MySQL都不建议使用,会有兼容性报错,下面踩坑了
  • J2EE容器建议使用tomcat,建议使用推荐版本7.*.或8.0.
  • Hadoop环境可选,一般建议规模较小的公司直接使用磁盘模式,可以申请CAT服务端,500GB磁盘或者更大磁盘,这个磁盘挂载在/data/目录上

2.3 linux安装过程

2.3.1程序对于/data/目录具体读写权限

  1. 要求/data/目录能进行读写操作,如果/data/目录不能写,建议使用linux的软链接链接到一个固定可写的目录。所有的客户端集成程序的机器以及CAT服务端机器都需要进行这个权限初始化。

  2. 此目录会存一些CAT必要的配置文件以及运行时候的数据存储目录。

  3. CAT支持CAT_HOME环境变量,可以通过JVM参数修改默认的路径。

    1
    2
    mkdir /data
    chmod -R 777 /data/

2.3.2配置/data/appdatas/cat/client.xml ($CAT_HOME/client.xml)

1
2
3
mkdir -p /data/appdatas/cat
cd /data/appdatas/cat
vim client.xml

编写程序运行盘下的/data/appdatas/cat/client.xml,代码如下:

1
2
3
4
5
6
7
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<!--下面的IP地址替换为主机的IP地址-->
<server ip="192.168.134.136" port="2280" http-port="8080"/>
</servers>
</config>
1
2
3
4
5
6
7
配置说明:
* mode : 定义配置模式,固定值为client;--暂未使用
* servers : 定义多个服务端信息;
* server : 定义某个服务端信息;
* ip : 配置服务端(cat-home)对外IP地址
* port : 配置服务端(cat-home)对外TCP协议开启端口,固定值为2280;
* http-port : 配置服务端(cat-home)对外HTTP协议开启端口, 如:tomcat默认是8080端口,若未指定,默认为8080端口;

2.3.3配置/data/appdatas/cat/datasources.xml($CAT_HOME/datasources.xml)

1
vim datasources.xml

代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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:3307/cat]]></url> <!-- 请替换为真实数据库URL及Port -->
<user>root</user> <!-- 请替换为真实数据库用户名 -->
<password>123456</password> <!-- 请替换为真实数据库密码 -->
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>

2.3.4创建数据库

docker安装mysql,重新导入脚本,tomcat重新启动

1
2
3
4
//找到mysql5.7版本
docker pull mysql:5.7
//之前装过mysql,所以这里用3307端口
docker run -itd --name mysql5.7 -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

创建cat数据库链接,导入初始化sql脚本。

在cat项目中,找到script目录下面的sql脚本,进行执行。

执行完后,发现会生成26张表

2.3.5安装tomcat启动项目

将打好的war包放入tomcat的webapp目录下,启动tomcat


3 服务端配置

配置链接:http://{ip:port}/cat/s/config?op=serverConfigUpdate

访问后,将里面127.0.0.1 替换成服务器地址。

配置链接:http://{ip:port}/cat/s/config?op=routerConfigUpdate

访问后,将里面127.0.0.1 替换成服务器地址。