文章目录
  1. 1 概述
    1. 1.1 概述
    2. 1.2 依赖环境
  2. 2 准备数据库
    1. 2.1 配置数据库
    2. 2.2 创建数据库
    3. 2.3 创建数据表
  3. 3 部署 CAT 集群
    1. 3.1 下载并构建
    2. 3.2 准备目录
    3. 3.3 配置 datasources.xml
    4. 3.4 配置 server.xml
      1. 3.4.1 节点的职责
      2. 3.4.2 配置文件
      3. 3.4.3 参数详解
    5. 3.5 配置 client.xml
    6. 3.6 启动
    7. 3.7 防火墙放行
    8. 3.8 源码的远程调试
  4. 4 Java 应用的集成
    1. 4.1 本机全局指定 Maven 仓库
    2. 4.2 加入依赖(pom.xml)
    3. 4.3 添加过滤器 CatFilter
      1. 4.3.1 SpringMVC 项目(web.xml)
      2. 4.3.2 SpringBoot 项目(CatFilterConfigure.java)
    4. 4.4 添加注解
  5. 5 更多集成
    1. 5.1 集成 MyBatis
    2. 5.2 集成 Dubbo
    3. 5.3 集成 Logback
  6. 6 管理平台的使用
    1. 6.1 控制台
    2. 6.2 项目配置
    3. 6.3 相关文档
    4. 6.4 实时查看

CAT 是大众点评开源的实时监控系统,它侧重于 Java 应用监控,可与各种流行的中间件框架集成(MVC框架、RPC框架、数据库框架、缓存框架等),实现应用各层级系统的运行状况监控。本文总结了 CAT 服务器集群的搭建、Java 应用的集成、以其控制台的使用。

作者:王克锋
出处:https://kefeng.wang/2018/07/06/tracing-cat/
版权:自由转载-非商用-非衍生-保持署名,转载请标明作者和出处。

1 概述

官网: https://github.com/dianping/cat/

1.1 概述

CAT(Central Application Tracking) 是大众点评开源的一套基于 Java 的实时应用监控平台,主要应用于服务中间件框架(MVC 框架、RPC 框架、持久层框架、分布式缓存框架)的监控(服务端、移动端、前端),为开发和运维提供各项性能指标、健康检查、自动报警等可视化服务。

1.2 依赖环境

本文只实现了本地磁盘文件存储(非大数据)方式。所用环境:

2 准备数据库

只需部署一个 MySQL 实例,CAT 集群中各节点共用。

2.1 配置数据库

增大 MySQL 最大允许的 SQL 字节数(默认为 4M)。

1
2
3
4
### sudo vim /etc/my.cnf
### 修改后重启: sudo systemctl restart mysqld
[mysqld]
max_allowed_packet=64M

2.2 创建数据库

1
2
3
4
DROP DATABASE IF EXISTS cat;
CREATE DATABASE cat CHARACTER SET utf8;
GRANT ALL ON cat.* TO cat_user@'192.168.%' IDENTIFIED BY 'MySQL5.7';
FLUSH PRIVILEGES;

2.3 创建数据表

执行 CAT 脚本: /opt/cat/script/Cat.sql

3 部署 CAT 集群


假设要部署三台: 192.168.126.101/102/103,以 192.168.126.101 为例来说明。

3.1 下载并构建

1
2
3
4
5
6
7
sudo rm -rf /opt/cat
## sudo git clone https://github.com/dianping/cat.git /opt/cat
sudo git clone https://github.com/kefeng-wang/cat.git /opt/cat
sudo chown -R admin:admin /opt/cat
cd /opt/cat
mvn clean install -DskipTests
## 如果遇到“找不到 jar 包”的报错,可从本地仓库删除相应目录,再重试

3.2 准备目录

1
2
3
4
sudo mkdir -p /data/{appdatas,applogs}/cat
## sudo mkdir -p /data/appdatas/cat/bucket ## 会自动创建(本地数据目录)
sudo chown admin:admin /data/{appdatas,applogs}/cat
cp /opt/cat/script/*.xml /data/appdatas/cat/

3.3 配置 datasources.xml

文件 /data/appdatas/cat/datasources.xml,替换中的参数:

  • ${jdbc.url}: 数据库地址。形如 jdbc:mysql://localhost:3306,不要加额外选项
  • ${jdbc.user}: 数据库用户。比如 cat_user
  • ${jdbc.password}: 数据库用户密码。比如 MySQL5.7

3.4 配置 server.xml

3.4.1 节点的职责

  • 控制台 - 提供给业务人员进行数据查看【默认所有的cat节点都可以作为控制台,不可配置】
  • 消费机 - 实时接收业务数据,实时处理,提供实时分析报表【默认所有的cat节点都可以作为消费机,不可配置】
  • 任务机(job-machine) - 做一些离线的任务,合并天、周、月等报表 【可以配置】
  • 告警端(alert-machine) - 启动告警线程,进行规则匹配,发送告警(目前仅支持单点部署)【可以配置】

3.4.2 配置文件

文件 /data/appdatas/cat/server.xml

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="utf-8"?>
<config local-mode="false" hdfs-machine="false" job-machine="false" alert-machine="false">
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
</storage>
<console default-domain="Cat" show-cat-domain="true">
<remote-servers>192.168.126.101:8080,192.168.126.102:8080,192.168.126.103:8080</remote-servers>
</console>
</config>

一台(192.168.126.101) 部署“控制台、告警端、任务机”,可绑定域名以便外部访问: 指定 job-machine=”true” alert-machine=”true”;
两台(192.168.126.102/103),部署为“消费机”: 指定 job-machine=”false” alert-machine=”false”。

3.4.3 参数详解

  • local-mode: 建议在开发环境以及生产环境时,都设置为false
  • hdfs-machine: 定义是否启用 HDFS 存储方式,默认为 false
  • job-machine: 定义当前服务是否为报告工作机(开启生成汇总报告和统计报告的任务,只需要一台服务机开启此功能),默认为 false
  • alert-machine: 定义当前服务是否为报警机(开启各类报警监听,只需要一台服务机开启此功能),默认为 false;
  • storage: 定义数据存储配置信息
  • local-report-storage-time: 定义本地报告文件存放时长,单位为(天)
  • local-logivew-storage-time: 定义本地日志文件存放时长,单位为(天)
  • local-base-dir: 定义本地数据存储目录,建议直接使用/data/appdatas/cat/bucket目录
  • hdfs: 定义HDFS配置信息
  • server-uri: 定义HDFS服务地址
  • console: 定义服务控制台信息
  • remote-servers: 定义HTTP服务列表,(远程监听端同步更新服务端信息即取此值)

3.5 配置 client.xml

文件 /data/appdatas/cat/client.xml,用于指定 CAT 各服务器节点的信息:

  • server.ip: CAT 服务端的 IP;
  • server.port: CAT服务端接受数据的端口(不要修改);
  • server.http-port: Tomcat启动的端口(建议默认)。
1
2
3
4
5
<servers>
<server ip="192.168.126.101" port="2280" http-port="8080" />
<server ip="192.168.126.102" port="2280" http-port="8080" />
<server ip="192.168.126.103" port="2280" http-port="8080" />
</servers>

3.6 启动

1
2
sudo cp -f /opt/cat/cat-home/target/cat-alpha-2.0.0.war $CATALINA_HOME/webapps/cat.war
sudo systemctl restart tomcat

3.7 防火墙放行

1
2
3
### sudo vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
### 重启生效: sudo systemctl restart iptables

3.8 源码的远程调试

如果运行过程中遇到问题,可采用远程调试来跟踪:

  • 项目导入 IDEA:本机下载源码,IDEA 中打开 cat 源码根目录,即可;
  • 远程调试的设置:参考 IDEA 远程调试

4 Java 应用的集成

CAT 技术入门总结-0.1.0.doc

4.1 本机全局指定 Maven 仓库

由于 cat-client 等开发包并未加入 Maven 官方仓库(repo1.maven.org),所以需要指定 cat 专用的远程仓库。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<!-- %MAVEN_HOME%\conf\settings.xml -->

<profiles>
<profile>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<repositories>
<repository>
<id>central</id>
<layout>default</layout>
<url>http://repo1.maven.org/maven2</url>
</repository>
<repository>
<id>unidal.nexus</id>
<url>http://unidal.org/nexus/content/repositories/releases/</url>
</repository>
</repositories>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</profile>
</profiles>

4.2 加入依赖(pom.xml)

1
2
3
4
5
6
7
<dependencies>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>2.0.0</version>
</dependency>
</dependencies>

4.3 添加过滤器 CatFilter

SpringMVC 和 SpringBoot 项目,都是加入过滤器 com.dianping.cat.servlet.CatFilter,具体形式有差别。

4.3.1 SpringMVC 项目(web.xml)

1
2
3
4
5
6
7
8
9
10
<filter>
<filter-name>cat-filter</filter-name>
<filter-class>com.dianping.cat.servlet.CatFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>cat-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>

4.3.2 SpringBoot 项目(CatFilterConfigure.java)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* @author: kefeng.wang
* @date: 2018-07-06 14:00
* @description: 添加过滤器 CatFilter
**/
@Configuration
public class CatFilterConfigure {
@Bean
public FilterRegistrationBean catFilter() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(new CatFilter());
registration.addUrlPatterns("/*");
registration.setName("cat-filter");
registration.setOrder(1);
return registration;
}
}

4.4 添加注解


1
2
3
4
5
6
7
8
9
10
@CatCacheTransaction
public void test() {
}

@ResponseBody
@RequestMapping("/hello")
@CatHttpRequestTransaction(type = "URL", name = "/hello")
public String hello() {
return "hello!";
}

5 更多集成


CAT 框架埋点方案集成

5.1 集成 MyBatis

SpringBoot 集成 Mybatis
参考文档:CAT 集成 MyBatis

5.2 集成 Dubbo

参考文档:CAT 集成 Dubbo,只需在 pom.xml 中添加依赖。

1
2
3
4
5
<dependency>
<groupId>net.dubboclub</groupId>
<artifactId>cat-monitor</artifactId>
<version>0.0.6</version>
</dependency>

5.3 集成 Logback

参考文档:CAT 集成 Logback,logback.xml 中添加配置:

1
2
3
4
5
<appender name="CatAppender" class="com.dianping.cat.logback.CatLogbackAppender"></appender>

<root level="info">
<appender-ref ref="CatAppender" />
</root>

6 管理平台的使用

6.1 控制台

http://192.168.126.101:8080/cat
帐号/密码: catadmin/catadmin

6.2 项目配置

http://192.168.126.101:8080/cat/s/config?op=projects

6.3 相关文档

部署文档: http://192.168.126.101:8080/cat/r/home?op=view&docName=deploy
用户文档:http://192.168.126.101:8080/cat/r/home?op=view&docName=user
告警文档:http://192.168.126.101:8080/cat/r/home?op=view&docName=alert
集成文档:http://192.168.126.101:8080/cat/r/home?op=view&docName=integration
开发文档:http://192.168.126.101:8080/cat/r/home?op=view&docName=develop
设计文档:http://192.168.126.101:8080/cat/r/home?op=view&docName=design
常见问题:http://192.168.126.101:8080/cat/r/home?op=view&docName=problem

6.4 实时查看

http://192.168.126.101:8080/cat/r/t

文章目录
  1. 1 概述
    1. 1.1 概述
    2. 1.2 依赖环境
  2. 2 准备数据库
    1. 2.1 配置数据库
    2. 2.2 创建数据库
    3. 2.3 创建数据表
  3. 3 部署 CAT 集群
    1. 3.1 下载并构建
    2. 3.2 准备目录
    3. 3.3 配置 datasources.xml
    4. 3.4 配置 server.xml
      1. 3.4.1 节点的职责
      2. 3.4.2 配置文件
      3. 3.4.3 参数详解
    5. 3.5 配置 client.xml
    6. 3.6 启动
    7. 3.7 防火墙放行
    8. 3.8 源码的远程调试
  4. 4 Java 应用的集成
    1. 4.1 本机全局指定 Maven 仓库
    2. 4.2 加入依赖(pom.xml)
    3. 4.3 添加过滤器 CatFilter
      1. 4.3.1 SpringMVC 项目(web.xml)
      2. 4.3.2 SpringBoot 项目(CatFilterConfigure.java)
    4. 4.4 添加注解
  5. 5 更多集成
    1. 5.1 集成 MyBatis
    2. 5.2 集成 Dubbo
    3. 5.3 集成 Logback
  6. 6 管理平台的使用
    1. 6.1 控制台
    2. 6.2 项目配置
    3. 6.3 相关文档
    4. 6.4 实时查看