健康检查接口应返回结构化JSON状态,Java推荐Spring Boot Actuator;需自定义HealthIndicator,采集数据库连接、外部服务、JVM及本地磁盘等真实运行指标。

健康检查接口设计
系统健康检查模块通常对外暴露一个轻量级 HTTP 接口(如 /actuator/health),返回结构化 JSON,标识整体及各子系统的运行状态。Java 中推荐基于 Spring Boot Actuator 实现,它默认提供 HealthIndicator 扩展点。你需要自定义实现该接口,覆盖 health() 方法,返回 Health.up().withDetail(...).build() 或 Health.down().withException(...).build()。
关键指标采集逻辑
健康检查不应只做“连得上/连不上”,而要反映真实运行能力:
-
数据库连接:执行一条轻量 SQL(如
SELECT 1),设置超时(建议 ≤ 2s),捕获 SQLException 和连接池耗尽异常 -
外部服务依赖:对 Redis、MQ、HTTP 下游等发起最小验证(如 Redis 的
PING、MQ 的 connection test),避免调用业务接口 - JVM 基础状态:检查堆内存使用率(如 >95% 触发 WARN)、线程数突增、GC 频次(近 1 分钟 Full GC ≥ 2 次标记为 DOWN)
- 本地资源:磁盘剩余空间(如 /tmp 或日志目录
分级响应与缓存策略
生产环境需避免健康检查本身成为性能瓶颈:
- 将检查结果缓存 10–30 秒(用 ConcurrentHashMap + 时间戳 或 Caffeine),避免每次请求都触发真实探测
- 支持三级状态:UP(全部正常)、OUT_OF_SERVICE(主动下线)、DOWN(故障),不使用模糊的 “UNKNOWN”
- 对非核心依赖(如报表服务)可设为 status == UP 但 details 标记 degraded = true,不影响整体健康态,供运维识别
集成与可观测性增强
健康检查要真正发挥作用,需和周边系统联动:
立即学习“Java免费学习笔记(深入)”;
- 接入 Prometheus:通过 Micrometer 暴露 health.status 计数器,配合 Alertmanager 设置 DOWN 状态持续 60s 触发告警
- K8s liveness/readiness probe 直接复用同一端点,但注意 readiness 应更宽松(如允许 DB 慢但不中断流量)
- 在日志中记录每次检查的耗时、失败原因(如 “redis-ping timeout=2000ms”),方便快速归因










