前言

🏃🏃🏃

本次分享 SpringBoot Admin - 应用程序监控预警(钉钉机器人)

概述

生产环境中微服务应用集群服务数量较大,为更快,更精确的在第一时间监控到服务健康状态。使用SpringBoot Admin提供的监控告警功能实现钉钉机器人预警通知。
在Springboot Admin中内置多种开箱即用的监控告警系统通知,例如Mail、Slack、Telegram、Hipchat等多种通知渠道。考虑到它所支持的大多是一些国外的主流工具,而目前实际工作场景中大多使用钉钉办公,故本次分享钉钉机器人预警通知。

快速开始

  1. 创建钉钉机器人

    创建自定义机器人

    自定义钉钉机器人

    -

    image

    复制 WebHook - token,完成创建

    webhook

  2. 编码-自定义消息通知

    1. 编码 - 钉钉通知

      public class DingDingNotifier extends AbstractStatusChangeNotifier {
          
          public DingDingNotifier(InstanceRepository repository) {
              super(repository);
          }
          
          @Override
          protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
              String serviceName = instance.getRegistration().getName();
              String serviceUrl = instance.getRegistration().getServiceUrl();
              String status = instance.getStatusInfo().getStatus();
              Map<String, Object> details = instance.getStatusInfo().getDetails();
              StringBuilder str = new StringBuilder();
              str.append("监控报警 : 【" + serviceName + "】");
              str.append("【服务地址】" + serviceUrl);
              str.append("【状态】" + status);
              str.append("【详情】" + JSONObject.toJSONString(details));
              return Mono.fromRunnable(() -> {
                  DingDingMessageUtil.sendTextMessage(str.toString());
              });
          }
      }
    2. 编码 - 钉钉消息

      
      public class DingDingMessageUtil {
         
         public static String access_token = "TOKEN";
          
         public static void sendTextMessage(String msg) {
             try {
                 Message message = new Message();
                 message.setMsgtype("text");
                 message.setText(new MessageInfo(msg));
                 URL url = new URL("https://oapi.dingtalk.com/robot/send?access_token=" + access_token);
                 // 建立 http 连接
                 HttpURLConnection conn = (HttpURLConnection) url.openConnection();
                 conn.setDoOutput(true);
                 conn.setDoInput(true);
                 conn.setUseCaches(false);
                 conn.setRequestMethod("POST");
                 conn.setRequestProperty("Charset", "UTF-8");
                 conn.setRequestProperty("Content-Type", "application/Json; charset=UTF-8");
                 conn.connect();
                 OutputStream out = conn.getOutputStream();
                 String textMessage = JSONObject.toJSONString(message);
                 byte[] data = textMessage.getBytes();
                 out.write(data);
                 out.flush();
                 out.close();
                 InputStream in = conn.getInputStream();
                 byte[] data1 = new byte[in.available()];
                 in.read(data1);
                 } catch (Exception e) {
                            e.printStackTrace();
                 }
            }
        }
        class Message {
           private String msgtype;
           private MessageInfo text;
           public String getMsgtype() {
                  return msgtype;
           }
           public void setMsgtype(String msgtype) {
                  this.msgtype = msgtype;
           }
           public MessageInfo getText() {
                  return text;
           }
           public void setText(MessageInfo text) {
                  this.text = text;
           }
       }
       class MessageInfo {
          private String content;
          public MessageInfo(String content) {
              this.content = content;
          }
          public String getContent() {
              return content;
          }
          public void setContent(String content) {
              this.content = content;
          }
      }
    3. 编码 - Application 初始化钉钉通知

      @EnableAdminServer
      @EnableDiscoveryClient
      @SpringBootApplication
      public class AdminApplication {
          public static void main(String[] args) {
              SpringApplication.run(AdminApplication.class, args);
          }
          @Bean
          public DingDingNotifier dingDingNotifier(InstanceRepository repository) {
              return new DingDingNotifier(repository);
          }
      }
  3. 成果验证

    • 启动 SpringBoot Admin Server,启动关闭Client服务

      钉钉预警

结束语

  • 以上就是 SpringBoot Admin - 钉钉预警的示例,另支持多种监控告警通知,例如 Mail 方式,可自行实践了解。

✔ END

© 🇹 🉐 🆙🆙🆙


t_什么都没有
4 声望0 粉丝

什么都没有。