SOFABoot 为 Spring Boot 的健康检查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中间件,那么建议使用 SOFABoot 的健康检查能力的扩展,来更优雅的上线应用实例。
引入健康检查扩展
要引入 SOFABoot 的健康检查能力的扩展,只需要引入以下的 Starter 即可:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>healthcheck-sofa-boot-starter</artifactId>
</dependency>
如果不引入 SOFABoot 的健康检查扩展,您也可以直接依赖 HealthIndicator 接口进行原生的 Spring Boot Actuator 的 Liveness Check。
安全提醒
从 SOFABoot 2.3.0 开始,由于健康检查能力依赖于 SpringBoot 1.4.x 里的Actuator
组件,而Actuator
会默认开启很多EndPoint,例如/dump
、/trace
等,可能存在安全风险,您可以参照官方文档里的安全建议进行设置。
SpringBoot 1.5.x 和 SpringBoot 2.x 已修复了部分安全行为,SOFABoot 将通过升级 SpringBoot 内核进行支持。
查看健康检查结果
您可以通过以下方式查看健康检查结果:
通过 URL 查看健康检查的结果
加入健康检查扩展之后,您可以直接在浏览器中输入
http://localhost:8080/health/readiness
查看 Readiness Check 的结果。如果要查看 Liveness Check 的结果,可以直接查看 Spring Boot 的健康检查的 URL:http://localhost:8080/health
。重要SOFABoot 2.x 及之后的版本不再间接引入
spring-boot-starter-web
依赖,如果需要在浏览器中查看健康检查结果,需要额外在工程中引入 Web 容器依赖。SOFABoot 3.x 中调整了 endpoint 路径,
health/readiness
更改为actuator/readiness
。
通过日志查看健康检查的结果
您还可以通过查看具体的日志来确定健康检查的结果,日志的目录位于
health-check
目录下,日志内容示例如下:2018-04-06 23:29:50,240 INFO main - Readiness check result: success
目前 SOFA 中间件已经通过 SOFABoot 的 Readiness Check 的能力控制上游流量的进入,但是一个应用的流量可能并不是全部都是从中间件进入的,比较常见的还有从负载均衡器进入,为了控制从负载均衡器进入的流量,建议您通过 PaaS 来访问 Readiness Check 的结果,根据结果来控制是否要在负载均衡器中上线对应的节点。
扩展 Readiness Check 能力
在 Readiness Check 的各个阶段,SOFABoot 都提供了扩展的能力,应用可以根据自己的需要进行扩展,在 3.x 版本中,可供扩展点如下:
回调接口 | 说明 |
com.alipay.sofa.healthcheck.core.HealthChecker | 如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,可以直接扩展该接口。相较于 Spring Boot 本身的 HealthIndicator 接口,该接口提供了一些额外的参数配置,比如检查失败重试次数等。 |
org.springframework.boot.actuate.health.HealthIndicator | 如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。 |
org.springframework.boot.actuate.health.ReactiveHealthIndicator | 在 WebFlux 中,如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。 |
com.alipay.sofa.healthcheck.startup.ReadinessCheckCallback | 如果想要在 Readiness Check 之后做一些事情,那么可以扩展 SOFABoot 的这个接口。 |
上述四个扩展接口均可以通过 Spring Boot 标准的Ordered
、PriorityOrdered
和注解@Order
实现执行顺序的设置。
在 2.x 版本中,可供扩展的点如下:
回调接口 | 说明 |
org.springframework.context.ApplicationListener | 如果想要在 Readiness Check 之前做一些事情,那么监听这个 Listener 的 SofaBootBeforeHealthCheckEvent 事件。 |
org.springframework.boot.actuate.health.HealthIndicator | 如果想要在 SOFABoot 的 Readiness Check 里面增加一个检查项,那么可以直接扩展 Spring Boot 的这个接口。 |
com.alipay.sofa.healthcheck.startup.SofaBootAfterReadinessCheckCallback | 如果想要在 Readiness Check 之后做一些事情,那么可以扩展 SOFABoot 的这个接口。 |
Readiness Check 配置项
应用在引入 SOFABoot 的健康检查扩展之后,可以在 Spring Boot 的配置文件application.properties
中添加相关配置项来定制 Readiness Check 的相关行为。
Readiness Check 配置项 | 说明 | 默认值 | 开始支持版本 |
com.alipay.sofa.healthcheck.skip.all | 是否跳过整个 Readiness Check 阶段 | false | 2.4.0 |
com.alipay.sofa.healthcheck.skip.component | 是否跳过 SOFA 中间件的 Readiness Check | false | 2.4.0 |
com.alipay.sofa.healthcheck.skip.indicator | 是否跳过 HealthIndicator 的 Readiness Check | false | 2.4.0 |
com.alipay.sofa.healthcheck.component.check.retry.count | 组件健康检查重试次数 | 20 | 2.4.10(之前版本重试次数为 0) |
com.alipay.sofa.healthcheck.component.check.retry.interval | 组件健康检查重试间隔时间 | 1000(单位:ms) | 2.4.10(之前版本重试间隔为 0) |
com.alipay.sofa.healthcheck.module.check.retry.count | sofaboot 模块健康检查重试次数 | 0 | 2.4.10 |
com.alipay.sofa.healthcheck.module.check.retry.interval | sofaboot 模块健康检查重试间隔时间 | 1000(单位:ms) | 2.4.10(之前版本重试间隔为 0) |