前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >cat监控实现腾讯云短信告警

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

原创
作者头像
GavinWang
修改2020-05-29 16:57:58
9.9K0
修改2020-05-29 16:57:58
举报
文章被收录于专栏:xxl-jobxxl-job

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.png
image.png

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

告警服务配置

image.png
image.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.png
image.png

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

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

福利

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • cat介绍
    • cat优势
    • cat告警配置
      • 告警策略
        • 告警服务配置
          • 应用告警配置
            • 福利
            相关产品与服务
            短信
            腾讯云短信(Short Message Service,SMS)可为广大企业级用户提供稳定可靠,安全合规的短信触达服务。用户可快速接入,调用 API / SDK 或者通过控制台即可发送,支持发送验证码、通知类短信和营销短信。国内验证短信秒级触达,99%到达率;国际/港澳台短信覆盖全球200+国家/地区,全球多服务站点,稳定可靠。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档