1.需求背景
监控定时任务是否正常,异常的时候需要通过消息告警,告警方式可以有很多种,本方案通过钉钉方式告警。
2.实现
2.1 添加钉钉机器人
创建钉钉群=》群设置=》机器人=》添加机器人
设置机器人
2.2 定义函数
函数:/sys/sendDDMsg
功能:发送钉钉告警
参数:
import http;
import log;
import com.alibaba.fastjson.JSON;
// import com.google.common.collect.Maps;
// import com.hahacloud.server.framework.core.logs.LogManager;
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.net.URLEncoder;
import java.time.Instant;
import java.util.Map;
try {
// 安全方式选择验签
String secret = "sssss" //上图加签
// 获取系统时间戳
long timestamp = Instant.now().toEpochMilli();
// 拼接
String stringToSign = timestamp + "\n" + secret;
// 使用HmacSHA256算法计算签名
Mac mac = Mac.getInstance("HmacSHA256");
mac.init(new SecretKeySpec(secret.getBytes("UTF-8"), "HmacSHA256"));
byte signData = mac.doFinal(stringToSign.getBytes("UTF-8"));
// 进行Base64 encode 得到最后的sign,可以拼接进url里
String sign = URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8");
var msg = {
"at": {
"atMobiles":[
"手机"
],
"isAtAll": false
},
"text": {
"content": content
},
"msgtype":"text"
}
// 钉钉机器人地址(配置机器人的webHook)
String dingUrl =
"https://oapi.dingtalk.com/robot/send?access_token=xxxxxx×tamp="
+ timestamp + "&sign=" + sign;
log.info("dingUrl={}",dingUrl)
return http.connect(dingUrl).body(msg).post();
} catch (e) {
log.info(e::string)
return null;
}
2.3 调用
import '@/sys/sendDDMsg' as sendDDMsg
import http;
import log;
var msg = "告警:异常告警,请尽快处理!"
log.info("msg={}", msg)
sendDDMsg(msg)
return true