美团 CAT 集群的搭建与集成
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 依赖环境
本文只实现了本地磁盘文件存储(非大数据)方式。所用环境:
- CentOS: 7.4.1708(内核 3.10.0),安装方法
- Java: 1.8.0,安装方法
- Maven: 3.5.4,安装方法
- MySQL: 5.7.20,安装方法
- Tomcat: 7.0.90,安装方法
- Git Client: 1.8.3.1(版本关系不大),安装方法
- Hadoop(可选): 小规模公司可采用磁盘模式,大规模公司采用Hadoop。
2 准备数据库
只需部署一个 MySQL 实例,CAT 集群中各节点共用。
2.1 配置数据库
增大 MySQL 最大允许的 SQL 字节数(默认为 4M)。
### sudo vim /etc/my.cnf
### 修改后重启: sudo systemctl restart mysqld
[mysqld]
max_allowed_packet=64M
2.2 创建数据库
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 下载并构建
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 准备目录
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
,
<?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启动的端口(建议默认)。
<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 启动
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 防火墙放行
### 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 应用的集成
4.1 本机全局指定 Maven 仓库
由于 cat-client 等开发包并未加入 Maven 官方仓库(repo1.maven.org),所以需要指定 cat 专用的远程仓库。
<!-- %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)
<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)
<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)
/**
* @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 添加注解
@CatCacheTransaction
public void test() {
}
@ResponseBody
@RequestMapping("/hello")
@CatHttpRequestTransaction(type = "URL", name = "/hello")
public String hello() {
return "hello!";
}
5 更多集成
5.1 集成 MyBatis
SpringBoot 集成 Mybatis
参考文档:CAT 集成 MyBatis
5.2 集成 Dubbo
参考文档:CAT 集成 Dubbo,只需在 pom.xml 中添加依赖。
<dependency>
<groupId>net.dubboclub</groupId>
<artifactId>cat-monitor</artifactId>
<version>0.0.6</version>
</dependency>
5.3 集成 Logback
参考文档:CAT 集成 Logback,logback.xml 中添加配置:
<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 实时查看
更多推荐
所有评论(0)