首页 > 解决方案 > Spring Boot 健康端点的默认配置有什么用

问题描述

Spring Boot 可以提供一个健康端点。这是一个 HTTP URI(/actuator/health默认为 ),您可以 GET获取有关应用程序的健康信息。Spring Boot 默认启用此功能。Spring Boot 还有一个配置属性 ,management.endpoint.health.show-details用于确保响应中是否包含详细信息。该属性的默认值为never,因此未显示详细信息。因此 Spring Boot 的默认配置是提供端点,但没有任何细节。

但是没有细节的健康端点有什么用呢?尽管资源不包含任何细节,但能够获取资源会告诉您什么?

标签: spring-boothealth-monitoring

解决方案


如果您使用management.endpoint.health.show-details=never,您仍然可以看到聚合状态。此状态是所有详细状态的聚合。默认情况下,OrderedHealthAggregator正在使用,这会导致:

  • 如果所有细节都是UP,父母也是UP
  • 如果其中一个细节是DOWN,父母也是DOWN

这是文档的相关部分:

默认情况下,最终系统状态是通过根据状态的有序列表对HealthAggregator每个状态进行排序来派生的。HealthIndicator排序列表中的第一个状态用作整体健康状态。如果 noHealthIndicator返回 已知HealthAggregatorUNKNOWN状态,则使用状态。

订单可以通过management.health.status.order属性进行配置。默认情况下,它包含DOWN, OUT_OF_SERVICE, UNKNOWN, UP.

HTTP 状态也会根据聚合状态而变化。两者都UP导致UNKNOWNHTTP 状态 200,而DOWNOUT_OF_SERVICE导致 HTTP 状态 503。这是文档的相关部分:

响应中的 HTTP 状态码反映了整体的健康状况(例如,UP映射到 200,而OUT_OF_SERVICE映射DOWN到 503)。

您还可以配置应该选择哪个 HTTP 状态,例如通过配置management.health.status.http-mapping.DOWN=418.

这意味着您仍然可以使用该信息来了解是否有问题。这对于监控这些端点的任何工具/软件(Eureka、Kubernetes、任何监控工具……)都很有用。

您可能想知道,为什么不默认显示所有详细信息?好吧,问题是这可能包含敏感信息,例如您有多少磁盘空间、应用程序配置的存储位置、您连接的数据库类型……。


推荐阅读