VirtualBox:https://yuanyu.blog.csdn.net/article/details/99694556
Docker:https://blog.csdn.net/qq_40794973/category_9639934.html
Cat:https://github.com/dianping/cat
Cat部署:https://github.com/dianping/cat/wiki/readme_server
Cat原理:https://yuanyu.blog.csdn.net/article/details/113007179
框架埋点方案集成:https://github.com/dianping/cat/tree/v2.0.0/框架埋点方案集成
Zipkin:https://yuanyu.blog.csdn.net/article/details/113065905
参考:https://github.com/dianping/cat
一、MYSQL DOWN
wget http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
创建用户和组
groupadd mysql
useradd -g mysql -s /sbin/nologin mysql
mkdir -p /data/appdatas/cat/
chown -R mysql:mysql /data/appdatas/cat
chmod -R 755 /data/
bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
vi my.cnf
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#skip-name-resolve
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/data/appdatas/cat/mysql-5.7.30
# 设置mysql数据库的数据的存放目录
datadir=/data/appdatas/cat/mysql-5.7.30/data
# 允许最大连接数
max_connections=2000
#socket=/var/lib/mysql/mysql.sock
socket=/tmp/mysql.sock
#log-error=/var/log/mysqld.log
#pid-file=/var/run/mysqld/mysqld.pid
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
lower_case_table_names=1
innodb_buffer_pool_size = 1G # (adjust value here, 50%-70% of total RAM)
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 1 # may change to 2 or 0
innodb_flush_method = O_DIRECT
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
启动数据库
./bin/mysqld_safe --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
修改MySQL密码
登陆成功后,设置MySQL密码
mysql> ALTER USER 'root'@'localhost' identified by '你的密码';
或者
set password=password("你的密码");
① 将 CAT 提供的 script/CatApplication.sql 脚本,初始化到数据库中。导入完成后,数据表如下图所示:
② 创建 CAT 目录,并授予权限。执行如下命令:
CREATE DATABASE IF NOT EXISTS cat DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
CREATE DATABASE IF NOT EXISTS cat default charset utf8mb4 COLLATE utf8_general_ci;
# 建库
CREATE DATABASE cat DEFAULT CHAR SET utf8mb4;
USE cat;
# 建表
CREATE TABLE `dailyreport`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '报表名称, transaction, problem...',
`ip` varchar(50) NOT NULL COMMENT '报表来自于哪台cat-consumer机器',
`domain` varchar(50) NOT NULL COMMENT '报表处理的Domain信息',
`period` datetime NOT NULL COMMENT '报表时间段',
`type` tinyint(4) NOT NULL COMMENT '报表数据格式, 1/xml, 2/json, 默认1',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `period` (`period`, `domain`, `name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='天报表';
CREATE TABLE `weeklyreport`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '报表名称, transaction, problem...',
`ip` varchar(50) NOT NULL COMMENT '报表来自于哪台cat-consumer机器',
`domain` varchar(50) NOT NULL COMMENT '报表处理的Domain信息',
`period` datetime NOT NULL COMMENT '报表时间段',
`type` tinyint(4) NOT NULL COMMENT '报表数据格式, 1/xml, 2/json, 默认1',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `period` (`period`, `domain`, `name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='周报表';
CREATE TABLE `monthreport`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL COMMENT '报表名称, transaction, problem...',
`ip` varchar(50) NOT NULL COMMENT '报表来自于哪台cat-consumer机器',
`domain` varchar(50) NOT NULL COMMENT '报表处理的Domain信息',
`period` datetime NOT NULL COMMENT '报表时间段',
`type` tinyint(4) NOT NULL COMMENT '报表数据格式, 1/xml, 2/json, 默认1',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
UNIQUE KEY `period` (`period`, `domain`, `name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='月报表';
CREATE TABLE `hostinfo`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(50) NOT NULL COMMENT '部署机器IP',
`domain` varchar(200) NOT NULL COMMENT '部署机器对应的项目名',
`hostname` varchar(200) DEFAULT NULL COMMENT '机器域名',
`creation_date` datetime NOT NULL,
`last_modified_date` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ip_index` (`ip`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='IP和项目名的对应关系';
CREATE TABLE `hourlyreport`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` tinyint(4) NOT NULL COMMENT '报表类型, 1/xml, 9/binary 默认1',
`name` varchar(20) NOT NULL COMMENT '报表名称',
`ip` varchar(50) DEFAULT NULL COMMENT '报表来自于哪台机器',
`domain` varchar(50) NOT NULL COMMENT '报表项目',
`period` datetime NOT NULL COMMENT '报表时间段',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
KEY `IX_Domain_Name_Period` (`domain`, `name`, `period`),
KEY `IX_Name_Period` (`name`, `period`),
KEY `IX_Period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='用于存放实时报表信息,处理之后的结果';
CREATE TABLE `hourly_report_content`
(
`report_id` int(11) NOT NULL COMMENT '报表ID',
`content` longblob NOT NULL COMMENT '二进制报表内容',
`period` datetime NOT NULL COMMENT '报表时间段',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`report_id`),
KEY `IX_Period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='小时报表二进制内容';
CREATE TABLE `daily_report_content`
(
`report_id` int(11) NOT NULL COMMENT '报表ID',
`content` longblob NOT NULL COMMENT '二进制报表内容',
`period` datetime COMMENT '报表时间段',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`report_id`),
KEY `IX_Period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='天报表二进制内容';
CREATE TABLE `weekly_report_content`
(
`report_id` int(11) NOT NULL COMMENT '报表ID',
`content` longblob NOT NULL COMMENT '二进制报表内容',
`period` datetime COMMENT '报表时间段',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`report_id`),
KEY `IX_Period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='周报表二进制内容';
CREATE TABLE `monthly_report_content`
(
`report_id` int(11) NOT NULL COMMENT '报表ID',
`content` longblob NOT NULL COMMENT '二进制报表内容',
`period` datetime COMMENT '报表时间段',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`report_id`),
KEY `IX_Period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='月报表二进制内容';
CREATE TABLE `businessReport`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`type` tinyint(4) NOT NULL COMMENT '报表类型 报表数据格式, 1/Binary, 2/xml , 3/json',
`name` varchar(20) NOT NULL COMMENT '报表名称',
`ip` varchar(50) NOT NULL COMMENT '报表来自于哪台机器',
`productLine` varchar(50) NOT NULL COMMENT '指标来源于哪个产品组',
`period` datetime NOT NULL COMMENT '报表时间段',
`content` longblob COMMENT '用于存放报表的具体内容',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
KEY `IX_Period_productLine_name` (`period`, `productLine`, `name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8
ROW_FORMAT = COMPRESSED COMMENT ='用于存放业务监控实时报表信息,处理之后的结果';
CREATE TABLE `task`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`producer` varchar(20) NOT NULL COMMENT '任务创建者ip',
`consumer` varchar(20) NULL COMMENT '任务执行者ip',
`failure_count` tinyint(4) NOT NULL COMMENT '任务失败次数',
`report_name` varchar(20) NOT NULL COMMENT '报表名称, transaction, problem...',
`report_domain` varchar(50) NOT NULL COMMENT '报表处理的Domain信息',
`report_period` datetime NOT NULL COMMENT '报表时间',
`status` tinyint(4) NOT NULL COMMENT '执行状态: 1/todo, 2/doing, 3/done 4/failed',
`task_type` tinyint(4) NOT NULL DEFAULT '1' COMMENT '0表示小时任务,1表示天任务',
`creation_date` datetime NOT NULL COMMENT '任务创建时间',
`start_date` datetime NULL COMMENT '开始时间, 这次执行开始时间',
`end_date` datetime NULL COMMENT '结束时间, 这次执行结束时间',
PRIMARY KEY (`id`),
UNIQUE KEY `task_period_domain_name_type` (`report_period`, `report_domain`, `report_name`, `task_type`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='后台任务';
CREATE TABLE `project`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`domain` varchar(200) NOT NULL COMMENT '项目名称',
`cmdb_domain` varchar(200) DEFAULT NULL COMMENT 'cmdb项目名称',
`level` int(5) DEFAULT NULL COMMENT '项目级别',
`bu` varchar(50) DEFAULT NULL COMMENT 'CMDB事业部',
`cmdb_productline` varchar(50) DEFAULT NULL COMMENT 'CMDB产品线',
`owner` varchar(50) DEFAULT NULL COMMENT '项目负责人',
`email` longtext DEFAULT NULL COMMENT '项目组邮件',
`phone` longtext DEFAULT NULL COMMENT '联系电话',
`creation_date` datetime DEFAULT NULL COMMENT '创建时间',
`modify_date` datetime DEFAULT NULL COMMENT '修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `domain` (`domain`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='项目基本信息';
CREATE TABLE `topologyGraph`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(50) NOT NULL COMMENT '报表来自于哪台cat-client机器ip',
`period` datetime NOT NULL COMMENT '报表时间段,精确到分钟',
`type` tinyint(4) NOT NULL COMMENT '报表数据格式, 1/xml, 2/json, 3/binary',
`content` longblob COMMENT '用于存放报表的具体内容',
`creation_date` datetime NOT NULL COMMENT '报表创建时间',
PRIMARY KEY (`id`),
KEY `period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='用于存储历史的拓扑图曲线';
CREATE TABLE `config`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '配置名称',
`content` longtext COMMENT '配置的具体内容',
`creation_date` datetime NOT NULL COMMENT '配置创建时间',
`modify_date` datetime NOT NULL COMMENT '配置修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='用于存储系统的全局配置信息';
CREATE TABLE `baseline`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`report_name` varchar(100) DEFAULT NULL,
`index_key` varchar(100) DEFAULT NULL,
`report_period` datetime DEFAULT NULL,
`data` blob,
`creation_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `period_name_key` (`report_period`, `report_name`, `index_key`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
CREATE TABLE `alteration`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`type` varchar(64) NOT NULL COMMENT '分类',
`title` varchar(128) NOT NULL COMMENT '变更标题',
`domain` varchar(128) NOT NULL COMMENT '变更项目',
`hostname` varchar(128) NOT NULL COMMENT '变更机器名',
`ip` varchar(128) DEFAULT NULL COMMENT '变更机器IP',
`date` datetime NOT NULL COMMENT '变更时间',
`user` varchar(45) NOT NULL COMMENT '变更用户',
`alt_group` varchar(45) DEFAULT NULL COMMENT '变更组别',
`content` longtext NOT NULL COMMENT '变更内容',
`url` varchar(200) DEFAULT NULL COMMENT '变更链接',
`status` tinyint(4) DEFAULT '0' COMMENT '变更状态',
`creation_date` datetime NOT NULL COMMENT '数据库创建时间',
PRIMARY KEY (`id`),
KEY `ind_date_domain_host` (`date`, `domain`, `hostname`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='变更表';
CREATE TABLE `alert`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`domain` varchar(128) NOT NULL COMMENT '告警项目',
`alert_time` datetime NOT NULL COMMENT '告警时间',
`category` varchar(64) NOT NULL COMMENT '告警分类:network/business/system/exception -alert',
`type` varchar(64) NOT NULL COMMENT '告警类型:error/warning',
`content` longtext NOT NULL COMMENT '告警内容',
`metric` varchar(128) NOT NULL COMMENT '告警指标',
`creation_date` datetime NOT NULL COMMENT '数据插入时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='存储告警信息';
CREATE TABLE `alert_summary`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`domain` varchar(128) NOT NULL COMMENT '告警项目',
`alert_time` datetime NOT NULL COMMENT '告警时间',
`content` longtext NOT NULL COMMENT '统一告警内容',
`creation_date` datetime NOT NULL COMMENT '数据插入时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='统一告警信息';
CREATE TABLE `operation`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`user` varchar(128) NOT NULL COMMENT '用户名',
`module` varchar(128) NOT NULL COMMENT '模块',
`operation` varchar(128) NOT NULL COMMENT '操作',
`time` datetime NOT NULL COMMENT '修改时间',
`content` longtext NOT NULL COMMENT '修改内容',
`creation_date` datetime NOT NULL COMMENT '数据插入时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='用户操作日志';
CREATE TABLE `overload`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`report_id` int(11) NOT NULL COMMENT '报告id',
`report_type` tinyint(4) NOT NULL COMMENT '报告类型 1:hourly 2:daily 3:weekly 4:monthly',
`report_size` double NOT NULL COMMENT '报告大小 单位MB',
`period` datetime NOT NULL COMMENT '报表时间',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `period` (`period`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='过大容量表';
CREATE TABLE `config_modification`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`user_name` varchar(64) NOT NULL COMMENT '用户名',
`account_name` varchar(64) NOT NULL COMMENT '账户名',
`action_name` varchar(64) NOT NULL COMMENT 'action名',
`argument` longtext COMMENT '参数内容',
`date` datetime NOT NULL COMMENT '修改时间',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='配置修改记录表';
CREATE TABLE `user_define_rule`
(
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增长ID',
`content` text NOT NULL COMMENT '用户定义规则',
`creation_date` datetime NOT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='用户定义规则表';
CREATE TABLE `business_config`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(20) NOT NULL DEFAULT '' COMMENT '配置名称',
`domain` varchar(50) NOT NULL DEFAULT '' COMMENT '项目',
`content` longtext COMMENT '配置内容',
`updatetime` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `updatetime` (`updatetime`),
KEY `name_domain` (`name`, `domain`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8;
CREATE TABLE `metric_screen`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '配置名称',
`graph_name` varchar(50) NOT NULL DEFAULT '' COMMENT 'Graph名称',
`view` varchar(50) NOT NULL DEFAULT '' COMMENT '视角',
`endPoints` longtext NOT NULL,
`measurements` longtext NOT NULL COMMENT '配置的指标',
`content` longtext NOT NULL COMMENT '配置的具体内容',
`creation_date` datetime NOT NULL COMMENT '配置创建时间',
`updatetime` datetime NOT NULL COMMENT '配置修改时间',
PRIMARY KEY (`id`),
UNIQUE KEY `name_graph` (`name`, `graph_name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='系统监控的screen配置';
CREATE TABLE `metric_graph`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`graph_id` int(11) NOT NULL COMMENT '大盘ID',
`name` varchar(50) NOT NULL COMMENT '配置ID',
`content` longtext COMMENT '配置的具体内容',
`creation_date` datetime NOT NULL COMMENT '配置创建时间',
`updatetime` datetime NOT NULL COMMENT '配置修改时间',
PRIMARY KEY (`id`),
UNIQUE `name` (`name`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='系统监控的graph配置';
CREATE TABLE `server_alarm_rule`
(
`id` int(11) NOT NULL AUTO_INCREMENT,
`category` varchar(50) NOT NULL COMMENT '监控分类',
`endPoint` varchar(200) NOT NULL COMMENT '监控对象ID',
`measurement` varchar(200) NOT NULL COMMENT '监控指标',
`tags` varchar(200) NOT NULL DEFAULT '' COMMENT '监控指标标签',
`content` longtext NOT NULL COMMENT '配置的具体内容',
`type` varchar(20) NOT NULL DEFAULT '' COMMENT '数据聚合方式',
`creator` varchar(100) DEFAULT '' COMMENT '创建人',
`creation_date` datetime NOT NULL COMMENT '配置创建时间',
`updatetime` datetime NOT NULL COMMENT '配置修改时间',
PRIMARY KEY (`id`),
KEY `updatetime` (`updatetime`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8 COMMENT ='系统告警的配置';
二、TOMCAT
wget https://archive.apache.org/dist/tomcat/tomcat-8/v8.0.23/bin/apache-tomcat-8.0.23.tar.gz
tar xvf apache-tomcat-8.0.23.tar.gz
修改tomcat配置文件端口8080
vi /usr/local/server/apache-tomcat-8.5.61/conf/server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
URIEncoding="utf-8"
redirectPort="8443" />
<!-- 增加 URIEncoding="utf-8" -->防中文乱码
下载cat并解压到tomcat的webapps目录里面,注意文件需要重命名为cat.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
###
mv cat-home-3.0.0.war /usr/local/server/apache-tomcat-8.5.61/webapps/cat.war
创建setenv.sh
###
vi /usr/local/server/apache-tomcat-8.5.61/bin/setenv.sh
export CAT_HOME=/data/appdatas/cat/
CATALINA_OPTS="$CATALINA_OPTS -server -DCAT_HOME=$CAT_HOME -Djava.awt.headless=true -Xms1G -Xmx1G -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:SurvivorRatio=10 -XX:+UseParNewGC -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=13 -XX:+UseConcMarkSweepGC -XX:+DisableExplicitGC -XX:+UseCMSInitiatingOccupancyOnly -XX:+ScavengeBeforeFullGC -XX:+UseCMSCompactAtFullCollection -XX:+CMSParallelRemarkEnabled -XX:CMSFullGCsBeforeCompaction=9 -XX:CMSInitiatingOccupancyFraction=60 -XX:+CMSClassUnloadingEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:-ReduceInitialCardMarks -XX:+CMSPermGenSweepingEnabled -XX:CMSInitiatingPermOccupancyFraction=70 -XX:+ExplicitGCInvokesConcurrent -Djava.nio.channels.spi.SelectorProvider=sun.nio.ch.EPollSelectorProvider -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCApplicationConcurrentTime -XX:+PrintHeapAtGC -Xloggc:/data/applogs/heap_trace.txt -XX:-HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/data/applogs/HeapDumpOnOutOfMemoryError -Djava.util.Arrays.useLegacyMergeSort=true"
修改文件权限
mkdir /data
chmod -R 777 /data/
创建/data/appdatas/cat/client.xml
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="10.4.42.36" port="2280" http-port="8080"/>
</servers>
</config>
创建/data/appdatas/cat/server.xml(可以不配,后面有空在研究)
<?xml version="1.0" encoding="utf-8"?>
<config local-mode="false" hdfs-machine="false" job-machine="true" 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>10.4.42.36:8080</remote-servers>
</console>
</config>
创建/data/appdatas/cat/datasources.xml
vi /data/appdatas/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://10.4.42.36:33060/cat]]></url>
<user>root</user>
<password>123456</password>
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
启动tomcat
cd /usr/local/server/apache-tomcat-8.5.61/bin/ && ./startup.sh
配置环境变量
export TOMCAT_HOME=/usr/local/tomcat
export PATH=$PATH:$MAVEN_HOME/bin:$JAVA_HOME/bin:$TOMCAT_HOME/bin
启动tomcat
/data/appdatas/cat/apache-tomcat-8.0.23/bin/startup.sh
打开网页查看,ip使用linux的ip地址
登录cat(admin:admin)修改配置
http://10.0.0.8:8088/
注:如果页面没有打开,可以通过日志查看报错原因
cat logs/catalina.out
三、客户端部署
https://gitee.com/yuanyu1997/doc3/tree/master/Cat/code
项目的根目录放置 /data/appdatas/cat/client.xml(例如代码放在Windows桌面:C:\data\appdatas\cat\client.xml)
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="10.4.42.36" port="2280" http-port="8080"/>
</servers>
</config>
四、问题总结
服务器系统时间不对
### 查询系统时间
date
### 更改系统时间
yum install -y ntpdate
sudo ntpdate cn.pool.ntp.org
本地部署
步骤1:部署tomcat
准备一个tomcat,修改 tomcat conf 目录下 server.xml,防中文乱码。
Connector port="8080" protocol="HTTP/1.1"
URIEncoding="utf-8" connectionTimeout="20000"
redirectPort="8443" /> <!-- 增加 URIEncoding="utf-8" -->
步骤2:程序对于/data/目录具体读写权限(重要)
-
Linux
-
要求/data/目录能进行读写操作,如果/data/目录不能写,建议使用linux的软链接链接到一个固定可写的目录。
-
此目录会存一些CAT必要的配置文件以及运行时候的数据存储目录。
-
CAT支持CAT_HOME环境变量,可以通过JVM参数修改默认的路径。
mkdir /data
chmod -R 777 /data/
- Windows
对程序运行盘下的/data/appdatas/cat和/data/applogs/cat有读写权限。例如cat服务运行在e盘的tomcat中,则需要对e:/data/appdatas/cat和e:/data/applogs/cat有读写权限。
步骤3: 配置/data/appdatas/cat/client.xml ($CAT_HOME/client.xml)
<?xml version="1.0" encoding="utf-8"?>
<config mode="client">
<servers>
<server ip="127.0.0.1" port="2280" http-port="8080"/>
</servers>
</config>
此配置文件的作用是所有的客户端都需要一个地址指向CAT的服务端。
步骤4: 安装CAT的数据库
下载cat源码包:https://codeload.github.com/dianping/cat/
解压后,数据库的脚本文件为 script/CatApplication.sql
mysql -uroot -Dcat < CatApplication.sql
步骤5: 配置/data/appdatas/cat/datasources.xml($CAT_HOME/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://127.0.0.1:3306/cat]]></url> <!-- 请替换为真实数据库URL及Port -->
<user>root</user> <!-- 请替换为真实数据库用户名 -->
<password>root</password> <!-- 请替换为真实数据库密码 -->
<connectionProperties><![CDATA[useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&socketTimeout=120000]]></connectionProperties>
</properties>
</data-source>
</data-sources>
步骤6: war打包
重命名为cat.war进行部署,注意此war是用jdk8,服务端请使用jdk8版本
步骤7: war部署
- 将上一步打包的war包部署到本机tomcat的webapps下。
- 启动tomcat,打开控制台的URL,http://127.0.0.1:8080/cat/s/config?op=routerConfigUpdate 默认用户名:admin 默认密码:admin 。
- 配置客户端路由。
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="你的本机ip(不要用127.0.0.1)" backup-server-port="2280">
<default-server id="你的本机ip(不要用127.0.0.1)" 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="你的本机ip(不要用127.0.0.1)"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="你的本机ip(不要用127.0.0.1)" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
提交后,重启tomcat,访问http://127.0.0.1:8080/cat,出现如下界面,说明搭建成功。
测试
安装jar包
进入cat源码包的 lib/java/jar ,将cat-client-3.0.0.jar 包 安装到本地maven仓库。
mvn install:install-file -DgroupId=com.dianping.cat -DartifactId=cat-client Dversion=3.0.0 -Dpackaging=jar -Dfile=cat-client-3.0.0.jar
创建工程
创建一个springboot 工程,关键代码如下。
pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>com.dianping.cat</groupId>
<artifactId>cat-client</artifactId>
<version>3.0.0</version>
</dependency>
app.properties
需要在你的项目中创建 src/main/resources/META-INF/app.properties 文件, 并添加如下内容:
app.name={appkey}
appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (_) 和中划线 (-)
application.yml
server:
port: 8760
spring:
application:
name: cat-simple
启动类
@SpringBootApplication
@RestController
public class CatSimpleApplication {
public static void main(String[] args) {
SpringApplication.run( CatSimpleApplication.class, args );
}
@PostMapping("/hi")
public String hi(HttpServletRequest request){
String url = request.getRequestURL().toString();
// 创建一个 Transaction
Transaction transaction = Cat.newTransaction( "URL", url );
try {
// 处理业务
myBusiness();
// 设置状态
transaction.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
// 设置错误状态
transaction.setStatus(e);
// 记录错误信息
Cat.logError(e);
} finally {
// 结束 Transaction
transaction.complete();
}
return "hello";
}
@PostMapping("/error")
public String error(HttpServletRequest request){
String url = request.getRequestURL().toString();
// 创建一个 Transaction
Transaction transaction = Cat.newTransaction( "URL", url );
try {
// 处理业务
int i = 1 / 0;
// 设置状态
transaction.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
// 设置错误状态
transaction.setStatus(e);
// 记录错误信息
Cat.logError(e);
} finally {
// 结束 Transaction
transaction.complete();
}
return "500";
}
private void myBusiness() {
//模拟业务处理的时间
try {
Thread.sleep( 500 );
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
curl -X POST http://localhost:8760/hi
请求 http://localhost:8760/error
curl -X POST http://localhost:8760/error
查看监控信息
进入 cat 控制台,点击 Transaction 按钮 ,之后点击全部,会看到有哪些客户端,如图:
点击客户端 cat-simple ,出现如图:
如上图,可以清晰的看到 请求的 总个数(tatal)、均值(avg)、最大/最小(max/min)、标准差(std)等,其他都比较直观,标准差稍微复杂一点,大家自己可以推演一下怎么做增量计算。那集合运算,比如95线(表示95%请求的完成时间)、999线(表示99.9%请求的完成时间)
点击 “log View” 可以查看 错误信息,如图:
源码
https://github.com/gf-huanchupk/SpringCloudLearning/tree/master/chapter14
参考
https://github.com/dianping/cat/wiki