mcpField
H
health-check-endpoints

health-check-endpoints

github.com/secondskyクラウド・DevOps240413 回インストール5 週間前に更新
リポジトリ

health-check-endpoints について

サービス開発者向けに、ヘルスチェックエンドポイントの実装方法を解説するスキルです。Liveness、Readiness、Startup、Deepの各プローブを区別し、ExpressとKubernetesの例を示します。

主な機能

  1. 014種類のプローブの用途を区別
  2. 02重要な依存先とレイテンシを確認
  3. 03Expressの実装例を提示
  4. 04Kubernetesのプローブを設定
  5. 05ヘルスチェックの実践事項を紹介

活用シーン

  1. 01コンテナのLivenessとReadinessプローブを設定
  2. 02データベースなど重要な依存先の状態を確認
  3. 03サービスの可用性を監視しアラートを発生

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/secondsky/claude-skills --skill health-check-endpoints

インストール後、Claude Code で/health-check-endpointsを入力して読み込まれたか確認します。

同梱ファイルreferences/implementations.md

詳細

ヘルスチェックエンドポイント

サービスの可用性と準備状態を監視するためのヘルスチェックを実装します。

プローブの種類

プローブ目的失敗時のアクション
Livenessプロセスは稼働していますか?コンテナを再起動する
Readinessトラフィックを処理できますか?ロードバランサーから削除する
Startupアプリは起動しましたか?他のプローブを遅らせる
Deepすべての依存先は正常ですか?アラートを発生させる

実装(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

ベストプラクティス

  • Liveness チェックは最小限に抑えます(外部依存先を含めません)
  • Readiness では重要なシステムのみをチェックします
  • 正常な場合は 200、不正常な場合は 503 を返します
  • 連鎖的な障害を防ぐため、妥当なタイムアウトを設定します
  • 応答時間のメトリクスを含めます

その他の実装

references/implementations.md を参照してください。

  • Python Flask による完全なヘルスチェッカー
  • Java Spring Boot Actuator
  • Kubernetes の完全なデプロイ設定

やってはいけないこと

  • Liveness を外部サービスに依存させる
  • 依存先が停止しているのに 200 を返す
  • Readiness で依存先のチェックを省略する

コメント