データ API ビルダーは、API のデータ ソースとエンティティの応答性と正常性を監視するための /health エンドポイントを提供します。 このエンドポイントは、構成されたデータ ソースとエンティティに対してチェックを実行し、設定したしきい値内で応答することを検証します。
ヘルスチェックの仕組み
- データ ソースごとに、単純なデータベース固有のクエリによって接続が検証され、応答時間が測定されます。
- REST または GraphQL が有効になっているエンティティごとに、クエリは最初の N 行を返して応答性を確認します。
- ストアド プロシージャは、パラメーターを必要とし、決定論的ではない可能性があるため、正常性チェックから自動的に除外されます。
-
/healthエンドポイントは、全体的な正常性を示す包括的なレポートにこれらの結果を集計します。
ランタイムの健全性設定
正常性チェックは、 runtime.health セクションで制御されます。
{
"runtime": {
"health": {
"enabled": true,
"roles": ["admin", "monitoring"],
"cache-ttl-seconds": 10,
"max-query-parallelism": 4
}
}
}
| プロパティ | タイプ | 既定値 | 説明 |
|---|---|---|---|
| enabled | ブーリアン | ほんとう | 包括的な正常性エンドポイントをグローバルに有効または無効にする |
| roles | string[] | null 値 |
/health エンドポイントへのアクセスが許可されているロール |
| cache-ttl-seconds | 整数 | 5 | キャッシュされた正常性レポートの有効期間 (秒単位) |
| max-query-parallelism | 整数 | 4 | 最大同時実行可能な正常性チェッククエリ数 (範囲: 1 から 8) |
ロールベースのアクセス動作
開発モード (
host.mode: development):-
rolesが構成されていない場合: すべてのユーザーがアクセスできる正常性エンドポイント (匿名として扱われます) -
rolesが構成されている場合: 指定されたロールのみがエンドポイントにアクセスできます
-
運用モード (
host.mode: production):-
roles明示的に定義する必要があります -
rolesを省略すると、すべての要求に対して 403 Forbidden が返されます - パブリック アクセスを許可するには、
"roles": ["anonymous"]
-
Important
ここで構成されたロールは、個々のエンティティ操作のアクセス許可ではなく、正常性エンドポイントへのアクセスを制御します。 エンティティにクエリを実行するアクセス許可がないロールの場合、そのエンティティの正常性チェックには失敗が反映されます。これは予期される動作です。
ルートパスの基本的なヘルスエンドポイント
/の簡略化された正常性エンドポイントは、認証なしで常にパブリックにアクセスできます。 正常性チェックを実行せずに、基本的なサービス情報 (バージョン、状態) を返します。
データ ソースの正常性の構成
各データ ソースは、 data-source.healthの正常性チェック用に構成できます。
{
"data-source": {
"health": {
"enabled": true,
"name": "primary-sql-db",
"threshold-ms": 1500
}
}
}
| プロパティ | タイプ | 既定値 | 説明 |
|---|---|---|---|
| enabled | ブーリアン | ほんとう | このデータ ソースの正常性チェックを有効にする |
| 名前 | 文字列 | database-type の値 | 正常性レポートに表示される一意の識別子 |
| スレッショルド-ミリ秒 | 整数 | 1000 | 許可されるクエリの最大実行時間 (ミリ秒単位) |
エンティティのヘルス構成
エンティティ チェックは、 entities.{entity-name}.healthのエンティティごとに有効にすることができます。
{
"entities": {
"Book": {
"health": {
"enabled": true,
"first": 50,
"threshold-ms": 500
}
}
}
}
| プロパティ | タイプ | 既定値 | 説明 |
|---|---|---|---|
| enabled | ブーリアン | ほんとう | エンティティの正常性チェックを有効にする |
| first | 整数 | 100 | 正常性クエリによって返される行数 (範囲: 1 から 500) |
| しきい値-ms | 整数 | 1000 | 許可されるクエリの最大実行時間 (ミリ秒単位) |
注
firstの値は、max-page-sizeのランタイム構成以下である必要があります。
first値を小さくすると、パフォーマンスが向上します。 多数のエンティティを監視する場合、 first 値が大きいほどレポートの速度が低下する可能性があります。
エンティティの正常性チェックは、REST と GraphQL の両方 (有効な場合) に対して実行されます。 各エントリは、タグ (rest または graphql) を含むレポートに個別のエントリとして表示されます。
パフォーマンスとキャッシュに関する考慮事項
ヘルスチェック キャッシュ (cache-ttl-seconds):
- 迅速な要求によるシステムの過負荷を防ぎます
- 構成された TTL の完全な正常性レポートをキャッシュします
- キャッシュを無効にするには、
0に設定します - 既定値: 5 秒
クエリの並列処理 (max-query-parallelism):
- 同時に実行される正常性チェック クエリの数を制御します
- 値を大きくすると、チェックが高速化されますが、データベースの負荷が増加します
- 範囲: 1 ~ 8
- 既定値: 4
- エンティティが多い場合や、リソースの制限が厳しい場合は、より低い値を使用します
サンプルの正常性チェック応答
{
"status": "Healthy",
"version": "1.2.3",
"app-name": "dab_oss_1.2.3",
"timestamp": "2025-01-15T10:30:00Z",
"configuration": {
"rest": true,
"graphql": true,
"mcp": true,
"caching": false,
"telemetry": true,
"mode": "Production"
},
"checks": [
{
"status": "Healthy",
"name": "primary-sql-db",
"tags": ["data-source"],
"data": {
"response-ms": 12,
"threshold-ms": 1500
}
},
{
"status": "Healthy",
"name": "Book",
"tags": ["rest", "endpoint"],
"data": {
"response-ms": 45,
"threshold-ms": 500
}
},
{
"status": "Healthy",
"name": "Book",
"tags": ["graphql", "endpoint"],
"data": {
"response-ms": 38,
"threshold-ms": 500
}
}
]
}
その他の考慮事項
- 正常性チェックでは、エンティティとエンドポイントの承認が考慮されます。 ロールにエンティティにアクセスするためのアクセス許可がない場合は、ヘルスチェックが報告します。
- ストアド プロシージャは、パラメーターを必要とし、副作用が発生する可能性があるため、除外されます。
-
rest.enabled: falseまたはgraphql.enabled: falseを持つエンティティは、これらのチェックから除外されます。 -
data-source.health.enabled: falseすると、データ ソースのチェックはスキップされます。