Spring cloud admin 健康检查

 

目录

 

概述

Spring Cloud Admin 配置

Admin 服务端

微服务端

总结:

发送邮件

发送叮叮群


概述

Spring cloud admin 健康检查,就是对微服务的一种监控。所有微服务将自己的服务情况上报给Spring cloud admin

Spring Cloud Admin 配置

  • Admin 服务端

1. 常见一个单独的微服务来做为spring Cloud Admin的服务,专门用来做监控的

2. 依赖包(发现可以不用配置ui的jar包,也是可以访问的,不信试一试)

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

3. 配置文件

配置server.port 就可以了,这里配置 Server.port=8080

4. 启动类

@EnableAdminServer

5. 访问界面

http://localhost:8080/

 

  • 微服务端

1.  依赖包

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

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

2. 配置文件

#开放端口
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
#上报信息给spring cloud admin
spring.boot.admin.client.url=http://localhost:8080

3. 再次查看http://localhost:8080/

发现服务已经注册上去了

 

 

总结:

1. Admin 服务端配置,admin Server依赖包,启动类注解

2. 微服务端(被监控服务),admin client依赖包,开启断点监控,上报信息到Admin服务端

3. 遇到问题

配置完成之后发现,微服务信息在页面上找不到。

这个应该时版本问题,要保证spring-boot-admin-starter-client  和spring-boot-admin-starter-server的版本时一致的。比如都是2.3.1

 

发送邮件

 

1. 依赖包

        <!-- 邮件mail依赖包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>

2. 配置文件


#===========发邮件===========
spring.mail.host=smtp.qq.com
spring.mail.username=10*****
#  授权密码,非登录密码
spring.mail.password=********

spring.mail.properties.mail.smpt.auth=true
spring.mail.properties.mail.smpt.starttls.enable=true
spring.mail.properties.mail.smpt.starttls.required=true


#收件邮箱
spring.boot.admin.notify.mail.to=1****2507@qq.com
# 发件邮箱
spring.boot.admin.notify.mail.from=10xxxx55@qq.com

注意:

(1)spring.mail.password 这个配置不是qq密码,而是授权密码,这个从哪里找呢

打开QQ邮箱,打开设置,找到   POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,选择开启POP3/SMTP服务 ,点击开启。

会让发送短信进行验证,验证完成后,会弹出一个授权码。妥善保管。

(2) 注意;下面这两个qq号保持一致

3. 配置完成后,当服务下线时,就会往收件箱中发送通知

 

发送叮叮群

1. 创建一个类继承,AbstractStatusChangeNotifier类,重写doNotify方法

package com.example.adminservice;

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;

import java.util.Map;

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

在DingDingMessageUtil类中创建连接。

URL url = new URL("https://oapi.dingtalk.com/robot/send?access_token=" + access_token); 

这个地址和access_token需要在钉钉群中获取,获取方法如下

package com.example.adminservice;

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

public class DingDingMessageUtil {
    public static String access_token = "96461c7a4ba3a8132cd7b7ae3f49ff2ee5e2726fee1b079a0ea72af26ce5a3c8";
    //https://oapi.dingtalk.com/robot/send?access_token=96461c7a4ba3a8132cd7b7ae3f49ff2ee5e2726fee1b079a0ea72af26ce5a3c8
    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);
            System.out.println(msg);
            System.out.println(textMessage);
            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();
        }
    }
}

两个辅助的实体类,用来 String textMessage = JSONObject.toJSONString(message);转json时使用。

package com.example.adminservice;

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.adminservice;

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

 

1.   找到设置 ,群助手

2. 添加机器人

3. 自定义机器人

 

4. 创建机器人,自定义机器人名称,安全设置一定注意,如果自定义关键字,那么在发送消息里一定需要包含自定义的关键字。否则会报错

{"errcode":310000,"errmsg":"keywords not in content, more: [https://ding-doc.dingtalk.com/doc#/serverapi2/qf2nxq]"}

这个关键字必须包含在代码中要发送的信息里。

 

 

5. 添加机器人,获取webhook,也就是tocken


 

 

2. 将创建的类注入到spring 容器中

package com.example.adminservice;

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 AdminServiceApplication {

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

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

3. 启动并测试

当停止服务时,会发通知到钉钉群中。报警

 

这样我就能根据这个自由的进行配置,

比如发送其他的邮箱或者发送到微信等等。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值