如何创建钉钉群的告警机器人

521 阅读3分钟

这是我参与11月更文挑战的第25天,活动详情查看:2021最后一次更文挑战

告警在我们的程序中有多么重要就不用我多说了吧,每个程序员多多少少肯定都写过一些系统告警,不管是流量告警、异常告警、业务告警、项目告警等等。告警也分为前端和后端的,前端可以通过监控线上的报错,捕捉到报错信息,比如出现错误提示、无法提交信息、页面报错、界面卡顿、异常退出等等。而后端的告警比如接口异常返回、定时任务失败、空指针等。

今天主要介绍后端的监控及告警提醒,告警载体是钉钉群的机器人。

//配置dingding告警的请求地址
dingding:
  token: https://oapi.dingtalk.com/robot/send?access_token=

// 在maven的pom文件中加入以下的dingtalk的包资源
 <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>alibaba-dingtalk-service-sdk</artifactId>
            <version>1.0.1</version>
        </dependency>
​
​
//在代码中引入dingtalk包
package com.dingtalk.api;

其实原理很简单,钉钉群的机器人就是一个开放的API接口,通过发送http请求给钉钉,就能将想要展示的信息通过机器人的方式展示出来。

这样的机器人通知可以是手动触发,也可以是定时发送,或者某种逻辑下触发,这都是通过程序去控制的。

请求的接口地址在操作文档中都会有,比如下面的oapi.dingtalk.com/robot/send?… 这个就是请求地址,而每个机器人都会有不同的token,这个最好保密,在创建机器人的时候会提供的。

然后就是请求体的内容了,可以看到请求体的类型是OapiRobotSendRequest对象,看下源码中的具体方法,比如指定参数类型为markdown,即内容格式是markdown,不了解markdown格式的同学可以自行百度。在markdown格式中可以设置title和text内容。

最后通过DingTalkClient这个对象发送指定的url请求,这个也是机器人jar包里面的主要类,封装的就是发送http请求的功能,所以只要按照规定传对应的数据就可以获得返回结果。

//主要的类方法如下
public class DingTalkServiceImpl implements DingTalkService {
 @Override
    public OapiRobotSendResponse sendProjectTestVisitReport(String accessToken, ProjectTestVisitInfo projectTestVisitInfo){
    // 机器人的Webhook地址  获取到Webhook地址后,用户可以向这个地址发起HTTP POST 请求,即可实现给该钉钉群发送消息。
 String serverUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + accessToken;
​
DingTalkClient client = new DefaultDingTalkClient(serverUrl);
        OapiRobotSendRequest request = new OapiRobotSendRequest();
        request.setMsgtype("markdown");
        OapiRobotSendRequest.Markdown markdown = new OapiRobotSendRequest.Markdown();
        markdown.setTitle("这是本告警内容的标题 ---钉钉告警---");
        StringBuffer text = new StringBuffer();
        text.append("#### **"+ "告警内容--**\n");
        markdown.setText(text.toString());
        request.setMarkdown(markdown);
​
        OapiRobotSendRequest.At at = new OapiRobotSendRequest.At();
        at.setIsAtAll(true);
        request.setAt(at);
        log.info("打印告警内容:" + text.toString());
​
        log.info("当前设置的是全员发送");
        OapiRobotSendResponse response = null;
        try {
            response = client.execute(request);
        } catch (ApiException e) {
            e.printStackTrace();
        }
        return response;
        
        }
        
        }
配置钉钉机器人说明文档:

developers.dingtalk.com/document/ro…

如图选择要配置的机器人类型,按照说明操作即可。

屏幕快照 2021-11-27 下午11.04.14.png

创建机器人通知可以是手动通知或者自动通知,根据需要写到代码里即可。