全部产品
云市场

引入健康检查

更新时间:2020-05-09 16:23:19

通过 SOFABoot 的健康检查功能,可以更优雅地上线应用实例。其主要实现的功能如下:

  • Spring Boot 的健康检查(HealthCheck)功能。
  • Readiness Check 功能。

说明:SOFABoot 支持对中间件各组件的健康检查功能。详情见各组件的健康检查

由于应用的健康检查结果会通过 Web 页面输出,因此,Core 工程在引入此功能后会转为 Web 工程,并包含很多 Spring Boot 内置的端点(Endpoint)。具体端点暴露方式见 Spring 官方文档(英文)

前置条件

健康检查能力需要配合技术栈、发布部署平台和配置文件一起使用:

  • 技术栈:SOFABoot 技术栈是默认的最新版本。有关技术栈的更多信息请参考 中间件技术栈介绍
  • application.properties 配置文件
    • 当使用健康检查和技术栈 1.0.3 时, application.properties 文件可以为空,但不可被删除。
    • 您可以根据不同的工作空间创建不同名称的配置文件,例如:application-dev.propertiesapplication-sit.properties
    • application.properties 配置文件中不能有中文或者其他编码的注释,否则可能因无法解析而导致超时失败。
    • 健康检查默认超时时间是 90 秒,应用启动如果超过 90 秒,会引起健康检查超时导致发布部署失败。
      • 建议您尽量优化应用启动时间,将耗时较大的应用初始化代码移到应用启动完成后或者健康检查之后。
      • 如果在发布部署过程中,发现健康检查失败,可能的原因是应用没有在 90 秒之内完成启动。此时的临时解决方案是:在检查服务那一步,点击 重试,如果应用在健康检查重试过程中启动成功,健康检查也会通过。

引入健康检查

说明

  • 如果不引入 SOFABoot 的健康检查功能,您依然可以直接依赖 HealthIndicator 接口进行原生的 Spring Boot Actuator 的 Liveness Check。
  • 按照官网文档创建工程创建的 SOFABoot 工程,默认已经有其它组件引入了健康检查功能,可以直接通过后文的验证健康检查结果进行验证。

在未引入 SOFABoot 的健康检查功能时,如果要引入,只需要在主 pom.xml 文件中引入以下 starter:

  1. <dependency>
  2. <groupId>com.alipay.sofa</groupId>
  3. <artifactId>healthcheck-sofa-boot-starter</artifactId>
  4. </dependency>

验证健康检查结果

本机验证

可以通过下述 2 种方式进行验证:

  • 在浏览器中访问 http://localhost:8080/actuator/readiness 以查看健康检查的结果。
  • 通过查看日志来确定健康检查的结果。

    • 日志的路径: logs/health-check 目录下。
    • 日志的内容:成功时示例如下:

      2018-04-06 23:29:50,240 INFO main - Readiness check result: success

PaaS 验证

一个应用的流量来源包括下述途径:

  • 可能是从中间件进入的:目前, SOFA 中间件已经通过 SOFABoot 的 Readiness Check 能力来控制了上游流量的进入。
  • 可能是从负载均衡器进入的:对于此部分流量,建议您通过 PaaS 来访问 Readiness Check 的结果,根据结果来控制是否要在负载均衡器中上线对应的节点。

PaaS 健康检查失败

如果健康检查失败,可通过如下途径查看失败信息:

  • 发布部署平台:会有报错信息,可以对照相应的报错信息进行分析排错。
  • 日志:会有记录,示例如下:
  1. 2018-05-25 19:04:02,130 ERROR main - HealthIndicator (class {Package_Name}.{Class_Name})check fail. And the status is[DOWN]; the detail is: {}
  2. 2018-05-25 19:04:02,131 ERROR main - Readiness check HealthIndicator result: fail.
  3. 2018-05-25 19:04:02,131 ERROR main - first phase of the readiness check result: fail
  4. 2018-05-25 19:04:02,131 ERROR main - Readiness check result: fail

Readiness Check 能力扩展

在 Readiness Check 的各个阶段,SOFABoot 都提供了扩展的能力,应用可以根据实际需要进行扩展。目前可供扩展的接口如下:

回调接口 说明
org.springframework.context.ApplicationListener 如果想要在 Readiness Check 之前做一些事情,那么监听这个 Listener 的 SofaBootBeforeReadinessCheckEvent 事件。
org.springframework.boot.actuate.health.HealthIndicator 如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。
com.alipay.sofa.healthcheck.startup.SofaBootAfterReadinessCheckCallback 如果想要在 Readiness Check 之后做一些事情,那么可以扩展 SOFABoot 的这个接口。

Readiness Check 操作定制

操作步骤如下:

  1. SOFABoot 已引入健康检查功能。
  2. 在配置文件 application.properties 中添加下述配置项,定制 Readiness Check 的相关行为。
Readiness Check 配置项 说明 默认值
com.alipay.sofa.healthcheck.skip.all 是否跳过整个 Readiness Check 阶段 false
com.alipay.sofa.healthcheck.skip.component 是否跳过 SOFA 中间件的 Readiness Check 阶段 false
com.alipay.sofa.healthcheck.skip.indicator 是否跳过 HealthIndicator 的 Readiness Check 阶段 false