一、常见的报警方式
1、短信或者电话报警
这样的报警方式更适合高级别的报警提醒,用于处理紧急情况。出现级别不高而又频繁地发送短信会让人产生排斥感,而且电话或者短信的报警方式也存在一定的成本。
2、邮件报警
邮件报警更适用于工作时的提醒,但是系统往往是不能区分是不是在工作,有时候夜间的报警邮件也很难及时关注到,所以说邮件报警也存在一定的局限性。
3、钉钉报警
随着钉钉越来越普及,很多公司都已经使用钉钉。员工在公司需要使用钉钉管理自己的考勤以及进行工作上的沟通,如果将监控报警信息推送到钉钉上其实就很方便的。不过也存在有的企业用的是其他沟通工具,不过对于报警推送到沟通软件上的原理都是类似的,接下来我们以钉钉作为模版来讲解如何进行报警信息的推送。
二、配置钉钉机器人
1、打开机器人管理页面
以 PC 端为例,打开 PC 端钉钉,进入首页面点击头像,在弹出框里选择机器人管理,打开管理页面后可以选择自定义,如下图所示:
2、添加机器人
在打开的机器人详情页面点击添加按钮,如下图所示:
3、配置机器人信息
在打开的添加机器人页面输入机器人名字,选择要接收报警的钉钉群 ,设置机器人头像。根据需要勾选安全设置等就可以,点击完成之后,在页面拷贝出 Webhook 地址保存好,向这个地址发送 HTTP POST 请求,设置的 SkyWalking 钉钉报警群便能收到钉钉报警消息,如下图所示:
配置好之后我们可以看到设置报警的钉钉群“SkyWalking 钉钉报警”出现了报警机器人消息,如下图所示:
我们可以用 Linux 命令行工具 curl 快速验证是否可以推送成功,curl 命令行示意如下:
[root@JD ~]# curl 'https://oapi.dingtalk.com/robot/send?access_token=xxxxxxx' -H 'CONTENT-TyPE: application/json' -d '{"msgtype": "text","text": {"content": "业务报警"}}'
{"errcode":0,"errmsg":"ok"}
4、SkyWalking与钉钉报警结合
上述已经配置完成了钉钉机器人,那如何将 SkyWalking 的报警信息自动推送到钉钉机器人呢?我们可以实现一个接口作为它们沟通的“桥梁”。
首先在 pom 里面引入相关的 jar 包,如下所示:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>alibaba-dingtalk-service-sdk</artifactId>
</dependency>
然后自定义 DingTalkUtils 工具类,暴露接口访问路径 /dingdingAlarm。
@RequestMapping(value = "/dingdingAlarm", method = RequestMethod.POST)
public void alarm(@RequestBody List<AlarmDto> alarmList){
//示意代码
alarmList.forEach(alarm-> {
DingTalkUtils.sendMsg(alarm.getAlarmMessage());
});
}
5、SkyWalking告警推送到钉钉
SkyWalking 提供了告警的配置,我们可以很方便地配置上面暴露的接口。在 SkyWalking 程序包里的 config 文件夹下有个 alarm-settings.yml 文件,该文件专门用来配置相关的报警。在该配置文件中我们可以搜索到 webhooks,把上面暴露的接口写上去就好了。
webhooks:-http://ip:port/dingdingAlarm
接下来我们测试下,比如 auth 服务获取验证码的接口出现错误,我们是可以在 SkyWalking 追踪页面清楚地看到的。同时对于其他相关的业务同学,也都可以在钉钉群收到报警信息,这样的方式在实际工作中非常实用。业务报错图和钉钉报警图如下所示:
文章将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发。