引入健康檢查
SOFABoot 為 Spring Boot 的健康檢查能力增加了 Readiness Check 的能力。如果你需要使用 SOFA 中間件,那么建議使用 SOFABoot 的健康檢查能力的擴(kuò)展,來(lái)更優(yōu)雅的上線應(yīng)用實(shí)例。
引入健康檢查擴(kuò)展
要引入 SOFABoot 的健康檢查能力的擴(kuò)展,只需要引入以下的 Starter 即可:
<dependency>
<groupId>com.alipay.sofa</groupId>
<artifactId>healthcheck-sofa-boot-starter</artifactId>
</dependency>
如果不引入 SOFABoot 的健康檢查擴(kuò)展,您也可以直接依賴 HealthIndicator 接口進(jìn)行原生的 Spring Boot Actuator 的 Liveness Check。
安全提醒
從 SOFABoot 2.3.0 開(kāi)始,由于健康檢查能力依賴于 SpringBoot 1.4.x 里的Actuator
組件,而Actuator
會(huì)默認(rèn)開(kāi)啟很多EndPoint,例如/dump
、/trace
等,可能存在安全風(fēng)險(xiǎn),您可以參照官方文檔里的安全建議進(jìn)行設(shè)置。
SpringBoot 1.5.x 和 SpringBoot 2.x 已修復(fù)了部分安全行為,SOFABoot 將通過(guò)升級(jí) SpringBoot 內(nèi)核進(jìn)行支持。
查看健康檢查結(jié)果
您可以通過(guò)以下方式查看健康檢查結(jié)果:
通過(guò) URL 查看健康檢查的結(jié)果
加入健康檢查擴(kuò)展之后,您可以直接在瀏覽器中輸入
http://localhost:8080/health/readiness
查看 Readiness Check 的結(jié)果。如果要查看 Liveness Check 的結(jié)果,可以直接查看 Spring Boot 的健康檢查的 URL:http://localhost:8080/health
。重要SOFABoot 2.x 及之后的版本不再間接引入
spring-boot-starter-web
依賴,如果需要在瀏覽器中查看健康檢查結(jié)果,需要額外在工程中引入 Web 容器依賴。SOFABoot 3.x 中調(diào)整了 endpoint 路徑,
health/readiness
更改為actuator/readiness
。
通過(guò)日志查看健康檢查的結(jié)果
您還可以通過(guò)查看具體的日志來(lái)確定健康檢查的結(jié)果,日志的目錄位于
health-check
目錄下,日志內(nèi)容示例如下:2018-04-06 23:29:50,240 INFO main - Readiness check result: success
目前 SOFA 中間件已經(jīng)通過(guò) SOFABoot 的 Readiness Check 的能力控制上游流量的進(jìn)入,但是一個(gè)應(yīng)用的流量可能并不是全部都是從中間件進(jìn)入的,比較常見(jiàn)的還有從負(fù)載均衡器進(jìn)入,為了控制從負(fù)載均衡器進(jìn)入的流量,建議您通過(guò) PaaS 來(lái)訪問(wèn) Readiness Check 的結(jié)果,根據(jù)結(jié)果來(lái)控制是否要在負(fù)載均衡器中上線對(duì)應(yīng)的節(jié)點(diǎn)。
擴(kuò)展 Readiness Check 能力
在 Readiness Check 的各個(gè)階段,SOFABoot 都提供了擴(kuò)展的能力,應(yīng)用可以根據(jù)自己的需要進(jìn)行擴(kuò)展,在 3.x 版本中,可供擴(kuò)展點(diǎn)如下:
回調(diào)接口 | 說(shuō)明 |
com.alipay.sofa.healthcheck.core.HealthChecker | 如果想要在 SOFABoot 的 Readiness Check 里面增加一個(gè)檢查項(xiàng),可以直接擴(kuò)展該接口。相較于 Spring Boot 本身的 HealthIndicator 接口,該接口提供了一些額外的參數(shù)配置,比如檢查失敗重試次數(shù)等。 |
org.springframework.boot.actuate.health.HealthIndicator | 如果想要在 SOFABoot 的 Readiness Check 里面增加一個(gè)檢查項(xiàng),那么可以直接擴(kuò)展 Spring Boot 的這個(gè)接口。 |
org.springframework.boot.actuate.health.ReactiveHealthIndicator | 在 WebFlux 中,如果想要在 SOFABoot 的 Readiness Check 里面增加一個(gè)檢查項(xiàng),那么可以直接擴(kuò)展 Spring Boot 的這個(gè)接口。 |
com.alipay.sofa.healthcheck.startup.ReadinessCheckCallback | 如果想要在 Readiness Check 之后做一些事情,那么可以擴(kuò)展 SOFABoot 的這個(gè)接口。 |
上述四個(gè)擴(kuò)展接口均可以通過(guò) Spring Boot 標(biāo)準(zhǔn)的Ordered
、PriorityOrdered
和注解@Order
實(shí)現(xiàn)執(zhí)行順序的設(shè)置。
在 2.x 版本中,可供擴(kuò)展的點(diǎn)如下:
回調(diào)接口 | 說(shuō)明 |
org.springframework.context.ApplicationListener | 如果想要在 Readiness Check 之前做一些事情,那么監(jiān)聽(tīng)這個(gè) Listener 的 SofaBootBeforeHealthCheckEvent 事件。 |
org.springframework.boot.actuate.health.HealthIndicator | 如果想要在 SOFABoot 的 Readiness Check 里面增加一個(gè)檢查項(xiàng),那么可以直接擴(kuò)展 Spring Boot 的這個(gè)接口。 |
com.alipay.sofa.healthcheck.startup.SofaBootAfterReadinessCheckCallback | 如果想要在 Readiness Check 之后做一些事情,那么可以擴(kuò)展 SOFABoot 的這個(gè)接口。 |
Readiness Check 配置項(xiàng)
應(yīng)用在引入 SOFABoot 的健康檢查擴(kuò)展之后,可以在 Spring Boot 的配置文件application.properties
中添加相關(guān)配置項(xiàng)來(lái)定制 Readiness Check 的相關(guān)行為。
Readiness Check 配置項(xiàng) | 說(shuō)明 | 默認(rèn)值 | 開(kāi)始支持版本 |
com.alipay.sofa.healthcheck.skip.all | 是否跳過(guò)整個(gè) Readiness Check 階段 | false | 2.4.0 |
com.alipay.sofa.healthcheck.skip.component | 是否跳過(guò) SOFA 中間件的 Readiness Check | false | 2.4.0 |
com.alipay.sofa.healthcheck.skip.indicator | 是否跳過(guò) HealthIndicator 的 Readiness Check | false | 2.4.0 |
com.alipay.sofa.healthcheck.component.check.retry.count | 組件健康檢查重試次數(shù) | 20 | 2.4.10(之前版本重試次數(shù)為 0) |
com.alipay.sofa.healthcheck.component.check.retry.interval | 組件健康檢查重試間隔時(shí)間 | 1000(單位:ms) | 2.4.10(之前版本重試間隔為 0) |
com.alipay.sofa.healthcheck.module.check.retry.count | sofaboot 模塊健康檢查重試次數(shù) | 0 | 2.4.10 |
com.alipay.sofa.healthcheck.module.check.retry.interval | sofaboot 模塊健康檢查重試間隔時(shí)間 | 1000(單位:ms) | 2.4.10(之前版本重試間隔為 0) |