springboot 健康检测下线告警 admin + actuator

416 阅读1分钟

spring-boot-admin项目为Spring Boot应用程序提供了一个健康检测状态管理界面。

分为服务端和客户端,客户端结合 spring-boot-starter-actuator 信息收集

1. 服务端 springboot-admin

新建一个springboot 项目springboot-admin,pom.xml

<spring-boot.version>2.7.3</spring-boot.version>
<spring-boot-admin.version>2.7.5</spring-boot-admin.version>

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-server</artifactId>
</dependency>

配置端口,设置账号密码

image.png

启动后访问 http://localhost:4001/

还没有客户端连接,这时候看不到应用

2. 客户端 web-server

新建一个springboot 项目web-server,pom.xml

<dependency>
    <groupId>de.codecentric</groupId>
    <artifactId>spring-boot-admin-starter-client</artifactId>
</dependency>

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

yml配置

server:
  port: 7001

spring:
  mvc:
    pathmatch:
      matching-strategy: ant-path-matcher
  main:
    allow-bean-definition-overriding: true
    allow-circular-references: true
  boot:
    admin:
      client:
        # Admin 服务端地址
        url: http://localhost:4001
        # server 用户名
        username: admin
        # server 密码
        password: admin

# 开放端点
management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

启动web-server服务,就可以在UI看到应用了。

image.png

3. 监控服务异常下线通知

在服务端springboot-admin,新建AdminMonitorNotifier


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.domain.events.InstanceStatusChangedEvent;
import de.codecentric.boot.admin.server.notify.AbstractStatusChangeNotifier;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

import java.util.Arrays;

@Slf4j
@Component
public class AdminMonitorNotifier extends AbstractStatusChangeNotifier {

    private String[] ignoreChanges = new String[]{"UNKNOWN:UP", "DOWN:UP", "OFFLINE:UP"};

    public AdminMonitorNotifier(InstanceRepository repository) {
        super(repository);
    }

    @Override
    protected boolean shouldNotify(InstanceEvent event, Instance instance) {
        if (!(event instanceof InstanceStatusChangedEvent)) {
            return false;
        } else {
            InstanceStatusChangedEvent statusChange = (InstanceStatusChangedEvent) event;
            String from = this.getLastStatus(event.getInstance());
            String to = statusChange.getStatusInfo().getStatus();
            return Arrays.binarySearch(this.ignoreChanges, from + ":" + to) < 0 && Arrays.binarySearch(this.ignoreChanges, "*:" + to) < 0 && Arrays.binarySearch(this.ignoreChanges, from + ":*") < 0;
        }
    }


    @Override
    protected Mono<Void> doNotify(InstanceEvent event, Instance instance) {
        return Mono.fromRunnable(() -> {
            if (event instanceof InstanceStatusChangedEvent) {
                String status = ((InstanceStatusChangedEvent) event).getStatusInfo().getStatus();
                switch (status) {
                    case "DOWN":
                        log.info("服务健康状态不通过 {},{}", status, instance.getRegistration().getName());
                        break;
                    case "OFFLINE":
                        log.info("服务下线状态 {},{}", status, instance.getRegistration().getName());
                        break;
                    case "UP":
                        log.info("服务上线状态 {},{}", status, instance.getRegistration().getName());
                        break;
                    case "UNKNOWN":
                        log.info("服务未知状态异常 {}", instance.getRegistration().getName());
                        break;
                    default:
                        break;
                }
            }
        });
    }
}

这里就可以对服务异常做通知了,邮箱,短信告警。

可以对web-server启动,停止做下测试。

github 代码

代码中使用了nacos,根目录有配置文件,导入修改nacos ip就可以启动