美团 CAT 集群的搭建与集成 痛定思痛。 2022-05-19 13:47 383阅读 0赞 CAT 是大众点评开源的实时监控系统,它侧重于 Java 应用监控,可与各种流行的中间件框架集成(MVC框架、RPC框架、数据库框架、缓存框架等),实现应用各层级系统的运行状况监控。本文总结了 CAT 服务器集群的搭建、Java 应用的集成、以其控制台的使用。 **作者:**王克锋 **出处:**[https://kefeng.wang/2018/07/06/tracing-cat/][https_kefeng.wang_2018_07_06_tracing-cat] **版权:**[自由转载-非商用-非衍生-保持署名][-_-_-],转载请标明作者和出处。 ## 1 概述 ## 官网: [https://github.com/dianping/cat/][https_github.com_dianping_cat] ### 1.1 概述 ### CAT(Central Application Tracking) 是大众点评开源的一套基于 Java 的实时应用监控平台,主要应用于服务中间件框架(MVC 框架、RPC 框架、持久层框架、分布式缓存框架)的监控(服务端、移动端、前端),为开发和运维提供各项性能指标、健康检查、自动报警等可视化服务。 ### 1.2 依赖环境 ### 本文只实现了本地磁盘文件存储(非大数据)方式。所用环境: * CentOS: 7.4.1708(内核 3.10.0),[安装方法][Link 1] * Java: 1.8.0,[安装方法][Link 2] * Maven: 3.5.4,[安装方法][Link 3] * MySQL: 5.7.20,[安装方法][Link 4] * Tomcat: 7.0.90,[安装方法][Link 5] * Git Client: 1.8.3.1(版本关系不大),[安装方法][Link 6] * 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 集群 ## ![framework.png][] 假设要部署三台: 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 远程调试][IDEA] ## 4 Java 应用的集成 ## [CAT 技术入门总结-0.1.0.doc][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 添加注解 ### ![target.png][] @CatCacheTransaction public void test() { } @ResponseBody @RequestMapping("/hello") @CatHttpRequestTransaction(type = "URL", name = "/hello") public String hello() { return "hello!"; } ## 5 更多集成 ## ![client.png][] [CAT 框架埋点方案集成][CAT] ### 5.1 集成 MyBatis ### [SpringBoot 集成 Mybatis][SpringBoot _ Mybatis] 参考文档:[CAT 集成 MyBatis][CAT _ MyBatis] ### 5.2 集成 Dubbo ### 参考文档:[CAT 集成 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][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][http_192.168.126.101_8080_cat] 帐号/密码: catadmin/catadmin ### 6.2 项目配置 ### [http://192.168.126.101:8080/cat/s/config?op=projects][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_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_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_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_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_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_design] 常见问题:[http://192.168.126.101:8080/cat/r/home?op=view&docName=problem][http_192.168.126.101_8080_cat_r_home_op_view_docName_problem] ### 6.4 实时查看 ### [http://192.168.126.101:8080/cat/r/t][http_192.168.126.101_8080_cat_r_t] ![console.png][] [https_kefeng.wang_2018_07_06_tracing-cat]: https://kefeng.wang/2018/07/06/tracing-cat/ [-_-_-]: https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh [https_github.com_dianping_cat]: https://github.com/dianping/cat/ [Link 1]: https://kefeng.wang/2016/09/26/linux-installation/ [Link 2]: https://kefeng.wang/2016/10/13/jdk-installation/ [Link 3]: https://kefeng.wang/2016/10/15/maven-installation/ [Link 4]: https://kefeng.wang/2016/12/20/mysql-deploy/ [Link 5]: https://kefeng.wang/2016/12/26/tomcat-installation/ [Link 6]: https://kefeng.wang/2017/03/12/git-client/ [framework.png]: /images/20220519/8b7f70e591f644f2803064dc0e302632.png [IDEA]: https://kefeng.wang/2018/03/06/idea-remote-debug/ [CAT _-0.1.0.doc]: https://github.com/dianping/cat/blob/master/框架埋点方案集成/Cat技术入门总结-0.1.0.doc?raw=true [target.png]: /images/20220519/42713eb6e39d46cebd3bf3e5d5cbb6f6.png [client.png]: /images/20220519/1d2ef67ebdfa4506967873eb729b332b.png [CAT]: https://github.com/dianping/cat/blob/master/框架埋点方案集成/ [SpringBoot _ Mybatis]: https://kefeng.wang/2018/03/15/spring-boot-mybatis/ [CAT _ MyBatis]: https://github.com/dianping/cat/tree/master/框架埋点方案集成/mybatis [CAT _ Dubbo]: https://github.com/dianping/cat/tree/master/框架埋点方案集成/dubbo [CAT _ Logback]: https://github.com/dianping/cat/tree/master/框架埋点方案集成/logback [http_192.168.126.101_8080_cat]: http://192.168.126.101:8080/cat [http_192.168.126.101_8080_cat_s_config_op_projects]: http://192.168.126.101:8080/cat/s/config?op=projects [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=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=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=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=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=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=design [http_192.168.126.101_8080_cat_r_home_op_view_docName_problem]: http://192.168.126.101:8080/cat/r/home?op=view&docName=problem [http_192.168.126.101_8080_cat_r_t]: http://192.168.126.101:8080/cat/r/t [console.png]: /images/20220519/1c657b1d88a941879cac4c848010c8e8.png
还没有评论,来说两句吧...