文章40 | 阅读 30640 | 点赞0
偷懒提示:《CAT 官方文档 —— 简洁》已经写的很赞,这里艿艿直接 CV 大法好~
CAT(Central Application Tracking) 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是 48 分钟 40 秒,基本上看到 48 分钟 38 秒数据,整体报表的统计粒度是分钟级;
第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。
本小节,我们来参考《CAT 官方文档 —— 集群部署》文章,来最小化部署一个 CAT 服务,适合演示、学习、测试环境之用。
在单机部署时,我们无需部署 Hadoop 环境,直接使用磁盘存储 CAT 的监控数据即可。因此,还是比较简单的。下面,我们使用 CentOS 7.X 来部署 CAT 服务器。
/data/
目录上。注意,艿艿服务器的内网 IP 是 172.16.48.185,胖友注意替换成自己的服务器的内网 IP!!!
CAT 官方已经提供了 CAT 服务器的 war
包,所以我们可以直接执行如下命令进行下载:
# 下载 war 包
$ wget http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war
# 重命名为 cat.war
$ mv cat-home-3.0.0.war cat.war
在启动 CAT 服务器之前,我们需要做一定的配置。
① 将 CAT 提供的 script/CatApplication.sql 脚本,初始化到数据库中。导入完成后,数据表如下图所示:
② 创建 CAT 目录,并授予权限。执行如下命令:
# 创建 CAT 配置目录
$ mkdir -p /data/appdatas/cat
# 创建 CAT 日志目录
$ mkdir -p /data/applogs/cat
# 赋予权限
$ chmod 777 /data/appdatas/cat -R
$ chmod 777 /data/applogs/cat -R
③ 在 /data/appdatas/cat
目录,创建 CAT 客户端配置文件 client.xml
。具体内容如下:
client_cache.xml
,请删除 client_cache.xml
,再重启服务。<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<!-- 当前服务器内网 IP -->
<server ip="172.16.48.185" port="2280" http-port="8080"/>
<!-- 集群时添加其他服务器 -->
<!-- <server ip="其他机子内网ip" port="2280" http-port="8080"/> -->
</servers>
</config>
http-port
是 Tomcat 启动的端口,默认是 8080,建议使用默认端口。这里我们单机部署,所以不存在集群的其它服务器。
④ 在 /data/appdatas/cat
目录,创建 CAT 服务端配置文件 server.xml
。具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<!-- Configuration for development environment-->
<config local-mode="false" hdfs-machine="false" job-machine="true" alert-machine="true">
<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">
<!-- 所有 CAT 服务器的内网 IP -->
<remote-servers>172.16.48.185:8080</remote-servers>
</console>
</config>
😈 友情提示:如下 server 和 storage 模型的介绍,有点冗长,可以直接暂时先忽略~
**server 模型:代表一台机器的配置。**如果 id
为 default
,代表默认配置;如果 id
为 IP,代表该台服务器的配置。
local-mode
: 定义服务是否为本地模式(开发模式)。在生产环境时,设置为 false
,启动远程监听模式。默认为 false
。hdfs-machine
: 定义是否启用 HDFS 存储方式,默认为 false
。job-machine
: 定义当前服务是否为报告工作机(开启生成汇总报告和统计报告的任务,只需要一台服务机开启此功能),默认为 false
。alarm-machine
: 定义当前服务是否为报警机(开启各类报警监听,只需要一台服务机开启此功能),默认为 false
。send-machine
: 定义当前服务告警是否发送(当时为了解决测试环境开启告警线程,但是最后告警不通知,此配置后续会逐步去除,建议 alarm-machine
开启为 true
的时候,这个同步为 true
)。storage 模型: 定义数据存储配置信息。
local-report-storage-time
: 定义本地报告存放时长,单位为(天)。local-logivew-storage-time
: 定义本地日志存放时长,单位为(天)。local-base-dir
: 定义本地数据存储目录,此目录为上传到HDFS时所查找的源文件路径。hdfs
: 定义HDFS配置信息,便于直接登录系统。server-uri
: 定义 HDFS 服务地址,支持配置HDFS Nameservice。console
: 定义服务控制台信息。remote-servers
: 定义 HTTP 服务列表,(远程监听端同步更新服务端信息即取此值)。这里我们单机部署,所以只需要填写当前 CAT 服务器的内网 IP 即可。
⑤ 在 /data/appdatas/cat
目录,创建 CAT 数据库配置文件 datasources.xml
。具体内容如下:
<?xml version="1.0" encoding="utf-8"?>
<data-sources>
<data-source id="cat">
<maximum-pool-size>3</maximum-pool-size>
<connection-timeout>1s</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://rm-uf60u8c6vnfx2q4m4.mysql.rds.aliyuncs.com:3306/demo_cat]]></url>
<!-- 数据库账号 -->
<user>demo_cat</user>
<!-- 数据库密码 -->
<password>Wwb626583</password>
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
① 因为 CAT 服务器提供的是 war
包,所以我们需要下载 Tomcat。这里我们采用 Tomcat 9.X 版本。执行命令如下:
# 下载
$ wget http://mirror.cc.columbia.edu/pub/software/apache/tomcat/tomcat-9/v9.0.35/bin/apache-tomcat-9.0.35.tar.gz
# 解压
$ tar -zxvf apache-tomcat-9.0.35.tar.gz
J2EE 容器建议使用 Tomcat,建议使用推荐版本 7.X.X 或 8.0。
② 将 CAT 服务器提供的是 war
包,拷贝到 Tomcat 的 webapps
目录下。执行命令如下:
$ cp cat.war apache-tomcat-9.0.35/webapps/
③ 修改 Tomcat 的服务器配置文件 server.xml
的编码为 UTF-8
,避免乱码的问题。修改内容部分如下:
$ vi apache-tomcat-9.0.35/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="utf-8" /> <!-- 新增部分 -->
④ 安装 OpenJDK 1.8 版本,通过执行 yum install java-1.8.0-openjdk
命令即可。
Java 6,7,8,服务端推荐使用 jdk7 的版本。
客户端 jdk6、7、8 都支持。
⑤ 启动 Tomcat 服务器,通过执行 sh apache-tomcat-9.0.35/bin/startup.sh
命令。
① 启动完成后,访问 http://172.16.48.185:8080/cat 地址,进入 CAT 控制台的登陆页。CAT 内置管理员账号为「admin/admin」,进入 CAT 控制台的首页。
友情提示:可能 CAT 启动会比较慢,所以胖友可以不断刷新~
此时,我们看到页面报“出问题CAT的服务端:[127.0.0.1]”错误,需要进行解决。
② 点击上方「Configs」菜单,后选择左边「全局系统配置 -> 客户端路由」菜单,修改内容如下图所示,并点击「提交」按钮:
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="172.16.48.185" backup-server-port="2280">
<default-server id="172.16.48.185" weight="1.0" port="2280" enable="true"/>
<network-policy id="default" title="默认" block="false" server-group="default_group">
</network-policy>
<server-group id="default_group" title="default-group">
<group-server id="172.16.48.185"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="172.16.48.185" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
③ 继续点击左边「全局系统配置 -> 服务端配置」菜单,修改内容如下图所示,并点击「提交」按钮:
<?xml version="1.0" encoding="utf-8"?>
<server-config>
<server id="default">
<properties>
<property name="local-mode" value="false"/>
<property name="job-machine" value="false"/>
<property name="send-machine" value="false"/>
<property name="alarm-machine" value="false"/>
<property name="hdfs-enabled" value="false"/>
<property name="remote-servers" value="172.16.48.185:8080"/>
</properties>
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="2" local-logivew-storage-time="1" har-mode="true" upload-thread="5">
<hdfs id="dump" max-size="128M" server-uri="hdfs://127.0.0.1/" base-dir="/user/cat/dump"/>
<harfs id="dump" max-size="128M" server-uri="har://127.0.0.1/" base-dir="/user/cat/dump"/>
<properties>
<property name="hadoop.security.authentication" value="false"/>
<property name="dfs.namenode.kerberos.principal" value="hadoop/dev80.hadoop@testserver.com"/>
<property name="dfs.cat.kerberos.principal" value="cat@testserver.com"/>
<property name="dfs.cat.keytab.file" value="/data/appdatas/cat/cat.keytab"/>
<property name="java.security.krb5.realm" value="value1"/>
<property name="java.security.krb5.kdc" value="value2"/>
</properties>
</storage>
<consumer>
<long-config default-url-threshold="1000" default-sql-threshold="100" default-service-threshold="50">
<domain name="cat" url-threshold="500" sql-threshold="500"/>
<domain name="OpenPlatformWeb" url-threshold="100" sql-threshold="500"/>
</long-config>
</consumer>
</server>
<server id="172.16.48.185">
<properties>
<property name="job-machine" value="true"/>
<property name="send-machine" value="true"/>
<property name="alarm-machine" value="true"/>
</properties>
</server>
</server-config>
④ 修改完成后,重新启动 Tomcat 服务器,使新的 CAT 服务器的配置生效。重启完成后,访问 http://172.16.48.185:8080/cat 地址,就不会看到 CAT 控制台的不报错啦。
友情提示:可能 CAT 启动会比较慢,所以胖友可以不断刷新~
参见如下文章,完成 CAT 集群部署:
这里先暂时偷懒下,艿艿想把重点放在 CAT 客户端的接入!
在开始在应用中接入 CAT 客户端之前,我们需要看看《CAT 官方文档 —— 模型设计》文章,了解下 CAT 的四种监控模型:Transaction、Event、Heartbeat、Metric。
适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控。
Transaction 用来记录一段代码的执行时间和次数。
进一步了解,可见《CAT 官方文档 —— Transaction 报表》。
用来记录一件事发生的次数,比如记录系统异常。
它和 Transaction 相比缺少了时间的统计,开销比 Transaction 要小。
进一步了解,可见《CAT 官方文档 —— Event 报表》。
另外,CAT 基于 Transaction 和 Event 产生了 《CAT 文档 —— Problem 报表》,胖友可以看看哈~
表示程序内定期产生的统计信息, 如CPU利用率、内存利用率、连接池状态、系统负载等。
进一步了解,可见《CAT 官方文档 —— Heartbeat 报表》。
用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为 1 分钟。
进一步了解,可见《CAT 官方文档 —— Business 报表》。
CAT监控系统将每次 URL、Service 的请求内部执行情况都封装为一个完整的消息树。消息树可能包括 Transaction、Event、Heartbeat、Metric 等信息。
① 完整的消息树
② 可视化消息树
③ 分布式消息树【一台机器调用另外一台机器】
参考《Spring Boot 监控平台 CAT 入门》文章,将 CAT 客户端接入应用,实现监控的功能。
参考《CAT 官方文档 —— 告警配置》文章,实现 CAT 的告警功能。
同时可以参考 cat-alert
集成方式,实现 CAT 微信告警。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/weixin_42073629/article/details/106870431
内容来源于网络,如有侵权,请联系作者删除!