我正在尝试分析是否使用“/actuator/health/liveness”和“/actuator/health/readiness”而不是“/actuator/health”。我主要使用https://spring.io/blog/2020/03/25/liveness-and-readiness-probes-with-spring-boot获取信息。
我发现“/actuator/health/liveness”和“/actuator/health/readiness”的http响应在额外配置时发生了变化 “management.endpoint.health.group.liveness/readiness.show-details = 始终”。
当“杀死”外部依赖项(例如:rabbitMq)时,探测端点现在响应 503,同时回复
"readinessState": {"status": "UP"},
删除“management.endpoint.health.group.liveness/readiness.show-details=always”时 端点现在可以正确响应 http 200。
这是有意的行为吗?只有显示更多信息才会改变探测器的行为,因为 kubernetes 使用 http 响应代码来决定是否“杀死”/对 pod 进行负载平衡。
这是由于设置组属性之一的不幸副作用造成的。
当您设置
management.endpoint.health.group.liveness.show-details
(或任何其他 "management.endpoint.health.group.liveness.*
属性)时,您将用您自己的组之一替换 Spring Boot 的默认 liveness
组。默认情况下,一个组包含所有运行状况指标,这就是为什么 RabbitMQ 的运行状况现在会影响响应。
您可以通过在配置组的成员身份并配置其显示详细信息的同时配置组的成员身份来避免此问题:
management.endpoint.health.group.liveness.show-details=true
management.endpoint.health.group.liveness.include=livenessState
准备组的等效配置如下:
management.endpoint.health.group.readiness.show-details=true
management.endpoint.health.group.readiness.include=readinessState
https://github.com/spring-projects/spring-boot/issues/40268 正在跟踪 Spring Boot 的一项改进,这将使这一点更加直观,并且在更改其中一个组时无需配置组成员身份设置。