Spring Boot Actuator自定义健康检查

发布于:2023-01-04 ⋅ 阅读:(315) ⋅ 点赞:(0)

对于Spring Boot的应用,除了使用HTTP或TCP端口检测来进行应用健康检查之外,您也可以使用Actuator组件实现定制化健康检查。

相关介绍
Actuator组件是Spring Boot提供的用来对应用系统进行自省和监控的功能模块,借助于Actuator,您可以很方便地查看并统计应用系统的某些监控指标。您也可以通过Actuator组件自定义您的健康检查程序。更多信息,请参见Spring Boot Actuator官方文档。

操作步骤
在Maven中添加所需依赖。

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

设置application.properties配置文件,显示健康检查详细信息。

management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always  #显示健康检查详细信息,默认为never,即不显示。

通过自定义检查程序。我这边是自定义rabbit,就用/actuator/health/rabbit路径来单独获取这个健康指示器的结果。
新建RabbitHealthIndicator.java文件,输入代码,实现您业务中特定的检查内容。例如检查数据库连接是否正常,线程池状态等。示例代码如下所示:

@Component
public class RabbitHealthIndicator extends AbstractHealthIndicator {


     private final RabbitTemplate rabbitTemplate;

    public RabbitHealthIndicator( RabbitTemplate rabbitTemplate) {
        super("Rabbit health check failed");
        Assert.notNull(rabbitTemplate, "RabbitTemplate must not be null");
        this.rabbitTemplate = rabbitTemplate;
    }

    @Override
    protected void doHealthCheck(Health.Builder builder) throws Exception {
        System.out.println("check---------rabbitmq");
        builder.up().withDetail("version", getConnection().getServerProperties().get("version").toString());
        builder.up().withDetail("product", getConnection().getServerProperties().get("product").toString());
        builder.up().withDetail("platform", getConnection().getServerProperties().get("platform").toString());
        builder.up().withDetail("capabilities",(Map<String, Object>)getConnection().getServerProperties().get("capabilities"));
    }

    private Connection getConnection() {
        return this.rabbitTemplate.execute((channel) -> channel.getConnection());
    }


    @Override
    public Health getHealth(boolean includeDetails) {
        return super.getHealth(includeDetails);
    }
}

设置完成后,运行应用,进行健康检查。
通过直接访问默认端口进行健康检查。示例命令如下:
请求接口

localhost:8080/actuator/health/rabbit #rabbit为健康检查指示器类名前缀,请以自己定义的类名为准。

返回信息如图
在这里插入图片描述