我们通常在我们的高可用性应用程序中非常频繁地 ping /health
,以确定何时需要发生故障转移。如果使用的健康指标不会对外部依赖项(如数据库或 Web 服务)进行昂贵的调用,则 Spring Boot Actuator 可以很好地解决此问题。但是,我们喜欢编写健康指标的简便性以及它如何插入/health
端点。
有什么方法可以配置 Spring Boot Actuator,以便在某些情况下只执行指标的子集?如果是这样,怎么做?
谢谢!
我们通常在我们的高可用性应用程序中非常频繁地 ping /health
,以确定何时需要发生故障转移。如果使用的健康指标不会对外部依赖项(如数据库或 Web 服务)进行昂贵的调用,则 Spring Boot Actuator 可以很好地解决此问题。但是,我们喜欢编写健康指标的简便性以及它如何插入/health
端点。
有什么方法可以配置 Spring Boot Actuator,以便在某些情况下只执行指标的子集?如果是这样,怎么做?
谢谢!
您可以使用management.health.<service>.enabled
属性控制启用哪些运行状况指标。例如,要关闭数据库健康检查:
management.health.db.enabled: false
完整的属性列表可在此处获得。在撰写本文时,它们是:
management.health.db.enabled
management.health.diskspace.enabled
management.health.mongo.enabled
management.health.rabbit.enabled
management.health.redis.enabled
management.health.solr.enabled
我现在也有类似的情况。我刚刚实现了一个自定义Endpoint
,它会进行昂贵的健康检查。
如果您需要 HTTP 端点的舒适性,您还可以实现AbstractEndpointMvcAdapter
一个类似于 Spring 的 HTTP 状态代码映射的端点HealthMvcEndpoint
。
2021 更新
健康组提供您所询问的确切功能。
如果您使用的是 Spring Boot >= 2.2,则可以使用单独的库spring-boot-async-health-indicator使昂贵的运行状况检查在单独的线程上运行,只需使用@AsyncHealth
.
这将确保您的/health
端点始终非常快速地返回,并且不会等待那些昂贵的运行状况检查完成。
例子:
@AsyncHealth
@Component
public class MyExpensiveHealthCheck implements HealthIndicator {
@Override
public Health health() {
verySlowCheck(); // This method does not run when /health is called
return Health.up().build();
}
}
免责声明:我为此目的创建了这个库