health-check-endpoints について
サービス開発者向けに、ヘルスチェックエンドポイントの実装方法を解説するスキルです。Liveness、Readiness、Startup、Deepの各プローブを区別し、ExpressとKubernetesの例を示します。
主な機能
- 014種類のプローブの用途を区別
- 02重要な依存先とレイテンシを確認
- 03Expressの実装例を提示
- 04Kubernetesのプローブを設定
- 05ヘルスチェックの実践事項を紹介
活用シーン
- 01コンテナのLivenessとReadinessプローブを設定
- 02データベースなど重要な依存先の状態を確認
- 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 で依存先のチェックを省略する
コメント
Markdown 対応