cat官网地址
1:此次安装使用的是CAT3.0进行安装的
2:环境使用的是linux 7.2,jdk1.8,tomcat8.39
3:Cat 优势
实时处理:信息的价值会随时间锐减,尤其是事故处理过程中
全量数据:全量采集指标数据,便于深度分析故障案例
高可用:故障的还原与问题定位,需要高可用监控来支撑
故障容忍:故障不影响业务正常运转、对业务透明
高吞吐:海量监控数据的收集,需要高吞吐能力做保证
可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统
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='系统告警的配置';
- 修改/data/appdatas/cat下的client.xml
- 修改/data/appdatas/cat下的datasources.xml
3
1s
10m
1000
com.mysql.jdbc.Driver
kunzai
FFgL5O9HCe6PK!RE
- 将[cat-alpha-3.0.0.war]改为[cat.war]部署到tomcat下启动,也可以修改端口,这里我用的是9090
集成cat3.0服务
com.dianping.cat
cat-client
3.0.0
org.springframework
spring-context
org.slf4j
slf4j-api
ch.qos.logback
logback-core
ch.qos.logback
logback-classic
javax.servlet
javax.servlet-api
provided
# 项目的名称
app.name=penguin-support-cat
cat的java的使用
Cat Java 客户端支持 JDK 1.6 及以上版本
<dependency>
<groupId>com.dianping.catgroupId>
<artifactId>cat-clientartifactId>
<version>${cat.version}version>
dependency>
如果没有使用maven管理依赖,可以直接复制 jar/cat-client-3.0.0.jar 到项目 WEB_INF/lib 路径下。
一些准备工作需要在初始化 cat client
之前完成。
然后你需要在你的项目中创建 src/main/resources/META-INF/app.properties
文件, 并添加如下内容:
app.name={appkey}
appkey 只能包含英文字母 (a-z, A-Z)、数字 (0-9)、下划线 (_) 和中划线 (-)
现在java的cat client会自动懒加载,已经没有必要手动初始化客户端。
Transaction t = Cat.newTransaction("URL", "pageName");
try {
Cat.logEvent("URL.Server", "serverIp", Event.SUCCESS, "ip=${serverIp}");
Cat.logMetricForCount("metric.key");
Cat.logMetricForDuration("metric.key", 5);
yourBusiness();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
t.setStatus(e);
Cat.logError(e);
} finally {
t.complete();
}
为了避免忘记关闭 Transaction, 建议在 finally 代码块中执行 complete。
Transaction t = Cat.newTransaction("URL", "pageName");
try {
yourBusiness();
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
t.setStatus(e);
Cat.logError(e);
} finally {
t.complete();
}
我们提供了一系列 API 来对 Transaction 进行修改。
这些 API 使用很方便,参考如下代码:
Transaction t = Cat.newTransaction("URL", "pageName");
try {
t.setDurationInMillis(1000);
t.setTimestamp(System.currentTimeMillis());
t.setDurationStart(System.currentTimeMillis() - 1000);
t.addData("content");
t.setStatus(Transaction.SUCCESS);
} catch (Exception e) {
t.setStatus(e);
Cat.logError(e);
} finally {
t.complete();
}
在使用 Transaction API 时,你可能需要注意以下几点:
addData
多次,添加的数据会被 &
连接起来。duration
和 durationStart
是没有意义的,尽管我们在样例中这样做了。记录一个事件。
# Log a event with success status and empty data.
Cat.logEvent("URL.Server", "serverIp");
# Log an event with given status and given data.
Cat.logEvent("URL.Server", "serverIp", Event.SUCCESS, "ip=${serverIp}");
记录一个带有错误堆栈信息的 Error。
Error 是一种特殊的事件,它的 type
取决于传入的 Throwable e
.
e
是一个 Error
, type
会被设置为 Error
。e
是一个 RuntimeException
, type
会被设置为 RuntimeException
。type
会被设置为 Exception
。同时错误堆栈信息会被收集并写入 data
属性中。
try {
1 / 0;
} catch (Throwable e) {
Cat.logError(e);
}
你可以向错误堆栈顶部添加你自己的错误消息,如下代码所示:
Cat.logError("error(X) := exception(X)", e);
尽管 name
默认会被设置为传入的 Throwable e
的类名,你仍然可以使用这个 API 来复写它。
Exception e = new Exception("syntax error");
Cat.logErrorWithCategory("custom-category", e);
就像 logError
一样,你也可以向错误堆栈顶部添加你自己的错误消息:
Cat.logErrorWithCategory("custom-category", "?- X = Y, Y = 2", e);
记录业务指标的总和或平均值。
# Counter
Cat.logMetricForCount("metric.key");
Cat.logMetricForCount("metric.key", 3);
# Duration
Cat.logMetricForDuration("metric.key", 5);
我们每秒会聚合 metric。
举例来说,如果你在同一秒调用 count 三次(相同的 name),我们会累加他们的值,并且一次性上报给服务端。
在 duration
的情况下,我们用平均值来取代累加值。
更多集成方案,请参考框架埋点方案集成。