如何在spring boot health中添加自定义运行状况检查?

问题描述 投票:17回答:3
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

这将为您的应用程序添加几个有用的端点。其中之一是/健康。当您启动应用程序并导航到/ health端点时,您将看到它已返回一些数据。

{
    "status":"UP",
    "diskSpace": {
        "status":"UP",
        "free":56443746,
        "threshold":1345660
    }
}

如何在spring boot health中添加自定义运行状况检查?

spring spring-boot spring-boot-actuator
3个回答
26
投票

添加自定义运行状况检查很容易。只需创建一个新的Java类,从AbstractHealthIndicator扩展它并实现doHealthCheck方法。该方法通过一些有用的方法获取构建器。如果您的健康状况良好,请调用builder.up();如果不健康,则调用builder.down()。你做什么检查健康完全取决于你。也许你想ping一些服务器或检查一些文件。

@Component
public class CustomHealthCheck extends AbstractHealthIndicator {
    @Override
    protected void doHealthCheck(Health.Builder bldr) throws Exception {
        // TODO implement some check
        boolean running = true;
        if (running) {
          bldr.up();
        } else {
          bldr.down();
        }
    }
}

这足以激活新的运行状况检查(确保@ComponentScan在您的应用程序中)。重新启动应用程序并将浏览器定位到/ health端点,您将看到新添加的运行状况检查。

{
    "status":"UP",
    "CustomHealthCheck": {
        "status":"UP"
    },
    "diskSpace": {
        "status":"UP",
        "free":56443746,
        "threshold":1345660
    }
}

6
投票

Spring Boot 2.X显着改变了执行器。通过@EndpointWebExtension启用了一种新的,更好的扩展现有端点的机制。

话虽如此,健康端点的扩展有点棘手,因为它的一个扩展由执行器本身提供。如果不操作bean初始化过程,您的应用程序将无法启动,因为它将看到2个扩展,并且无法理解选择哪个。一种更简单的方法是使用info代替并扩展它:

@Component
@EndpointWebExtension(endpoint = InfoEndpoint.class)
public class InfoWebEndpointExtension {
   @Value("${info.build.version}")
   private String versionNumber;
   @Value("${git.commit.id}")
   private String gitCommit;
   @Value("${info.build.name}")
   private String applicationName;
   ...
   @ReadOperation
   public WebEndpointResponse<Map> info() {

不要忘记您也可以重新映射网址。在我的情况下,我更喜欢/ status to / health,并且不希望/执行器/在路径中:

management.endpoints.web.base-path=/
management.endpoints.web.path-mapping.info=status

我更喜欢/ info的另一个原因是因为我没有得到这个嵌套结构,这是/ health的默认值:

{
"status": {
    "status": "ON",

5
投票

自Spring Boot 2.X开始

正如@ yuranos87所述,Spring Boot 2.X中的执行器概念发生了变化,但您仍然可以通过实现HealthIndicator或响应式应用程序ReactiveHealthIndicator轻松添加自定义运行状况检查:

@Component
public class CacheHealthIndicator implements HealthIndicator {

@Override
public Health health() {
    long result = checkSomething())           
    if (result <= 0) {
        return Health.down().withDetail("Something Result", result).build();
    }
    return Health.up().build();      
}

要么

@Component
public class CacheHealthIndicator implements ReactiveHealthIndicator {

@Override
public Mono<Health> health() {
    return Mono.fromCallable(() -> checkSomething())
        .map(result -> {
            if (result <= 0) {
                return Health.down().withDetail("Something Result", result).build();
            }
            return Health.up().build();
        });
   }
}

此外,您可以使用@Endpointor @EndpointWebExtension添加或扩展任何端点。这里的终点是infohealth等等。因此,您可以使用@Endpoint添加自定义运行状况检查,但使用HealthIndicator更容易。

您可以在spring boot文档中找到有关custom health checkscustom endpoints的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.