健康检查端点设计

健康检查端点的设计需要考虑多个方面,包括检查内容、返回格式和监控。

健康检查端点设计

HealthEndpoint.java
@RestController
@RequestMapping("/health")
public class HealthController {

    @GetMapping("/live")
    public ResponseEntity<Map<String, String>> liveness() {
        // 存活检查:只返回 OK
        return ResponseEntity.ok(Map.of("status", "OK"));
    }

    @GetMapping("/ready")
    public ResponseEntity<HealthResponse> readiness() {
        // 就绪检查:检查所有依赖
        HealthResponse response = new HealthResponse();

        response.setStatus(checkAllDependencies());
        response.setComponents(getComponentStatus());

        if (response.getStatus().equals("UP")) {
            return ResponseEntity.ok(response);
        }
        return ResponseEntity.status(503).body(response);
    }
}

健康检查返回格式

健康检查返回示例
{
  "status": "UP",
  "components": {
    "database": {
      "status": "UP",
      "latency": "5ms"
    },
    "cache": {
      "status": "UP",
      "latency": "2ms"
    },
    "external": {
      "status": "DOWN",
      "error": "Connection refused"
    }
  },
  "timestamp": "2024-01-15T10:30:00Z"
}

本章总结

核心要点

  1. 健康检查端点要分层设计:存活、就绪分开
  2. 返回格式要标准化:便于监控和解析
  3. 就绪检查要检查依赖:数据库、缓存、外部服务