美团 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 应用的集成
CAT 技术入门总结-0.1.0.doc

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 更多集成
 
CAT 框架埋点方案集成

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 实时查看
http://192.168.126.101:8080/cat/r/t 

转自:https://blog.csdn.net/kefengwang/article/details/81213031 
其它相关文章https://blog.csdn.net/csdnxingyuntian/article/details/73028816

       https://blog.csdn.net/m0_37499059/article/details/80090779

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值