【问题标题】:Distinguish between expensive and inexpensive health checks区分昂贵和便宜的健康检查
【发布时间】:2015-07-07 11:42:58
【问题描述】:

我们通常在我们的高可用性应用程序中非常频繁地 ping /health 以确定何时需要进行故障转移。如果使用的健康指标不会对外部依赖项(如数据库或 Web 服务)进行昂贵的调用,则 Spring Boot Actuator 可以很好地解决此问题。但是,我们喜欢编写健康指标的简便性以及它插入/health 端点的方式。

有什么方法可以配置 Spring Boot Actuator,以便在某些情况下只执行指标的子集?如果有,怎么做?

谢谢!

【问题讨论】:

  • 为什么不将您的响应缓存在您的自定义健康指标上,以便进行几次通话。因此,实际上只执行每隔一个或可能每 5 次或 10 次检查。
  • @hrrgttnchml ,这种方法还是有缺点的。如果/health 检查调用非常频繁地运行(比如每 5 秒),那么调用仍然很昂贵。此外,我相信缓存是针对整个响应的,并且必须为特定的健康指标实现自定义缓存。
  • 不,我的意思不是缓存整个响应,而是在运行状况检查本身内部。因此,并非每次调用都会进行昂贵的计算。
  • @hrrgttnchml 这绝对是可能的。我希望其中一位 Spring Boot 开发人员能够加入并理解他们对接受这个作为新功能的兴趣(在他们的 GitHub 上创建问题之前)。

标签: spring-boot spring-boot-actuator


【解决方案1】:

您可以使用management.health.<service>.enabled 属性控制启用哪些运行状况指示器。例如,关闭数据库健康检查:

management.health.db.enabled: false

完整的属性列表可在here 获得。在撰写本文时,它们是:

management.health.db.enabled
management.health.diskspace.enabled
management.health.mongo.enabled
management.health.rabbit.enabled
management.health.redis.enabled
management.health.solr.enabled

【讨论】:

  • 感谢您提供此信息,但遗憾的是它没有回答我的问题。我知道我可以禁用某些健康检查,但我不想禁用它们。我想让它们保持启用状态,我很好奇是否有可能在运行时有条件地检查它们。
  • @Centinul 不,Boot 目前不支持类似的东西。随意打开一个问题,我们会考虑它。不过,我目前不相信。尝试仅有条件地检查特定服务感觉像是过早的优化,会让您对应用的实际运行状况一无所知。
  • 感谢您的评论。我已经打开了一个 GitHub 问题 here
【解决方案2】:

我现在也有类似的情况。我刚刚实现了一个自定义的Endpoint,它会进行昂贵的健康检查。

如果您需要舒适的 HTTP 端点,您还可以实现 AbstractEndpointMvcAdapter,它执行与 Spring 的 HealthMvcEndpoint 类似的 HTTP 状态代码映射。

【讨论】:

    【解决方案3】:

    【讨论】:

      【解决方案4】:

      如果您使用的是 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();
          }
      
      }
      

      免责声明:我为此目的创建了这个库

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-07-16
        • 1970-01-01
        • 2022-07-29
        • 2022-11-01
        • 2015-04-22
        • 1970-01-01
        • 2014-10-02
        相关资源
        最近更新 更多