首页 > 解决方案 > Spring Boot 健康检查时间表

问题描述

有什么办法可以让 Spring Actuator 定期进行健康检查?我在想,也许,在我的自定义实现 HealthIndicator 中有一些 Runnable 的选项,但对我来说,这个想法看起来不太好。我想检查 Cassandra,如果失败,执行一些紧急操作

标签: spring-boot-actuator

解决方案


我通过谷歌搜索发现了这个条目,因为我希望定期运行健康检查。如前文所述,您可以从外部监控系统定期调用健康端点,但说您想使用千分尺将健康指标发送到像 NewRelic 这样的外部注册表,并且您不想依赖外部 ping。然后你可以使用 import org.springframework.boot.actuate.health.HealthEndpoint 如下:

@Configuration
@EnableScheduling
public class HealthMetricsConfiguration {

  private final String GAUGE_NAME = "gaugeName";

  private AtomicInteger gauge;

  private HealthEndpoint healthEndpoint;

  public HealthMetricsConfiguration(MeterRegistry registry, HealthEndpoint healthEndpoint) {
    this.healthEndpoint = healthEndpoint;
    gauge = registry.gauge(GAUGE_NAME, new AtomicInteger());
    gauge.set(getStatusCode(this.healthEndpoint));
  }

  private int getStatusCode(HealthEndpoint healthEndPoint) {
    Status status = healthEndPoint.health().getStatus();
    if(Status.OUT_OF_SERVICE.equals(status)) {
      return 3;
    }else if(Status.DOWN.equals(status)) {
      return 2;
    }else if(Status.UP.equals(status)) {
      return 1;
    }else {
      return 0; //Status.UNKNOWN
    }
  }

  @Scheduled(fixedDelayString = 60000, initialDelayString = 60000)
  public void periodicRunSelfHealthCheck() {
    gauge.set(getStatusCode(this.healthEndpoint));
  }
}

关键是 healthEndpoint.health() 将运行您的健康检查。该代码每分钟运行一次健康检查。


推荐阅读