✎…钉钉机器人之异常监控
- 看到有同学在网上说可以给自己的项目或者公司的项目接入异常通知机器人🤨
试想在周末休息或者晚上正在嗨的时候,突然公司运营或产品电话怼过来说系统有个紧急的BUG需要处理,这时候你正在嗨又不想去看这些问题,何不在发现之前就把它处理掉呢!
接入方式
一、钉钉接入
- 先说说钉钉接入,钉钉 官方文档他这个有几种方式(text、link、markdown、整体跳转ActionCard、独立跳转ActionCard、FeedCard类型)这里作者演示的是markdown类型
-
注册钉钉机器人 创建access_token
-
选择自定义机器人
-
添加机器人
-
设置机器人名字随便叫,群组就选择你拉的群组 大于2个人开可以拉群,安全设置里面关键字可以加也可以不加,我这边加了一个 收到这个关键字就是转发到群里
-
最后效果就是:
-
点击机器人设置拿access_token
-
有了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
效果就是这样:
到这里钉钉接入就完成了!捕获全局异常 就可以使用啦 线上排查问题很方便!
二、微信接入
-
这种方式接入很简单 目前使用的是 方糖:Server酱
具体接入方法和钉钉类似先注册 然后微信扫码绑定 线上出问题就会以公众号方式推送过来Api测试具体代码如下(这里发送的也是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);
}
}
具体效果: