搭建大众点评CAT实时应用监控平台
CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。
Cat 优势实时处理:信息的价值会随时间锐减,尤其是事故处理过程中
全量数据:全量采集指标数据,便于深度分析故障案例
高可用:故障的还原与问题定位,需要高可用监控来支撑
故障容忍:故障不影响业务正常运转、对业务透明
高吞吐:海量监控数据的收集,需要高吞吐能力做保证
可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统
关于CAT的更多介绍可移步到CAT官网进行查阅。
https://github.com/dianping/cat
1 环境清单CentOS7
Java8
Maven3.5
MySQL5.7
CAT2.0.0
Tomcat7.0
下载 CAT
安装包:
$ wget -O cat-home-2.0.0.war http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/2.0.0/cat-home-2.0.0.war
将 cat-home-2.0.0.war
部署到 tomcat
并重命名为 cat.war
:
$ mv cat-home-2.0.0.war tomcat-7.0.90/webapps/cat.war
在Linux系统安装时, CAT
应用要求对 /data/appdatas/cat
和 /data/applogs/cat
路径有读写权限。
$ mkdir -p /data/appdatas/cat && mkdir -p /data/applogs/cat
CAT
服务端应用会对这两个目录进行读写操作,因此需要首先创建这两个目录。并且应确保启动 CAT
应用的用户对这两个目录有读写权限。
下载 CAT
的源码包:
$ wget -O cat-2.0.0.tar.gz https://codeload.github.com/dianping/cat/tar.gz/v2.0.0
解压缩:
$ tar zxvf cat-2.0.0.tar.gz
解压缩完成后得到 cat-2.0.0
目录。其中 cat-2.0.0/script
目录中存放的是 CAT
客户端和服务端安装所需的一些配置文件:
client.xml
所有的CAT客户端都需要配置这个配置文件。它用于配置CAT部署的服务端信息。只有客户端配置了这个配置文件,客户端才能正确连接到CAT服务器端。该文件的部署路径是/data/appdatas/cat(该部署路径不能更改,并且启动客户端的程序的用户需要对此目录有读写权限)。 特殊的,部署CAT应用的服务端同时也是一个客户端,也需要配置该配置文件。
server.xml
CAT服务端的配置文件。即安装CAT应用的服务器才需要配置。该文件的部署路径是/data/appdatas/cat(该部署路径不能更改,并且启动CAT应用的用户需要对此目录有读写权限)。
datasources.xml
CAT服务端的配置文件。即安装CAT应用的服务器才需要配置。该配置文件用于配置CAT链接MySQL数据库的信息。该文件的部署路径是/data/appdatas/cat(该部署路径不能更改)。
Cat.sql
CAT应用所需的MySQL数据库脚本。需将此脚本导入MySQL数据库中。
将 cat-2.0.0/script
目录中的 client.xml
、 datasources.xml
、 server.xml
配置文件复制到目录 /data/appdatas/cat
中:
$ cp client.xml server.xml datasources.xml /data/appdatas/cat/
客户端 client.xml
的配置内容如下:
<?xml version="1.0" encoding="utf-8"?>
<config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
<servers>
<!-- ip:部署CAT应用的服务器IP
port:CAT服务端接收客户端数据的端口(不允许更改)
http-port:CAT应用部署到的容器的端口(tomcat的端口)
-->
<server ip="10.10.10.121" port="2280" http-port="8080" />
</servers>
</config>
服务端 server.xml
的配置内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- local-mode:是否为本地开发模式。建议在开发环境以及生产环境都设置为false
hdfs-machine:是否启用HDFS存储
job-machine:是否为报告工作机(开启生成汇总报告和统计报告,只需要一台服务机开启此功能)
alert-machine:是否为报警机(开启各类报警监听, 只需要一台服务机开启此功能)
-->
<config local-mode="false" hdfs-machine="false" job-machine="true" alert-machine="false">
<!-- local-base-dir:本地数据存储目录, 建议不要修改
local-report-storage-time:本地报告文件存放时长, 单位为(天)
local-logivew-storage-time:本地日志文件存放时长, 单位为(天)
-->
<storage local-base-dir="/data/appdatas/cat/bucket/" local-report-storage-time="7" local-logivew-storage-time="7"/>
<console default-domain="Cat" show-cat-domain="true">
<!-- 远程服务端HTTP服务列表, 用于同步更新 -->
<remote-servers>10.10.10.121:8080</remote-servers>
</console>
</config>
数据源 datasources.xml
的配置内容如下:
<?xml version="1.0" encoding="utf-8"?>
<data-sources>
<data-source id="cat">
<maximum-pool-size>8</maximum-pool-size>
<connection-timeout>3s</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://10.10.10.121:3306/cat_schema]]></url>
<!-- 用户名 -->
<user>root</user>
<!-- 密码 -->
<password>123654</password>
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
<data-source id="app">
<maximum-pool-size>8</maximum-pool-size>
<connection-timeout>3s</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://10.10.10.121:3306/cat_schema]]></url>
<!-- 用户名 -->
<user>root</user>
<!-- 密码 -->
<password>123654</password>
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
创建 cat_schema
数据库:
CREATE DATABASE IF NOT EXISTS cat_schema DEFAULT CHARSET utf8 COLLATE utf8_general_ci
选择数据库 cat_schema
:
USE cat_schema
导入 Cat.sql
到 cat_schema
数据库:
SOURCE /home/fanlychie/cat-2.0.0/script/Cat.sql
编辑 tomcat
配置文件:
$ vim tomcat-7.0.90/conf/server.xml
找到 Connector
的配置行,添加 URIEncoding="utf-8"
。如下:
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8" />
启动 tomcat
:
$ ./tomcat-7.0.90/bin/startup.sh
访问:http://10.10.10.121:8080/cat
配置操作需要用户登入系统,每次的登录账户名和密码保持一致即可。如 catadmin/catadmin
。
依次打开 配置-->全局告警配置-->客户端路由
修改 id
为 CAT
部署的服务器 ip
:
上面介绍的是 CAT
应用的单点模式部署。接下来介绍 CAT
的集群模式搭建方式。
IP | 角色 |
---|---|
10.10.10.121 | 控制台、告警端、任务机 |
10.10.10.122 | 消费机 |
10.10.10.123 | 消费机 |
10.10.10.121
作为前端控制台,如果使用了域名,只需将域名解析到此 IP
地址。
按以上搭建单点模式的方式,分别在 10.10.10.121
、 10.10.10.122
、 10.10.10.123
部署 CAT
。部署完成后,先不要启动 tomcat
。接下来做集群配置。
10.10.10.121
、 10.10.10.122
、 10.10.10.123
的 client.xml
配置一样,具体如下:
<?xml version="1.0" encoding="utf-8"?>
<config mode="client" xmlns:xsi="http://www.w3.org/2001/XMLSchema" xsi:noNamespaceSchemaLocation="config.xsd">
<servers>
<!-- ip:部署CAT应用的服务器IP
port:CAT服务端接收客户端数据的端口(不允许更改)
http-port:CAT应用部署到的容器的端口(tomcat的端口)
-->
<server ip="10.10.10.121" port="2280" http-port="8080" />
<server ip="10.10.10.122" port="2280" http-port="8080" />
<server ip="10.10.10.123" port="2280" http-port="8080" />
</servers>
</config>
10.10.10.121
的 server.xml
配置,具体如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- local-mode:是否为本地开发模式。建议在开发环境以及生产环境都设置为false
hdfs-machine:是否启用HDFS存储
job-machine:是否为报告工作机(开启生成汇总报告和统计报告,只需要一台服务机开启此功能)
alert-machine:是否为报警机(开启各类报警监听, 只需要一台服务机开启此功能)
-->
<config local-mode="false" hdfs-machine="false" job-machine="true" alert-machine="true">
<!-- local-base-dir:本地数据存储目录, 建议不要修改
local-report-storage-time:本地报告文件存放时长, 单位为(天)
local-logivew-storage-time:本地日志文件存放时长, 单位为(天)
-->
<storage local-base-dir="/data/appdatas/cat/bucket/" local-report-storage-time="7" local-logivew-storage-time="7"/>
<console default-domain="Cat" show-cat-domain="true">
<!-- 远程服务端HTTP服务列表, 用于同步更新 -->
<remote-servers>10.10.10.121:8080,10.10.10.122:8080,10.10.10.123:8080</remote-servers>
</console>
</config>
10.10.10.122
、 10.10.10.123
的 server.xml
配置一样,具体如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- local-mode:是否为本地开发模式。建议在开发环境以及生产环境都设置为false
hdfs-machine:是否启用HDFS存储
job-machine:是否为报告工作机(开启生成汇总报告和统计报告,只需要一台服务机开启此功能)
alert-machine:是否为报警机(开启各类报警监听, 只需要一台服务机开启此功能)
-->
<config local-mode="false" hdfs-machine="false" job-machine="false" alert-machine="false">
<!-- local-base-dir:本地数据存储目录, 建议不要修改
local-report-storage-time:本地报告文件存放时长, 单位为(天)
local-logivew-storage-time:本地日志文件存放时长, 单位为(天)
-->
<storage local-base-dir="/data/appdatas/cat/bucket/" local-report-storage-time="7" local-logivew-storage-time="7"/>
<console default-domain="Cat" show-cat-domain="true">
<!-- 远程服务端HTTP服务列表, 用于同步更新 -->
<remote-servers>10.10.10.121:8080,10.10.10.122:8080,10.10.10.123:8080</remote-servers>
</console>
</config>
服务端 server.xml
的配置主要是 job-machine
和 alert-machine
属性值配置的不同。
分别启动 10.10.10.121
、 10.10.10.122
、 10.10.10.123
的 tomcat
:
$ ./tomcat-7.0.90/bin/startup.sh
10.10.10.121
作为控制台服务,只需访问:http://10.10.10.121:8080/cat
10.10.10.121
作为控制台服务,只需配置这台即可。
依次打开 配置-->全局告警配置-->客户端路由
修改 id
为 CAT
部署的服务器 ip
:
其中 10.10.10.121
作为备份,正常情况下不作为消费机(即不起消费数据的作用),仅当 CAT
集群中的其它节点(如这里的 10.10.10.122
、 10.10.10.123
节点)都挂掉之后才会对数据进行消费。
该配置会自动同步到 CAT
集群中的其它节点(如这里的 10.10.10.122
、 10.10.10.123
节点)。
配置完成后,重启 10.10.10.121
服务器的 CAT
应用容器(即重启 tomcat
)。
出处:https://dwz.cn/SfRizfVj
往期精彩文章
Oracle 推出开源轻量级 Java 微服务框架 Helidon
长按:二维码关注
专注于开发技术研究与知识分享
公众号回复:”进群” 加微信群深入交流
回复 Java,Docker等关键字可获得学习资料