• 看到有同学在网上说可以给自己的项目或者公司的项目接入异常通知机器人🤨

试想在周末休息或者晚上正在嗨的时候,突然公司运营或产品电话怼过来说系统有个紧急的BUG需要处理,这时候你正在嗨又不想去看这些问题,何不在发现之前就把它处理掉呢!

接入方式
一、钉钉接入
  • 先说说钉钉接入,钉钉 官方文档他这个有几种方式(text、link、markdown、整体跳转ActionCard、独立跳转ActionCard、FeedCard类型)这里作者演示的是markdown类型
  1. 注册钉钉机器人 创建access_token
  2. zabbix对接钉钉群 钉钉群链接怎么加入_java

  3. 选择自定义机器人
  4. zabbix对接钉钉群 钉钉群链接怎么加入_异常_02

  5. 添加机器人
  6. zabbix对接钉钉群 钉钉群链接怎么加入_zabbix对接钉钉群_03

  7. 设置机器人名字随便叫,群组就选择你拉的群组 大于2个人开可以拉群,安全设置里面关键字可以加也可以不加,我这边加了一个 收到这个关键字就是转发到群里
  8. zabbix对接钉钉群 钉钉群链接怎么加入_java_04

  9. 最后效果就是:
  10. zabbix对接钉钉群 钉钉群链接怎么加入_异常_05

  11. 点击机器人设置拿access_token
  12. zabbix对接钉钉群 钉钉群链接怎么加入_异常通知_06

  • 有了access_token 开始通过程序接入机器人(这边使用的是JAVA语言)
    直接使用http调用发送模板数据就可以了 这边使用的是markdown类型
package com.cloud.food.config;

import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpUtil;
import com.cloud.food.Json;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * *********************************************************
 *
 * @Author <a href="mailto:xyqierkang@gmail.com">ErKang Qi</a>
 * @Date Created in 2020/8/11 18:04
 * @Title TalkExceptionUtil.java
 * <p>Description: [ 全局 异常通知 ] </p>
 * <p>Blog: https://www.qekang.com</p>
 * <p>Inc:  </p>
 * <p>Copyright:    </p>
 * <p>Department: Product development </p>
 * *********************************************************
 */
@Slf4j
@Component
public class TalkExceptionUtil {

private static String env = "dev";

@Value("${spring.profiles.active}")
    public void setEnv(String env) {
        TalkExceptionUtil.env = env;
    }
    
/**
     * Description: [ 钉钉异常通知 ]
     *
     * @param
     * @param context
     * @return void
     * @Author <a href="mailto:xyqierkang@gmail.com">ErKang Qi</a>
     * @Date Created in 2020/8/11 18:05
     * <p>File:  </p>
     */
    public static void DingTalk(String text, String context) {
        Map<String, Object> mes = new HashMap<>();
        mes.put("title", text);
        mes.put("text", "#### **【系统" + text + "「" + env + "」】** [通知到位](https://www.qekang.com/) \n >" + context.replaceAll("#", ""));
        HashMap<String, Object> params = MapUtil.of("msgtype", "markdown");
        params.put("markdown", mes);
        System.out.println(Json.toString(params));
        String result = HttpUtil.post("https://oapi.dingtalk.com/robot/send?access_token=xxx", Json.toString(params));
        log.info(result);
    }
}
  • 我在这边加了个 环境获取 一般情况我们分为dev-test-prod环境 当然你也可以在机器人设置里面指定服务器IP接收数据 如果是dev或者test不发送数据
    在钉钉文档也说道了 markdown语法支持有限制目前只支持md语法的子集,具体支持的元素如下:
标题
  # 一级标题
  ## 二级标题
  ### 三级标题
  #### 四级标题
  ##### 五级标题
  ###### 六级标题
  
  引用
  > A man who stands for nothing will fall for anything.
  
  文字加粗、斜体
  **bold**
  *italic*
  
  链接
  [this is a link](http://name.com)
  
  图片
  ![](http://name.com/pic.jpg)
  
  无序列表
  - item1
  - item2
  
  有序列表
  1. item1
  2. item2

效果就是这样:

zabbix对接钉钉群 钉钉群链接怎么加入_zabbix对接钉钉群_07

zabbix对接钉钉群 钉钉群链接怎么加入_异常_08

到这里钉钉接入就完成了!捕获全局异常 就可以使用啦 线上排查问题很方便!

二、微信接入
  • 这种方式接入很简单 目前使用的是 方糖:Server酱 具体接入方法和钉钉类似先注册 然后微信扫码绑定 线上出问题就会以公众号方式推送过来Api测试
  • zabbix对接钉钉群 钉钉群链接怎么加入_java_09

  • 具体代码如下(这里发送的也是markdown格式):
package com.cloud.food.config;

import cn.hutool.core.map.MapUtil;
import cn.hutool.http.HttpUtil;
import com.cloud.food.Json;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;

/**
 * *********************************************************
 *
 * @Author <a href="mailto:xyqierkang@gmail.com">ErKang Qi</a>
 * @Date Created in 2020/8/11 18:04
 * @Title TalkExceptionUtil.java
 * <p>Description: [ 全局 异常通知 ] </p>
 * <p>Blog: https://www.qekang.com</p>
 * <p>Inc:  </p>
 * <p>Copyright:    </p>
 * <p>Department: Product development </p>
 * *********************************************************
 */
@Slf4j
@Component
public class TalkExceptionUtil {

private static String env = "dev";

@Value("${spring.profiles.active}")
    public void setEnv(String env) {
        TalkExceptionUtil.env = env;
    }
    
/**
     * Description: [ 微信异常通知 ]
     *
     * @param
     * @param context
     * @return void
     * @Author <a href="mailto:xyqierkang@gmail.com">ErKang Qi</a>
     * @Date Created in 2020/8/11 18:05
     * <p>File:  </p>
     */
    public static void WeChat(String context) {
        Map<String, Object> mes = new HashMap<>();
        mes.put("text", "异常监控「" + env + "」");
        mes.put("desp", "#### **【系统异常监控「" + env + "」】**  [通知到位](https://www.qekang.com/) \n ```" + context + " ```");
        HttpUtil.post("https://sc.ftqq.com/xxx.send", mes);
    }
}

具体效果:

PS:这时候线上出问题你可以提前预知进行修复,不需要等到别人的通知!像之前发邮件的会有视觉疲劳,一天几十封看着就会头大