单机版cat3.x搭建

        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打包

官方下载: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进行部署,注意此war是用jdk8,服务端请使用jdk8版本

步骤7: war部署

<?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();
        }
    }


}

请求 http://localhost:8760/hi

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

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值