SpringCloud Admin 健康检查

文章目录

    • Admin服务器端
    • 需要监控的微服务端
    • 启动项目
    • 配置邮件通知
    • 发送钉钉群通知

Admin服务器端

创建项目admin-test,引入依赖

       <!-- Admin 服务 -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-starter-server</artifactId>
            <version>2.2.1</version>
        </dependency>
        <!-- Admin 界面 -->
        <dependency>
            <groupId>de.codecentric</groupId>
            <artifactId>spring-boot-admin-server-ui</artifactId>
            <version>2.2.1</version>
        </dependency>

启动类

@SpringBootApplication
@EnableAdminServer
public class AdminTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminTestApplication.class, args);
    }
    
}

需要监控的微服务端

pom.xml

		<!-- Admin 服务 -->
      <dependency>
        <groupId>de.codecentric</groupId>
        <artifactId>spring-boot-admin-starter-client</artifactId>
        <version>2.2.1</version>
      </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

配置

management:
  endpoints:
    web:
      exposure:
        include: "*"
    health:
      ##默认是never
      show-details: ALWAYS
      enabled: true
spring:
  boot:
    admin:
      client:
        url: http://localhost:8080

启动项目

访问 http://localhost:8080/

SpringCloud Admin 健康检查_第1张图片

配置邮件通知

pom

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-mail</artifactId>
		</dependency>

配置文件

# 邮件设置
mail:
  host: smtp.qq.com
  username: 【QQ号】
  password: 获取方式见下文
  properties:
    mail:
      smpt:
        auth: true
        starttls:
          enable: true
          required: true
spring:
  boot:
    admin:
      notify:
        mail:
          #收件邮箱
          to: 【QQ号】@qq.com
          # 发件邮箱
          from: 【QQ号】@qq.com

⚠️ : 发件邮箱 @qq.com 前面的内容要和 username 相同

QQ邮箱 - 设置 - 红框处获取 password
SpringCloud Admin 健康检查_第2张图片

发送钉钉群通知

配置钉钉机器人
群设置 - 智能群助手 - 添加机器人
SpringCloud Admin 健康检查_第3张图片
SpringCloud Admin 健康检查_第4张图片
SpringCloud Admin 健康检查_第5张图片
https://oapi.dingtalk.com/robot/send?access_token=xxx

记住这个 token 后面要用

启动类

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableAdminServer
public class AdminTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(AdminTestApplication.class, args);
    }

    @Bean
    public DingDingNotifier dingDingNotifier(InstanceRepository repository) {
        return new DingDingNotifier(repository);
    }
}

通知类

package com.example.admintest;

import java.util.Map;
import com.alibaba.fastjson.JSONObject;
import de.codecentric.boot.admin.server.domain.entities.Instance;
import de.codecentric.boot.admin.server.domain.entities.InstanceRepository;
import de.codecentric.boot.admin.server.domain.events.InstanceEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import reactor.core.publisher.Mono;

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());
        });
    }
}

发送工具类

package com.example.admintest;

import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import com.alibaba.fastjson.JSONObject;

public class DingDingMessageUtil {
	// 这里的 Token 需要去钉钉获取
    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);
            System.out.println(new String(data1));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

消息类

package com.example.admintest;

public 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;
    }
}
package com.example.admintest;

public 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;
    }
}

配置完成后,下线一个服务,钉钉群即可收到通知
SpringCloud Admin 健康检查_第6张图片

你可能感兴趣的:(Spring,Cloud)