spring-boot-actuator - Spring Boot 健康检查时间表
问题描述
有什么办法可以让 Spring Actuator 定期进行健康检查?我在想,也许,在我的自定义实现 HealthIndicator 中有一些 Runnable 的选项,但对我来说,这个想法看起来不太好。我想检查 Cassandra,如果失败,执行一些紧急操作
解决方案
我通过谷歌搜索发现了这个条目,因为我希望定期运行健康检查。如前文所述,您可以从外部监控系统定期调用健康端点,但说您想使用千分尺将健康指标发送到像 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() 将运行您的健康检查。该代码每分钟运行一次健康检查。
推荐阅读
- amazon-s3 - 将 Route 53 静态网站同步到 github 网站存储库(允许离线/停止编辑)
- ios - 将数据发送到另一个 ViewController 的 Swift 问题
- javascript - Leaflet:在地图上动态引导滑块
- c# - EF Lambda 包含导航属性
- django - 不能分配必须是“”实例
- php - Doctrine & Symfony - 没有来自自定义查询的水合数据
- firebase - 在 Firestore 中更新同一文档的 10 个不同字段。顺序重要吗?
- html - 边框底部在伪选择器部分不起作用:在 HTML、CSS 之后
- linux - 文件存在与监控
- terraform - 我应该如何在 terraform 0.12 中使用列表,以便更改列表的顺序不会破坏项目?