目录
CAT配置页面
一、项目配置信息
1、项目基本信息
- CAT上项目名称:项目接入CAT后的唯一标识,来识别自己
- 事业部:项目所属事业部
- 产品线:项目所属产品线
- 负责人:项目负责人,该项不做为告警联系人
- 项目组邮件:项目负责人邮件,或项目组产品线邮件,多个邮箱由英文逗号分割,不要留有空格;作为发送告警邮件、微信的依据
- 项目组号码:项目负责人手机号;多个号码由英文逗号分隔,不要留有空格;作为发送告警短信的依据
2、机器分组配置
可以聚合显示同一个项目多个IP的信息,
二、应用监控配置
1、业务监控配置
在系统中进行metric埋点,例如:
·记录开户人数logMetricForCount(“入账”)。
·记录投资总额logMetricForSum(“入账金额”,enterAccountAmount)。
·记录平均投资金额logMetricForDuration(“入账金额”,enterAccountAmount)
(单位时间默认为1分钟)
在应用监控配置下的业务监控配置中进行配置:
显示次数曲线需要设置logMetricForCount
显示平均曲线需要设置logMetricForDuration
显示求和曲线需要设置logMetricForSum
添加业务大盘标签会进行基线告警触发告警策略中的business类型的警告。
“当前值”表示当前实际值,“基线值”表示根据历史趋势算出来当天的基准线
2、业务标签配置
3、心跳报表展示
三、应用告警配置
1、Transaction告警
Transaction埋点后,设置相应告警条件
以上表示 如果在一分钟之内,该方法被触发超过1次,则会在这一分钟结束时触发告警。
- 监控最近分钟数。设定时间后(单位为分钟),当指标在设定的最近的时间长度内连续触发了监控规则,才会发出警报。比如最近分钟数为3,表明连续三分钟的数组都满足条件才告警。如果分钟数为1,表示最近的一分钟满足条件就告警
埋点方法:
public ResponseBean getApplyById(Integer id) {
Transaction transaction = Cat.newTransaction("ApplyTestTransaction","applyTestCount");
OrderInfoVO orderInfoVO = new OrderInfoVO();
orderInfoVO.setChannelPid("23123123");
orderInfoVO.setId(id);
orderInfoVO.setChannelName("zhangsan");
try{
transaction.setStatus(Transaction.SUCCESS);
int m = 100/id;
return getResponseBean().setCode(RC.SUCCESS).setData(m);
} catch (Exception e) {
logger.error("errorrrr");
Cat.logError(e);
transaction.setStatus(e);
transaction.addData("param orderVO",orderInfoVO);
} finally {
transaction.complete();
}
return getResponseBean().setCode(RC.SUCCESS).setData(123);
}
当选择指标为失败率的时候,阈值填的数就是失败率,
例如 失败率,最大值,0.5,即失败率不能超过50%
[CAT Transaction告警] [项目: o2o-business-oms] [监控项: ApplyTestTransaction-applyTestCount-failRatio],[CAT Transaction告警: o2o-business-oms ApplyTestTransaction applyTestCount] : [实际值:0.667 ] [最大阈值: 0.5 ][告警时间:2019-03-08 14:20:05]<br/>[时间: 2019-03-08 14:20]
<a href='http://cat-web-server/cat/r/t?domain=o2o-business-oms&type=ApplyTestTransaction&name=applyTestCount&date=2019030814'>点击此处查看详情</a><br/>
2、Event告警
埋点方法:
public void eventTest() {
Event event = Cat.newEvent(CatEventTypeNamePOSTLOAN_REPAYMENT_PLAN_TASK, "synCapitalBill");
try {
event.setStatus(Transaction.SUCCESS);
} catch (Exception e2) {
event.setStatus(e2);
logger.error("eventTest error",e2);
} finally {
event.complete();
}
}
}
配置监控规则和Transaction一致
3、异常告警配置
4、心跳告警配置
四、全局系统配置
1、告警策略
告警服务器配置
只有配置为告警服务器的机器,才会执行告警逻辑;只有配置为发送服务器的机器,才会发送告警。
首先修改全局系统配置-服务端配置,对告警服务器增加<property name="alarm-machine" value="true"/>
配置、以及<property name="send-machine" value="true"/>
配置。
<server id="10.41.42.61">
<properties>
<property name="job-machine" value="true"/>
<property name="send-machine" value="true"/>
<property name="alarm-machine" value="true"/>
</properties>
</server>
告警策略
告警策略:配置某种告警类型、某个项目、某个错误级别,对应的告警发送渠道,以及暂停时间。
举例:下述配置示例,说明对于Transaction告警,当告警项目名为demo_project:
-
当告警级别为error时,发送渠道为邮件、短信、微信,连续告警之间的间隔为5分钟
-
当告警级别为warning时,发送渠道为邮件、微信,连续告警之间的间隔为10分钟
配置示例
<alert-policy>
<type id="Transaction">
<group id="default">
<level id="error" send="mail,weixin" suspendMinute="5"/>
<level id="warning" send="mail,weixin" suspendMinute="5"/>
</group>
<group id="demo-project">
<level id="error" send="mail,weixin,sms" suspendMinute="5"/>
<level id="warning" send="mail,weixin" suspendMinute="10"/>
</group>
</type>
</alert-policy>
配置说明:
- type:告警的类型,可选:Transaction、Event、Business、Heartbeat
- group id属性:group可以为default,代表默认,即所有项目;也可以为项目名,代表某个项目的策略,此时default策略不会生效
- level id属性:错误级别,分为warning代表警告、error代表错误
- level send属性:告警渠道,分为mail-邮箱、weixin-微信、sms-短信
- level suspendMinute属性:连续告警的暂停时间
2、默认告警人
某个告警类型的告警信息(比如Transaction告警),均会发给默认告警接收人
默认告警人的第二个功能是可以直接关闭某种类型的告警。比如,代表不发送Transaction告警。
<alert-config>
<receiver id="Transaction" enable="true">
<email>testUser1@test.com</email>
<phone>12345678901</phone>
<phone>12345678902</phone>
</receiver>
</alert-config>
- receiver id属性:告警的类型,可选:Transaction、Event、Business、Heartbeat
- receiver enable属性:是否开启告警;如果为false,此类别的告警不会发出
- email:默认邮件告警人
- phone:默认短信告警人
3、告警服务端
CAT在生成告警后,调用告警发送中心的Http接口发送告警。CAT自身并不集成告警发送中心,请自己搭建告警发送中心。
<sender-config>
<sender id="mail" url="http://test/" type="post" successCode="200" batchSend="true">
<par id="type=1500"/>
<par id="key=title,body"/>
<par id="re=test@test.com"/>
<par id="to=${receiver}"/>
<par id="value=${title},${content}"/>
</sender>
<sender id="weixin" url="http://test/" type="post" successCode="success" batchSend="true">
<par id="domain=${domain}"/>
<par id="email=${receiver}"/>
<par id="title=${title}"/>
<par id="content=${content}"/>
<par id="type=${type}"/>
</sender>
<sender id="sms" url="http://test/" type="post" successCode="200" batchSend="false">
<par id="jsonm={type:808,mobile:'${receiver}',pair:{body='${content}'}}"/>
</sender>
</sender-config>
配置说明:
需修改如下
自用配置如下
<sender-config>
<sender id="mail" url="http://10.41.42.60:9933/o2o-payment-platform/cat/sendMail/" type="post" successCode="200" batchSend="true">
<par id="type=1500"/>
<par id="key=title,body"/>
<par id="re=smtp.exmail.qq.com"/>
<par id="to=${receiver}"/>
<par id="value=${title},${content}"/>
</sender>
</sender-config>
sendMail接口实现了发送mail的具体逻辑
@RequestMapping(value = "/sendMail") @ResponseBody public void sendMail(HttpServletRequest request, HttpServletResponse response) { Map<String,String[]> requestMap = request.getParameterMap(); SimpleMailMessage message = new SimpleMailMessage(); message.setFrom(mail_sender); message.setTo(requestMap.get("to")[0]); message.setSubject(requestMap.get("value")[0].substring(0,16)); message.setText(requestMap.get("value")[0]); mailSender.send(message); }
receiver取值来自:项目配置信息-项目基本信息-项目组邮件/项目组号码 和全局系统配置- 默认告警人
domain为项目配置信息-项目基本信息-CAT上项目名称
可以通过查看cat的Problem判断邮件失败的原因
- sender id属性:告警的类型,可选:mail、sms、weixin
- sender url属性:告警中心的URL
- sender batchSend属性:是否支持批量发送告警信息
- par:告警中心所需的Http参数。${argument}代表构建告警对象时,附带的动态参数;此处需要根据告警发送中心的需求,将动态参数加入到代码AlertEntity中的m_paras
- 上述的告警服务端配置:主要配置每个告警渠道的url规则、参数列表、参数占位符、返回码验证
- MailSender, SmsSender, WeixinSender:配置告警标题、内容的生成逻辑
- AlertEntity:配置所需的参数
com.dianping.cat.alarm.spi.sender.AbstractSender$AlertSendException | ERROR | http://10.41.42.57:9933/demoService/cat/sendMail---type=1500&key=title,body&re=smtp.exmail.qq.com&to=xxx@qq.com&value=%5B%E5%91%8A%E8%AD%A6%E6%81%A2%E5%A4%8D%5D+%5B%E5%91%8A%E8%AD%A6%E7%B1%BB%E5%9E%8B+Transacation%E5%91%8A%E8%AD%A6%5D%5B+ApplyTestTransaction-applyTestCount-count%5D,%5B%E5%91%8A%E8%AD%A6%E5%B7%B2%E6%81%A2%E5%A4%8D%5D%5B%E6%81%A2%E5%A4%8D%E6%97%B6%E9%97%B4%5D2019-03-07+19%3A07 com.dianping.cat.alarm.spi.sender.AbstractSender$AlertSendException at com.dianping.cat.alarm.spi.sender.AbstractSender.recordSendLog(AbstractSender.java:154) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpPostSend(AbstractSender.java:131) at com.dianping.cat.alarm.spi.sender.AbstractSender.httpSend(AbstractSender.java:140) at com.dianping.cat.alarm.spi.sender.MailSender.sendEmail(MailSender.java:76) at com.dianping.cat.alarm.spi.sender.MailSender.send(MailSender.java:48) at com.dianping.cat.alarm.spi.sender.SenderManager.sendAlert(SenderManager.java:58) at com.dianping.cat.alarm.spi.AlertManager.sendRecoveryMessage(AlertManager.java:205) at com.dianping.cat.alarm.spi.AlertManager.access$400(AlertManager.java:54) at com.dianping.cat.alarm.spi.AlertManager$RecoveryAnnouncer.run(AlertManager.java:248) at java.lang.Thread.run(Thread.java:745) at org.unidal.helper.Threads$RunnableThread.run(Threads.java:294) |
4、服务端配置
通过服务端配置,配置每台CAT服务器的职责。
配置的sample如下: id="default"是默认的配置信息,server id="10.1.1.1" 如下的配置是表示10.1.1.1这台服务器的节点配置覆盖default的配置信息。default配置每一台机器,id如果对应一个ip则为该机器的个性化配置;
<?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="10.1.1.1:8080,10.1.1.2:8080,10.1.1.3:8080"/>
</properties>
<storage local-base-dir="/data/appdatas/cat/bucket/" max-hdfs-storage-time="15" local-report-storage-time="7" local-logivew-storage-time="7">
<hdfs id="logview" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="logview"/>
<hdfs id="dump" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="dump"/>
<hdfs id="remote" max-size="128M" server-uri="hdfs://10.1.77.86/user/cat" base-dir="remote"/>
</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="10.1.1.1">
<properties>
<property name="job-machine" value="true"/>
<property name="alarm-machine" value="true"/>
<property name="send-machine" value="true"/>
</properties>
</server>
</server-config>
配置说明:
server模型:代表一台机器的配置。如果id为default,代表默认配置;如果id为ip,代表该台服务器的配置
- property local-mode : 定义服务是否为本地模式(开发模式),在生产环境时,设置为false,启动远程监听模式。默认为 false;
- property hdfs-machine : 定义是否启用HDFS存储方式,默认为 false;
- property job-machine : 定义当前服务是否为报告工作机(开启生成汇总报告和统计报告的任务,只需要一台服务机开启此功能),默认为 false;
- property alarm-machine : 定义当前服务是否为报警机(开启各类报警监听,只需要一台服务机开启此功能),默认为 false;
- property send-machine : 定义当前服务告警是否发送(当时为了解决测试环境开启告警线程,但是最后告警不通知,此配置后续会逐步去除,建议alarm-machine开启为true的时候,这个同步为true)
storage模型: 定义数据存储配置信息
- property local-report-storage-time : 定义本地报告存放时长,单位为(天)
- property local-logivew-storage-time : 定义本地日志存放时长,单位为(天)
- property local-base-dir : 定义本地数据存储目录
- property hdfs : 定义HDFS配置信息,便于直接登录系统
- property server-uri : 定义HDFS服务地址
- property console : 定义服务控制台信息
- property remote-servers : 定义HTTP服务列表,(远程监听端同步更新服务端信息即取此值)
- ldap : 定义LDAP配置信息(这个可以忽略)
- ldapUrl : 定义LDAP服务地址(这个可以忽略)
注意配置一台机器 alarm-machine, send-machine设为true
5、消息采样配置
通过消息采样配置,配置每个项目的消息采样率。客户端会定期下拉改配置,根据采样率来采样上报。
采样率不会影响Transaction、Event的汇总指标。当某个项目数据量较大时,建议按需配置采样率
<?xml version="1.0" encoding="utf-8"?>
<sample-config>
<domain id="cat" sample="1.0"/>
<domain id="javacat" sample="1.0"/>
</sample-config>
- domain id属性:项目名
- sample:项目的采样率
6、客户端路由
路由配置是 CAT 集群流量负载均衡最重要的一环。路由配置提供了默认机器列表、多机房划分、地域划分等基本功能,路由选择的优先级为:同机房 > 同地域 > 默认机器 > 备用机器。
<?xml version="1.0" encoding="utf-8"?>
<router-config backup-server="10.40.40.191" backup-server-port="2280">
<default-server id="10.40.40.191" weight="1.0" port="2280" enable="false"/>
<default-server id="10.40.46.79" weight="1.0" port="2280" enable="true"/>
<default-server id="10.40.40.192" weight="1.0" port="2280" enable="true"/>
<network-policy id="default" title="default" block="false" server-group="default_group">
</network-policy>
<server-group id="default_group" title="default-group">
<group-server id="10.40.46.79"/>
<group-server id="10.40.40.192"/>
</server-group>
<domain id="cat">
<group id="default">
<server id="10.40.46.79" port="2280" weight="1.0"/>
<server id="10.40.40.192" port="2280" weight="1.0"/>
</group>
</domain>
</router-config>
default-server : CAT 集群机器列表
* enable : true 表示机器处于在线状态,主动对外提供服务;false 表示不对外主动提供服务,可用于定向测试、灰度测试以及备用应急处理。
* weight : 机器权重比例。在定期构建路由报表时,会根据权重以及机器丢失数据量进行路由调整,具体参考 RouterConfigAdjustor。
network-policy : 网络划分,与公司内部网段划分有关。
* network : 具体的网段划分。 例如 <network id="10.8.101.0/24"/> 对应在 <server-group id="sh_group1" title="上海机房一组"/> 中寻找最佳路由。
server-group : CAT 集群按地域、机房等策略划分,根据不同场景需求按需配置。
domain id为项目配置信息-项目基本信息中配置的项目名称
使用路由配置中 domain 配置项可以针对具体应用指定路由,常用于流量均衡调整、灰度测试等。
上述路由配置示例中应用 service-1 配置如下:
<domain id="service-1">
<group id="default">
<server id="10.8.101.1" port="2280" weight="1.0"/>
<server id="10.8.101.2" port="2280" weight="1.0"/>
<server id="10.8.101.3" port="2280" weight="1.0"/>
</group>
<group id="shanghai">
<server id="10.8.101.1" port="2280" weight="1.0"/>
<server id="10.8.101.2" port="2280" weight="1.0"/>
<server id="10.8.101.3" port="2280" weight="1.0"/>
</group>
<group id="beijing">
<server id="10.2.170.1" port="2280" weight="1.0"/>
<server id="10.2.170.3" port="2280" weight="1.0"/>
<server id="10.2.170.5" port="2280" weight="1.0"/>
</group>
</domain>
如果应用 service-1 集群中某个 IP 属于 beijing 的 server-group ,那么将优先使用 beijing 分组所提供的路由列表。
配置说明:
- backup-server属性:设置为当前服务器对外IP地址,端口固定为2280
- default-server属性:定义可跳转的路由地址,可以设置多个。default-server的id属性配置可路由的cat-home服务IP地址,端口固定为2280;若需要禁用路由地址,可把enable设置为false
- network-policy 这边可以配置多个不同网段,表示这个网段使用server-group的cat节点,这里面的作用主要是当多机房部署cat的时候,可以将cat分为多个多个子集群,然后多个子集群处理不同的客户端,避免跨专线访问
- domain id=cat 这部分主要是定制路由,当发现一些项目数据量特别大,或者其他场景,可以将这写domain的监控请求单独隔离处理