name: health-check-endpoints description: 用于活跃性、就绪性和依赖监控的健康检查端点。适用于Kubernetes、负载均衡器、自动扩展,或遇到探针失败、启动延迟、依赖检查、超时配置错误的情况。
健康检查端点
实现健康检查以监控服务可用性和就绪性。
探针类型
| 探针 | 目的 | 失败操作 |
|---|---|---|
| 活跃性 | 进程是否存活? | 重启容器 |
| 就绪性 | 能否处理流量? | 从负载均衡器移除 |
| 启动 | 应用程序是否已启动? | 延迟其他探针 |
| 深度 | 所有依赖是否健康? | 触发警报 |
实现(Express)
class HealthChecker {
async checkDatabase() {
const start = Date.now();
try {
await db.query('SELECT 1');
return { status: 'healthy', latency: Date.now() - start };
} catch (err) {
return { status: 'unhealthy', error: String(err?.message || err) };
}
}
async checkRedis() {
try {
await redis.ping();
return { status: 'healthy' };
} catch (err) {
return { status: 'unhealthy', error: err.message };
}
}
async getReadiness() {
const checks = await Promise.all([
this.checkDatabase(),
this.checkRedis()
]);
const healthy = checks.every(c => c.status === 'healthy');
return { healthy, checks };
}
}
// Liveness - lightweight
app.get('/health/live', (req, res) => {
res.json({ status: 'ok', timestamp: new Date().toISOString() });
});
// Readiness - check dependencies
app.get('/health/ready', async (req, res) => {
const health = await healthChecker.getReadiness();
res.status(health.healthy ? 200 : 503).json(health);
});
Kubernetes 配置
livenessProbe:
httpGet:
path: /health/live
port: 3000
initialDelaySeconds: 15
periodSeconds: 10
failureThreshold: 3
readinessProbe:
httpGet:
path: /health/ready
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
最佳实践
- 保持活跃性检查最小化(无外部依赖)
- 在就绪性检查中只检查关键系统
- 健康时返回200,不健康时返回503
- 设置合理的超时以防止级联失败
- 包括响应时间指标
其他实现
参见 references/implementations.md 获取:
- Python Flask 完整健康检查器
- Java Spring Boot Actuator
- 完整的Kubernetes部署配置
切勿做
- 让活跃性检查依赖外部服务
- 当依赖项宕机时返回200
- 跳过就绪性检查中的依赖检查