健康检查端点 health-check-endpoints

这个技能涉及实现和配置健康检查端点,用于监控服务的活跃性、就绪性和依赖状态,确保服务可用性。适用于Kubernetes、负载均衡器、自动扩展等场景,支持DevOps实践中的服务监控和故障处理。关键词:健康检查、服务监控、可用性、就绪性、Kubernetes、DevOps。

DevOps 0 次安装 0 次浏览 更新于 3/7/2026

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
  • 跳过就绪性检查中的依赖检查