Java后台推送告警信息到钉钉
本文参考于:Java后台推送告警信息到钉钉(工具类-可直接使用)
文章目录
- Java后台推送告警信息到钉钉
- 在【群设置】【智能群助手】【添加机器人】添加一个【自定义机器人】
- 在pom.xml中添加依赖
- 代码
- 测试
人数要大于等于三人,一般需要在电脑端操作,下面添加机器人也是。
在【群设置】【智能群助手】【添加机器人】添加一个【自定义机器人】
注意:这里secret有很长,全选是可以复制的。
在pom.xml中添加依赖
<!-- OKHttp3依赖 --> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>3.12.6</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.6</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> </dependency>
代码
@Slf4j public class DingTalkUtil { private static OkHttpClient mClient; private static String url; //初始化客户端 static { OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.connectTimeout(10L, TimeUnit.SECONDS); builder.readTimeout(10L, TimeUnit.SECONDS); Dispatcher dispatcher = new Dispatcher(); dispatcher.setMaxRequestsPerHost(200); dispatcher.setMaxRequests(200); builder.dispatcher(dispatcher); mClient = builder.build(); try { url = getSign(); } catch (Exception e) { log.error("k8s节点出现问题,调用钉钉API进行报警,获取签名失败!"); e.printStackTrace(); } } /** * 通用 POST 请求方法 依赖 OKhttp3 * @param message 所要发送的消息 * @return 发送状态回执 */ public static String postWithJson(String message) { JSONObject jsonObject = new JSONObject(); //固定参数 jsonObject.put("msgtype", "text"); JSONObject content = new JSONObject(); //此处message是你想要发送到钉钉的信息 content.put("content", message); jsonObject.put("text", content); RequestBody body = RequestBody.create( MediaType.parse("application/json; charset=utf-8"), jsonObject.toJSONString()); Request request = new Request.Builder().url(url).post(body).build(); try { Response response = mClient.newCall(request).execute(); if (response.body() != null) { return response.body().string(); } } catch (IOException e) { log.error("k8s节点出现问题,调用钉钉API进行报警,消息发送失败!"); e.printStackTrace(); } return null; } /** * 获取签名 * @return 返回签名 */ private static String getSign() throws Exception { String baseUrl = "https://oapi.dingtalk.com/robot/send?access_token="; String token = "a28abafca1eda791b2b09bf8a7"; String secret = "SEC09fedac8a866be756225b9b1b"; long timestamp = System.currentTimeMillis(); String stringToSign = timestamp + "\n" + secret; // MAC加密算法 Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256")); byte[] signData = mac.doFinal(stringToSign.getBytes(StandardCharsets.UTF_8)); return baseUrl + token + "×tamp=" + timestamp + "&sign=" + URLEncoder.encode(new String(Base64.encodeBase64(signData)), "UTF-8"); } }
测试
执行以下代码:
public class Test { public static void main(String[] args) { String message = "this is a test"; String res = DingTalkUtil.postWithJson(message); System.out.println(res); } }
打印信息如下图:
钉钉群接收到的消息如下图: