欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Cat应用告警实战

程序员文章站 2022-08-02 08:24:46
1. Cat应用告警实战 1.1. 前言 好像是中间件设计者的通病,文档写的都是面向有一定使用各种中间件经验的人,告警模块中每个参数其实都可以详细解释一下,要不然我们理解起来真的很吃力还容易采坑 1.2. 全局系统配置 1.2.1. 告警策略 如下图所示,告警策略官方有模板,只要适当修改一下即可,这 ......

1. cat应用告警实战

1.1. 前言

  • 好像是中间件设计者的通病,文档写的都是面向有一定使用各种中间件经验的人,告警模块中每个参数其实都可以详细解释一下,要不然我们理解起来真的很吃力还容易采坑

1.2. 全局系统配置

1.2.1. 告警策略

  • 如下图所示,告警策略官方有模板,只要适当修改一下即可,这里我详细解释一下这里涉及到的一些概念,刚接触的人真的可能一脸懵逼
    Cat应用告警实战

  • 首先看到这里指定send为mail,weixin,sms等等是不是很激动,以为它都给你封装好了,你只需配置一下就可以发送告警?别想多了,这里只代表一个个类型,suspendminute代表发送告警间隔时间,避免同样的告警一直发送,而warningerror在这个系统中也多次出现了都是同样的意思,只是代表一种告警类型不要以为是你系统报了error错误或者warn错误它就会报警,而id为transaction则是一种标识,当在别的便签里看到id为该值时就知道了

1.2.2. 默认告警人

  • 如下图,看到id值就知道了和上面的告警策略对应,需要保持相同,email等可以填多个值
    Cat应用告警实战

1.2.3. 告警服务端

  • 如下图,对应了告警策略中mail类型的服务端配置,这里只有url需要改动,也是告警的核心功能,自己写接口去,把发送邮件的接口提供出来然后把地址放这里
    Cat应用告警实战

  • 请注意一点,也是我踩过的坑,看到successcode="200"这个配置了吗?我们提供接口肯定是要有返回值的吧,我没在它的文档里找到交代,在报完错后直接找它的源码,发现了它判断接口调用成功的依据是你返回给它的字符串里包含"200",别怀疑了,连引号也包括,我第一次返回的是个对象属性里存在integer类型的code为200,这都不行,必须是字符串的,所以最简单的返回值如下:

    @requestmapping(value = "/alert/msg")
    public string sendalert(httpservletrequest request) {
        ...
        发送邮件代码,网上一大堆自己抄,省略
        ...
        return "200";
    }

或者code为string类型

1.3. 应用告警配置

1.3.1. transaction告警

  • 如图,可以是transaction级别也可以是event级别,以transaction为例,点右上角加号可以添加监控项
    Cat应用告警实战

  • 因为cat本身提供了一个例子,但同时也可能起到误导作用,它例子的type类型都是url,但是这不是一个可选项,这是一个必填项,而填什么文档有没有交代清楚,导致了我调试很久才反应过来,这里应该填的是我们系统自己埋点时,transaction中填的type,如下

transaction newtransaction(string type, string name) {

或者用注解的时候我们也会指定个type,这里需要填写的就是这个

  • 进入编辑
    Cat应用告警实战
  • 如上图第一点,这里点进去看起来灰蒙蒙的,在一般理解都是不可选择项,但实际上它是可以点开来的,选中状态颜色是会深一点点
  • 这里的几个词的概念它文档同样没解释清楚,一笔带过,这里的执行次数还带歪了我同事,让他以为是在一定时间内错误异常的执行次数达到一定值就会告警,但实际上,它就是个计数器,在自己设置的持续时间内,到达规则指定值就会告警,比如最大值100,持续1分钟,那么1分钟请求200次就会告警,和异常毫无关系
  • 还有响应时间,失败率,最大响应时间等,文档都是一笔带过,或者描述不够详细,最起码的应该告诉我单位是什么吧,虽然毛想想响应时间应该是毫秒级别,失败率应该是个小数,但谁知道失败率你会不会以%为单位乘了个100呢,经过我实际测试,失败率的确是填写的小数,也就是持续时间比如1分钟内,请求失败的数量除以总请求书,所以报错到告警最晚可能会延迟1分钟
  • 至于这持续分钟经测试不能填写小数
  • 还有第二点告警级别,我同事一度以为是代码的报错级别,实际上这里仅仅代表你需要发送告警到哪几个环境以及发送告警的时间间隔