191225-Quick-Alarm 钉钉报警支持

文章目录
  1. 1. 钉钉报警支持
  2. 2. 测试使用
  3. 3. 相关信息
  • II. 其他
    1. 1. 一灰灰Blog: https://liuyueyi.github.io/hexblog
    2. 2. 声明
    3. 3. 扫描关注
  • Quick-Alarm时隔一年半,新增钉钉报警支持,在原有的项目基础上,新增报警规则比较简单;下面介绍一下实现与使用姿势

    1. 钉钉报警支持

    Quick-Alarm系统提供基于SPI方式进行报警方式的扩展,当我们需要新增一种报警方式时,实现接口IExecute,并注册spi文件即可

    所以我们的DingdingExecute实现如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class DingdingExecute implements IExecute {

    @Override
    public void sendMsg(List<String> users, String title, String msg) {
    for (String user : users) {
    DingdingPublisher.sendMessage(title, msg, user);
    }
    }
    }

    具体的钉钉推送,抽象了一个辅助类,关于钉钉机器人的使用姿势,可以参考一下官方文档: 获取自定义机器人webhook

    从官方文档中,调用钉钉机器人,实际上就是向一个特定的url,发送post请求;http请求工具这里选择了 OkHttp 这个库,具体实现代码如下

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    public class DingdingPublisher {
    private static final String TEMPLATE = "title:\t%s\n\ncontent:\t%s";
    private static final Logger logger = LoggerFactory.getLogger(DingdingPublisher.class);
    private static final String DING_TALK_URL = "https://oapi.dingtalk.com/robot/send?access_token=";
    private static final MediaType JSON;
    private static OkHttpClient okHttpClient;

    static {
    okHttpClient = new OkHttpClient();
    JSON = MediaType.get("application/json; charset=utf-8");
    }

    public static void sendMessage(String title, String content, String token) {
    String msg = String.format(TEMPLATE, title, content);

    try {
    doPost(msg, token);
    } catch (Exception e) {
    logger.error("failed to publish msg: {} to DingDing! {}", msg, e);
    }
    }

    public static String doPost(String msg, String token) throws IOException {
    RequestBody body = RequestBody.create(buildTextMsgBody(msg), JSON);

    try (Response response = okHttpClient
    .newCall(new Request.Builder().url(DING_TALK_URL + token).post(body).build()).execute()) {
    return response.body().string();
    }
    }

    private static String buildTextMsgBody(String content) {
    JSONObject msg = new JSONObject();
    msg.put("msgtype", "text");
    JSONObject text = new JSONObject();
    text.put("content", content);
    msg.put("text", text);
    return msg.toJSONString();
    }
    }

    上面基本上就完成了一个报警器的代码实现,接下来别忘了需要注册,在资源目录下,新建文件夹 META-INF/services(注意上面是两层目录), 添加文件com.hust.hui.alarm.core.execut.api.IExecute, 文件内容如下

    1
    com.hust.hui.alarm.plugin.dingding.DingdingExecute

    2. 测试使用

    使用钉钉报警时,需要先有一个自定义的钉钉机器人,可以在一个群里面申请,会获得一个token;然后将这个token 配置到我们的预警规则里面

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    {
    "XXX,YYY": {
    "level": "LOG",
    "autoIncEmergency": true,
    "max": 30,
    "min": 3,
    "threshold": [
    {
    "level": "DINGDING",
    "threshold": 10,
    "max": 12,
    "users": [
    "请用实际的token替换!!!"
    ]
    }
    ],
    "users": [
    "yihui"
    ]
    }
    }

    在上面的配置中,所以我们需要在users里面填写你的机器人token,这个需要额外注意;

    此外新版的钉钉机器人有三种安全校验方式

    • 关键词:需要你的报警内容中,包含对应的关键字
    • 加签:暂时不支持这种场景,感觉意义不大
    • ip白名单:确保使用的机器ip在白名单内部
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public static void main(String[] args) throws InterruptedException {
    // 测试异常升级的case
    // 计数 [10 - 12) 钉钉报警
    for (int i = 0; i < 40; i++) {
    new Thread(new Runnable() {
    @Override
    public void run() {
    AlarmWrapper.getInstance().sendMsg("YYY", "异常报警升级测试");
    }
    }).start();
    }

    Thread.sleep(1000 * 600);
    }

    3. 相关信息

    相关博文

    1. 报警系统QuickAlarm总纲
    2. 报警系统QuickAlarm之报警执行器的设计与实现
    3. 报警系统QuickAlarm之报警规则的设定与加载
    4. 报警系统QuickAlarm之报警规则解析
    5. 报警系统QuickAlarm之频率统计及接口封装
    6. 报警系统QuickAlarm使用手册
    7. 报警系统QuickAlarm之默认报警规则扩展

    项目源码

    II. 其他

    1. 一灰灰Bloghttps://liuyueyi.github.io/hexblog

    一灰灰的个人博客,记录所有学习和工作中的博文,欢迎大家前去逛逛

    2. 声明

    尽信书则不如,已上内容,纯属一家之言,因个人能力有限,难免有疏漏和错误之处,如发现bug或者有更好的建议,欢迎批评指正,不吝感激

    3. 扫描关注

    一灰灰blog

    QrCode

    评论

    Your browser is out-of-date!

    Update your browser to view this website correctly. Update my browser now

    ×