SpringBoot - Actuator应用监控使用详解4(health端点:健康信息展示)
八、健康信息基本配置
1,展示健康信息详情
(1)默认情况下,我们只能通过 health 端点获取到 status 信息,而 detail 信息是默认不显示的 :

(2)我们可以通过 management.endpoint.health.show-details 属性来配置 detail 信息的显示策略,它有如下三种可选值:
- never:即不显示 details 信息(默认值)
- when-authorized:details 信息只展示给认证用户,即用户登录后才可以查看 details 信息
- always:将 details 信息展示给所有用户
另外还可以通过 management.endpoint.health.roles 属性配置要求的角色,management.endpoint.health.roles=ADMIN 表示认证的用户必须具有 ADMIN 角色才能看到 details 信息
(3)这里我们将 details 信息展示给所有用户:
management.endpoint.health.show-details=always
(4)再次访问 health 端口,可以看到这次多了 details 信息的显示:

2,健康指示器
(1)默认情况下 Spring Boot 会根据 classpath 中依赖的添加情况来自动配置一些健康指示器(HealthIndicators),具体有下面这些:
- CassandraHealthIndicator:检查 Cassandra 数据库状况
- DiskSpaceHealthIndicator:检查磁盘空间是否不足
- DataSourceHealthIndicator:检查是否可以从 DataSource 获取一个 Connection
- ElasticsearchHealthIndicator:检查 Elasticsearch 集群状况
- InfluxDbHealthIndicator:检查 InfluxDB 服务器状况
- JmsHealthIndicator:检查 JMS 消息代理状况
- MailHealthIndicator:检查邮件服务器状况
- MongoHealthIndicator:检查 Mongo 数据库状况
- Neo4jHealthIndicator:检查 Neo4j 服务器状况
- RabbitHealthIndicator:检查 Rabbit 服务器状况
- RedisHealthIndicator:检查 Redis 服务器状况
- SolrHealthIndicator:检查 Solr 服务器状况
(2)如果项目中存在相关的依赖,那么列表中对应的 HealthIndicators 将会被配置。比如我们 pom.xml 添加加了数据库、邮件服务器依赖,此时访问 health 端点,结果如下:

(3)如果我们不需要这么多 HealthIndicators,则可以通过如下配置关闭所有的 HealthIndicators 自动化配置:
management.health.defaults.enabled=false
附:自定义健康指示器 HealthInfo
1,基本配置
(1)除了 Spring Boot 自动收集的这些 HealthInfo 之外,我们也可以自定义 HealthInfo,只需要实现 HealthIndicator 接口即可:
@Component public class MyHealth implements HealthIndicator { @Override public Health health() { if(Math.random() > 0.5) { return Health.up().withDetail("msg", "网络连接正常...").build(); } return Health.down().withDetail("msg", "网络断开...").build(); } }
(2)配置完成后,再次访问 health 端点,结果如下:

2,增加响应状态
(1)默认的响应状态一共有 4 种:DOWN、OUT_OF_SERVICE、UP、UNKNOWN,如果需要加增加响应状态,可以在 application.properties 种通过 management.health.status.order 属性进行配置。比如下面增加一个响应状态 FATAL:
management.health.status.order=FATAL,DOWN,OUT_OF_SERVICE,UP,UNKNOWN
(2)配置完毕后,就可以在 helath 方法中返回自定义的响应状态了:
@Component public class MyHealth implements HealthIndicator { @Override public Health health() { return Health.status("FATAL").withDetail("msg", "网络断开...").build(); } }
(3)重启项目,再次访问 health 端点,结果如下:

3,自定义响应码
(1)默认的 4 种响应状态种,UP、UNKNOWN 的 HTTP 响应码为 200,DOWN、OUT_OF_SERVICE 的 HTTP 响应码为 503。而所有自行添加的响应状态对应的 HTTP 响应码都是 200,如果需要对自定义的响应状态配置响应码,添加如下配置即可:management.health.status.http-mapping.FATAL=503
(2)重启项目,再次访问 health 端点,结果如下:
