データベースヘルスチェックコンポーネント設計
PostgreSQL、MySQL、またはMongoDBのコネクションプールステータス、クエリレイテンシ、レプリケーションラグを検証するデータベースヘルスチェックコンポーネントを設計します。
Component Checks
詳細な説明
データベースヘルスチェック
データベースヘルスチェックは、ヘルスチェックエンドポイントで最も重要なコンポーネントです。データベースの障害は通常、サービスが機能できないことを意味します。
レスポンスコンポーネント
{
"database": {
"status": "UP",
"duration": "12ms",
"message": "PostgreSQL connection pool active",
"details": {
"type": "postgresql",
"poolSize": 20,
"activeConnections": 5,
"idleConnections": 15
}
}
}
チェック項目
- 接続可用性: プールからコネクションを取得できるか?
- クエリ実行: シンプルな
SELECT 1クエリを実行 - レイテンシ: 応答時間が許容範囲内か?
- プール状態: コネクションが適切に作成・リサイクルされているか?
- レプリケーションラグ: リードレプリカのデータが十分に最新か?
実装パターン
async function checkDatabase() {
const start = Date.now();
try {
await pool.query('SELECT 1');
const duration = Date.now() - start;
return {
status: duration < 100 ? 'UP' : 'DEGRADED',
duration: `${duration}ms`,
message: `Query completed in ${duration}ms`
};
} catch (error) {
return {
status: 'DOWN',
duration: `${Date.now() - start}ms`,
message: error.message
};
}
}
しきい値ガイドライン
| メトリクス | 健全 | 劣化 | 異常 |
|---|---|---|---|
| クエリレイテンシ | < 50ms | 50-500ms | > 500ms |
| プール使用率 | < 70% | 70-90% | > 90% |
| レプリケーションラグ | < 1秒 | 1-10秒 | > 10秒 |
ユースケース
リレーショナルまたはドキュメントデータベースに依存するサービス。特にクライアントリクエストが失敗する前にデータベース障害を検出する必要があるマイクロサービス。