cat监控实现腾讯云短信告警

2020-05-29 16:57:58 浏览数 (2)

cat介绍

CAT(Central Application Tracking),是基于 Java 开发的分布式实时监控系统。CAT在基础存储、高性能通信、大规模在线访问、服务治理、实时监控、容器化及集群智能调度等领域提供业界领先的、统一的解决方案。CAT 目前在美团的产品定位是应用层的统一监控组件。

cat优势

  • 实时处理:信息的价值会随时间锐减,尤其是事故处理过程中
  • 全量数据:最开始的设计目标就是全量采集,全量的好处有很多
  • 高可用:所有应用都倒下了,需要监控还站着,并告诉工程师发生了什么,做到故障还原和问题定位
  • 故障容忍:CAT 本身故障不应该影响业务正常运转,CAT 挂了,应用不该受影响,只是监控能力暂时减弱
  • 高吞吐:要想还原真相,需要全方位地监控和度量,必须要有超强的处理吞吐能力
  • 可扩展:支持分布式、跨 IDC 部署,横向扩展的监控系统CAT支持的监控消息类型
  • Transaction 适合记录跨越系统边界的程序访问行为,比如远程调用,数据库调用,也适合执行时间较长的业务逻辑监控,Transaction用来记录一段代码的执行时间和次数
  • Event 用来记录一件事发生的次数,比如记录系统异常,它和transaction相比缺少了时间的统计,开销比transaction要小
  • Heartbeat 表示程序内定期产生的统计信息, 如CPU利用率, 内存利用率, 连接池状态, 系统负载等
  • Metric 用于记录业务指标、指标可能包含对一个指标记录次数、记录平均值、记录总和,业务指标最低统计粒度为1分钟

cat告警配置

cat提供了合理、灵活的监控规则可以帮助更快、更精确的发现业务线上故障。告警规则介绍参考https://github.com/dianping/cat/wiki/alarm

告警策略

告警策略:配置某种告警类型、某个项目、某个错误级别,对应的告警发送渠道,以及暂停时间。

举例:下述配置示例,说明对于Transaction告警,当告警项目名为demo_project:

当告警级别为error时,发送渠道为邮件、短信、微信,连续告警之间的间隔为5分钟

当告警级别为warning时,发送渠道为邮件、微信,连续告警之间的间隔为10分钟

image.pngimage.png

这里有一个问题,cat的告警渠道虽然提供了邮件、短信、微信等类型,但是他实际上是没有帮你实现的的。需要自己搭建一个http服务来实现对应的告警。

告警服务配置

image.pngimage.png

短信发送的写法如下(采用nodeJS、egg实现):

代码语言:txt复制
const Service = require('egg').Service;
const tencentcloud = require("tencentcloud-sdk-nodejs");
class HomeService extends Service {

    async sendSMS(alamParameter) {
        
        return new Promise((resolve,reject)=>{
            try{
                // 导入 SMS 模块的 client models
                const smsClient = tencentcloud.sms.v20190711.Client;
                const models = tencentcloud.sms.v20190711.Models;

                const Credential = tencentcloud.common.Credential;
                const ClientProfile = tencentcloud.common.ClientProfile;
                const HttpProfile = tencentcloud.common.HttpProfile;

                /* 必要步骤:
                * 实例化一个认证对象,入参需要传入腾讯云账户密钥对 secretId 和 secretKey
                * 本示例采用从环境变量读取的方式,需要预先在环境变量中设置这两个值
                * 您也可以直接在代码中写入密钥对,但需谨防泄露,不要将代码复制、上传或者分享给他人
                * CAM 密匙查询: https://console.cloud.tencent.com/cam/capi
                * */
                let cred = new Credential("你的SecretId", "你的SecretKey");
                /* 非必要步骤:
                * 实例化一个客户端配置对象,可以指定超时时间等配置 */
                let httpProfile = new HttpProfile();
                /* SDK 默认使用 POST 方法
                * 如需使用 GET 方法,可以在此处设置,但 GET 方法无法处理较大的请求 */
                httpProfile.reqMethod = "POST";
                /* SDK 有默认的超时时间,非必要请不要进行调整
                * 如有需要请在代码中查阅以获取最新的默认值 */
                httpProfile.reqTimeout = 30;
                httpProfile.endpoint = "sms.tencentcloudapi.com";

                // 实例化一个 client 选项,可选,无特殊需求时可以跳过
                let clientProfile = new ClientProfile();
                /* SDK 默认用 TC3-HMAC-SHA256 进行签名,非必要请不要修改该字段 */
                clientProfile.signMethod = "HmacSHA256";
                clientProfile.httpProfile = httpProfile;

                /* SDK 会自动指定域名,通常无需指定域名,但访问金融区的服务时必须手动指定域名
                * 例如 SMS 的上海金融区域名为 sms.ap-shanghai-fsi.tencentcloudapi.com */
                /* 实例化 SMS 的 client 对象
                * 第二个参数是地域信息,可以直接填写字符串 ap-guangzhou,或者引用预设的常量 */
                let client = new smsClient(cred, "ap-guangzhou", clientProfile);

                /* 实例化一个请求对象,根据调用的接口和实际情况,可以进一步设置请求参数
                * 您可以直接查询 SDK 源码确定 SendSmsRequest 有哪些属性可以设置
                * 属性可能是基本类型,也可能引用了另一个数据结构
                * 推荐使用 IDE 进行开发,可以方便地跳转查阅各个接口和数据结构的文档说明 */
                let req = new models.SendSmsRequest();

                /* 基本类型的设置:
                * SDK 采用的是指针风格指定参数,即使对于基本类型也需要用指针来对参数赋值
                * SDK 提供对基本类型的指针引用封装函数
                * 帮助链接:
                * 短信控制台:https://console.cloud.tencent.com/smsv2
                * sms helper:https://cloud.tencent.com/document/product/382/3773 */
                /* 短信应用 ID: 在 [短信控制台] 添加应用后生成的实际 SDKAppID,例如1400006666 */
                req.SmsSdkAppid = "1400376635";
                /* 短信签名内容: 使用 UTF-8 编码,必须填写已审核通过的签名,可登录 [短信控制台] 查看签名信息 */
                req.Sign = "Cat告警";//需要改写为你的签名内容
                /* 短信码号扩展号: 默认未开通,如需开通请联系 [sms helper] */
                req.ExtendCode = "";
                /* 国际/港澳台短信 senderid: 国内短信填空,默认未开通,如需开通请联系 [sms helper] */
                req.SenderId = "";
                /* 用户的 session 内容: 可以携带用户侧 ID 等上下文信息,server 会原样返回 */
                req.SessionContext = "";

                /* 模板 ID: 必须填写已审核通过的模板 ID,可登录 [短信控制台] 查看模板 ID */
                //触发cat告警条件,请查看告警内容{1}
                req.TemplateID = "617255";//需要改下为你的模板ID
                /* 下发手机号码,采用 e.164 标准, [国家或地区码][手机号]
                * 例如 8613711112222, 其中前面有一个 号 ,86为国家码,13711112222为手机号,最多不要超过200个手机号*/
                req.PhoneNumberSet = alamParameter.mobile.map((item)=>{
                    return " 86" item;
                });
                /* 模板参数: 若无模板参数,则设置为空*/
                req.TemplateParamSet = alamParameter.mobile.map((item)=>{
                    return alamParameter.pair.body;
                });
                // 通过 client 对象调用想要访问的接口,需要传入请求对象以及响应回调函数
                client.SendSms(req, function (err, response) {
                    // 请求异常返回,打印异常信息
                    if (err) {
                        console.log(err);
                        resolve(false);
                        return;
                    }
                    // 请求正常返回,打印 response 对象
                    console.log(response.to_json_string());
                    resolve(true)
                });
                
            }catch(ex){
                console.error(ex);
                resolve(false);
            }
        });
    }
}

module.exports = HomeService;

代码路径

  • 下载代码
代码语言:txt复制
git clone https://github.com/gdwenjun/sms-egg.git 
  • 按照依赖
代码语言:txt复制
npm i
  • 运行代码
代码语言:txt复制
npm run dev
  • 完成上述步骤,发送短信服务就完成了,只需要在告警服务配置上
代码语言:txt复制
<sender id="sms" url="http://127.0.0.1:7001/sendSMS" type="post" successCode="200" batchSend="false">
      <par id="jsonm={type:808,mobile:'${receiver}',pair:{body='${content}'}}"/>
</sender>

应用告警配置

如图,可以是Transaction级别也可以是Event级别,以Transaction为例,点右上角加号可以添加监控项。

type是指自己系统中埋点时,Transaction中填的type。这个自己约定好即可,我这边约定为smsURL。

image.pngimage.png

该监控规则就是说,如果在三分钟以内访问mycat这个项目的任意链接超过20次就会向指定告警人发送。

  • 修改告警策略 image.pngimage.png
  • 告警人设置。 根据告警策略设置sms的告警人,可以指定多个接收人 image.pngimage.png
  • 最终触发告警条件会收到短信
image.pngimage.png

福利

如果你也在使用cat进行短信监控告警功能,可访问下面链接购买优惠腾讯云短信套餐包https://cloud.tencent.com/act/pro/csms?from=12058

0 人点赞