配置Spring Actuator存活探针后成功计数未增长,如何确认探针运行?
我来给你梳理几个关键步骤,一步步排查存活探针是否通过默认Actuator健康端点正常运行:
先验证Pod内部的健康端点可用性
直接进入Pod内部发起请求,确认Actuator端点本身是正常的:kubectl exec <你的Pod名称> -- curl -v http://localhost:8080/actuator/health重点看两个点:一是返回的HTTP状态码是否为
200 OK,二是响应体中的status字段是否为UP。如果这一步都失败,说明Actuator端点本身有问题,先排查Spring Boot配置(比如是否开启了健康端点暴露:management.endpoints.web.exposure.include=health)。检查K8s Pod的事件日志
执行kubectl describe pod <你的Pod名称>后,重点看Events区域,这里会记录探针的执行情况:- 如果看到
Successfully passed liveness probe的日志,说明探针已经成功触发过; - 如果只有
Liveness probe failed的日志,说明探针请求失败了,结合日志里的错误信息(比如连接超时、返回非200码)进一步排查; - 如果完全没有探针相关的日志,先确认Pod的运行时间是否超过了你配置的
delay=60s——K8s会在Pod启动60秒后才开始第一次存活探测,时间没到的话探针还没触发。
- 如果看到
查看Spring Boot应用的请求日志
用kubectl logs <你的Pod名称>搜索/actuator/health相关的请求记录,K8s探针的请求会带有特殊的User-Agent(比如kube-probe/<K8s版本号>):- 如果能找到这类请求,说明探针已经发起调用,查看对应的返回码就能知道是否成功;
- 如果找不到,说明探针根本没发送请求,要检查探针的配置细节(比如端口是否正确、Pod的网络是否正常)。
验证Pod内部的端口监听情况
有时候应用可能没监听8080端口,导致探针请求失败。进入Pod执行以下命令确认端口状态:kubectl exec <你的Pod名称> -- ss -tulpn | grep 8080如果没有输出,说明8080端口未被监听,需要检查Spring Boot的端口配置(比如
server.port是否设为8080)。确认探针计数器的逻辑
你看到的#success=1是指最近连续成功的探测次数,如果探针从未成功过,这个值会保持0;如果之前成功过但后来失败了,这个值会重置为0。所以如果计数器没增长,要么是探针还没触发,要么是每次探测都失败了。
内容的提问来源于stack exchange,提问作者dvlpr

