如何实现自定义执行器端点来检查动物园管理员的运行状况?



我想实现一个自定义端点类来检查 Zookeeper 的运行状况:

http://localhost:8080/actuator/health/zookeeper

问题:我是否扩展 AbstractHealthIndicaitor 或实现 HealthIndicator类?

运行状况指示器类

public class CustomHealth implements HealthIndicator {
@Override
public Health health() {
int errorCode = check(); // perform some specific health check
if (errorCode != 0) {
return Health.down()
.withDetail("Error Code", errorCode).build();
}
return Health.up().build();
}
public int check() {
// Our logic to check zookeeper health
return 0;
}
}

抽象健康指示器类

public class CustomHealth extends AbstractHealthIndicator  {
@Override
protected void doHealthCheck(Health.Builder builder) throws Exception 
{
// Our logic to check zookeeper health
}
}

我对使用哪种方法感到困惑。我相信检查动物园管理员健康状况的逻辑是简单地声明一个 CuratorFramework 对象,然后执行 curator.getState(( 并从那里返回构建器,对于端点,附加@RestControllerEndPoint来声明路径。请帮忙!

由您选择哪一个,区别在于AbstractHealthIndicator

  1. 为您提供 Health.Builder 实例,因此您无需手动创建一个实例
  2. 使用 try-catch 包装doHealthCheck(builder)调用,如果您的运行状况检查失败且出现异常,则返回状态 DOWN。

因此,一般来说,AbstractHealthIndicator使用起来更方便,因为您可以跳过错误处理。当您需要提供有关异常的自定义状态详细信息时,请选择实现原始HealthIndicator

有关动物园管理员健康指示器的示例,请参阅弹簧云动物园管理员提供的现有指标 https://github.com/spring-cloud/spring-cloud-zookeeper/blob/master/spring-cloud-zookeeper-core/src/main/java/org/springframework/cloud/zookeeper/ZookeeperHealthIndicator.java

关于端点/actuator/health/zookeeper,我建议您使用 SpringBoot 2.2.0 中引入的称为健康指示器组https://spring.io/blog/2019/10/16/spring-boot-2-2-0#health-indicator-groups 的新功能

简而言之,如果使用组件扫描并命名为自定义运行状况指示器MyZookeeperHealthIndicator,请添加以下属性以在自定义zookeeper组下注册它:

management.endpoint.health.group.zookeeper.include=myZookeeper

之后,自定义运行状况详细信息将显示在myZookeeper组件下,/actuator/health/zookeeper

有关详细信息,请查看以下文档:

编写自定义运行状况指示器https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#writing-custom-healthindicators

健康组https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-features.html#health-groups

最新更新