监控中间件CAT快速入门

CAT是一款基于JAVA的分布式监控系统,其全称为Central Application Tracking

一、CAT的简要介绍

1.CAT的主要组成部分
(1) 服务端
  • cat-consumer : 实时分析从客户端提供的数据
  • cat-home : 展示数据分析结果的控制端
(2) 客户端
  • cat-client : 数据埋点
2.CAT支持的监控消息类型
(1).Transaction : 记录跨越系统边界的程序访问行为
  • 使用场景
    • 远程调用
    • 数据库调用
    • 适合执行时间较长的业务逻辑监控
  • 记录内容
    • 记录一段代码的执行时间
    • 记录一段代码的执行次数
(2).Event : 记录一件事件发生的次数
(3).Heartbeat : 程序内定期产生的统计信息
  • 系统资源占用统计
    • CPU利用率
    • 内存利用率
    • 连接池状态
    • 系统负载
(4).Metric : 记录业务指标
  • 记录内容
    • 指标的记录次数
    • 记录平均值
    • 记录总和
  • 时间粒度
    • 最低粒度为1分钟
3.CAT环境要求
  • JDK:1.8+(CAT3.0+)
  • Tomcat
  • Maven : (源码部署中必需的组件)

二、CAT服务端部署

1.准备工作
(1)数据目录建立与配置

A.建立数据目录

  1. mkdir -p /data/appdatas
  2. chmod -R 777 /data
  • CAT默认配置目录和数据目录存放在/data中(不能修改,如果想修改,只能修改源码)

B.建立CAT服务器节点配置文件

  • 配置文件目录:/data/appdatas/cat/client.xml
  • 作用:指定CAT服务器的节点配置(包括服务IP/端口等)
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <config mode="client">
  3. <servers>
  4. <server ip="192.168.0.200" port="2280" http-port="8080"/>
  5. </servers>
  6. </config>

注:

  • 每个server段表示一个节点,如果是集群,则是多个server
  • IP地址要使用内网地址,不要使用127.0.0.1这种本地地址

C.建立数据源配置文件

  • 配置文件目录:/data/appdatas/cat/datasources.xml
  • 作用:指定服务端连接的数据库配置信息
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <data-sources>
  3. <data-source id="cat">
  4. <maximum-pool-size>3</maximum-pool-size>
  5. <connection-timeout>1s</connection-timeout>
  6. <idle-timeout>10m</idle-timeout>
  7. <statement-cache-size>1000</statement-cache-size>
  8. <properties>
  9. <driver>com.mysql.jdbc.Driver</driver>
  10. <url><![CDATA[jdbc:mysql://192.168.0.206:3306/cat]]></url> <!-- 根据项目实际情况,替换为真实数据库URL及Port -->
  11. <user>root</user> <!-- 请替换为真实数据库用户名 -->
  12. <password>root</password> <!-- 请替换为真实数据库密码 -->
  13. <connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
  14. </properties>
  15. </data-source>
  16. </data-sources>
(2)数据导入与配置

A.在数据库服务器建立数据库cat

B.将数据文件导入到数据库服务器中

  • 数据目录:git库中根目录script/CatApplication.sql

注:git目录为:https://github.com/dianping/cat

  1. mysql -uroot -Dcat < CatApplication.sql

C.修改数据库服务器配置参数

  • 将配置参数max_allowed_packet的值设置为1000m

注:修改参数后,请重启服务器(对于阿里云RDS,可以通过控制台修改参数)

(3)部署Tomcat

A.下载Tomcat二进制包

B.重命名Tomcat包

  • 对于部署多个Tomcat实例的情况下,可以通过重命名的方式来区分项目
  1. mv tomcat /opt/tools/cat-server

注:这里把cat的服务端命名为cat-server,后面会将cat的服务端war包放入tomcat中

C.配置tomcat

  • 配置编码: 防止中文乱码
  • 配置访问路径: 配置Cat控制台访问路径

修改tomcat配置文件server.xml

  • 修改Connector段,添加URIEncoding="utf-8"
  1. <Connector port="8080" protocol="HTTP/1.1"
  2. connectionTimeout="20000"
  3. redirectPort="8443" URIEncoding="utf-8"/>
  • 修改Host段,添加如下子段内容
  1. <Context path="/cat" docBase="cat" debug="true" reloadable="true"/>
2.部署war包
(1)源码打包

A.下载源码

  1. git clone https://github.com/dianping/cat.git
  2. cd cat/cat-home
  3. mvn clean package

注:目前通过源码打包,本人测试还有很多问题,建议下载官方提供的war包

B.下载war包

war包下载地址:http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war

  1. wget http://unidal.org/nexus/service/local/repositories/releases/content/com/dianping/cat/cat-home/3.0.0/cat-home-3.0.0.war
(2).将war包放入Tomcat
  1. mv cat-home-3.0.0.war /opt/tools/cat-server/webapps/cat.war
  • 将cat-home-3.0.0.war重命名为cat.war
  • 将war包放入tomcat的webapps目录下
3.重启tomcat
  1. cd /opt/tools/cat-server
  2. bin/shutdown.sh
  3. bin/startup.sh

将cat服务端写成脚本,以方便管理

  1. #!/bin/bash
  2. #description:CAT control script
  3. PORT=2280
  4. NAME=CAT
  5. CAT_HOME=/opt/cat
  6. START_BIN=${CAT_HOME}/bin/startup.sh
  7. STOP_BIN=${CAT_HOME}/bin/shutdown.sh
  8. function start() {
  9. pid=`netstat -npl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  10. if [ -z "$pid" ] ; then
  11. echo "${NAME} startup ......"
  12. else
  13.     sudo kill -9 $pid
  14. ${STOP_BIN}
  15. echo "${NAME} is running"
  16. fi
  17. ${START_BIN}
  18. }
  19. function stop() {
  20. pid=`netstat -npl|grep ${PORT}|awk '{print $7}'|grep '[0-9]\+' -o`
  21. if [ -z "$pid" ] ; then
  22. echo "${NAME} is not running"
  23. else
  24. sudo kill -9 $pid
  25. echo "${NAME} stopped ......"
  26. fi
  27. ${STOP_BIN}
  28. }
  29. case "$1" in
  30. start)
  31. start
  32. ;;
  33. stop)
  34. stop
  35. ;;
  36. restart)
  37. stop
  38. sleep 1
  39. start
  40. ;;
  41. *)
  42. echo "Usage: $0 start|stop|restart"
  43. ;;
  44. esac
4.访问控制台

访问地址为:http://ip:port/cat

请将ip和port替换为部署的具体服务器的地址,如http://localhost:8080/cat

5.更新配置
  • 管理员登录
  • 更新配置
    - Configs -> 全局系统配置 -> 客户端路由

根据实际配置情况,将客户端路由修改成实际的情况,再进行提交保存

默认管理员为:admin/admin

三、CAT客户端使用

1.加载客户端所需要的包
  1. <dependency>
  2. <groupId>com.dianping.cat</groupId>
  3. <artifactId>cat-client</artifactId>
  4. <version>3.0.0</version>
  5. </dependency>
2.添加应用配置

在resources目录下建立META-INF/app.properties 文件,添加以下内容:

  1. app.name=cat-practise
  • app.name就是接入cat的应用名称
3.数据埋点
  • (1)初始化监控消息对象
  • (2)记录业务状态
    • 成功时,只记录成功状态
    • 当出现异常时,记录异常日志
  • (3)提交消息

比如在控制器方法中添加数据埋点

  1. //1.初始化监控消息对象(根据不同的监控消息类型初始化不同的消息对象)
  2. Transaction t = Cat.newTransaction("URL", "/coupon/list");
  3. ResponseDTO responseDTO = ResponseDTO.success();
  4. try {
  5.  //该方法的业务处理逻辑
  6. //2.记录业务处理状态
  7. t.setStatus(Transaction.SUCCESS);
  8. } catch (Exception e) {
  9. //当出现异常时,将状态设置为异常,而且记录异常日志
  10. t.setStatus(e);
  11. Cat.logError(e);
  12. responseDTO = ResponseDTO.error("test cat exception");
  13. } finally {
  14. //3.完成提交消息
  15. t.complete();
  16. }
  17. return responseDTO;