16.3.4 ヘルスチェック
HTTPリクエスト受付のヘルスチェックを実施できます。
稼働監視コンポーネントからOPTIONSメソッドによるヘルスチェックHTTPリクエストを送信することで,ヘルスチェックを実施します。
- 〈この項の構成〉
(1) 障害発生の判定基準
ヘルスチェックHTTPリクエストによる通信に失敗した場合,およびエラーステータスコードが返ってきた場合,障害発生と判定します。
ヘルスチェックの状態とその説明を次に示します。
状態 |
説明 |
---|---|
初期状態 |
モニタ対象プロセスからの開始完了通知受信時にヘルスチェックHTTPリクエストの送信を開始します。 |
正常状態 |
ヘルスチェックの結果,ステータスコードの値が400未満のHTTPレスポンスを受信した場合,ヘルスチェック成功と判定します。ヘルスチェック成功と判定している間は,イベントは発行しません。 |
異常状態 |
次の状態を障害発生と判定し,障害の種類に応じた障害イベントを1回発行します。
その後,ステータスコードの値が400未満のHTTPレスポンスを受信した場合は,障害の回復と判定し,メッセージKDLR20218-Iを出力し回復イベントを1回発行して正常状態に戻ります。 |
障害イベント・回復イベントの発行時に出力されるイベントプロパティと,イベント検知後のアクションについては,「(2) 障害検知時の動作」を参照してください。
(2) 障害検知時の動作
(a) 障害検知時に出力されるイベントプロパティ
障害イベント・回復イベントの発行時には,JSON形式のイベントプロパティを出力します。
ヘルスチェックの結果に応じて,出力するイベントプロパティは次のように異なります。
-
イベントプロパティ(接続失敗またはデータ送受信失敗)
{ "type": "httprequest", "timestamp": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "succeeded": false, "port": 8080<リクエスト先のポート番号>, "virtualhost": "127.0.0.1", "method": "GET", "path": "*<Request-URIに指定するパス>", "errorkind": "connectfailure<エラー種別:connectfailureまたはiofailure>", "exceptionname": "xxx<発生した例外クラス名>", "exceptionmsg": "yyy<発生した例外メッセージ>" }
-
イベントプロパティ(エラー応答)
{ "type": "httprequest", "timestamp": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "succeeded": false, "port": 8080<リクエスト先のポート番号>, "virtualhost": "127.0.0.1", "method": "GET", "path": "*<Request-URIに指定するパス>", "errorkind": "errorresponse", "statuscode": 500<ヘルスチェックレスポンスのステータスコード> }
-
成功イベントプロパティ
{ "type": "httprequest", "timestamp": "yyyy-MM-dd'T'HH:mm:ss.SSSXXX", "succeeded": true, "port": 8080<リクエスト先のポート番号>, "virtualhost": "127.0.0.1", "method": "GET", "path": "*<Request-URIに指定するパス>", "statuscode": 200<ヘルスチェックレスポンスのステータスコード> }
(b) 障害検知後のアクション
障害イベントの通知を受けた場合,デフォルトでは次のアクションを実行します。
-
スナップショットログを収集します。
-
モニタ対象プロセスの停止指示は出さないで処理を続行します。
アクションの変更方法については「(3)(b) 障害イベント・回復イベントの通知後の動作」を参照してください。
(3) 設定できる内容
ヘルスチェックに関して設定できる内容を次に示します。
(a) ヘルスチェックの監視設定
プロセスモニタのconfig.properties(本製品の設定ファイル)で,次に示す項目を設定できます。
-
ヘルスチェックの有効/無効
-
ヘルスチェックのインターバル
-
ヘルスチェックHTTPリクエストのHTTP接続タイムアウト時間
-
ヘルスチェックHTTPリクエストのHTTP読み込みタイムアウト時間
該当するプロパティと設定例を次に示します。この例ではデフォルト値を記載しています。
healthcheck.httprequest.enabled=true healthcheck.httprequest.check.default.interval=30000 healthcheck.httprequest.check.default.connecttimeout=3000 healthcheck.httprequest.check.default.readtimeout=10000
config.properties(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。
(b) 障害イベント・回復イベントの通知後の動作
障害イベント・回復イベントの通知後の動作は,config.properties(本製品の設定ファイル)で変更できます。変更できる内容は次のとおりです。
-
ユーザコマンドの実行
ユーザコマンドを定義する場合は,別途「16.4 稼働監視機能の設定(ユーザコマンドの実行)」の定義が必要です。
-
スナップショットログの収集有無
-
モニタ対象プロセスの停止有無
config.properties(本製品の設定ファイル)については,「18.2 config.properties(本製品の設定ファイル)」を参照してください。
なお,障害イベント・回復イベントの通知時にアクションを実行する場合は,そのアクション実行時間が経過したあとにhealthcheck.httprequest.check.default.intervalで指定したインターバルを空けて,次のヘルスチェックHTTPリクエストを送信します。
該当するプロパティと設定例を次に示します。この例では,「16.4 稼働監視機能の設定(ユーザコマンドの実行)」で設定する「ユーザコマンド定義のID」として,「exec1」「exec2」を設定しています。
-
接続失敗の検知の場合
healthcheck.httprequest.actions.connectfailure.usercommand.idrefs.1=exec1 healthcheck.httprequest.actions.connectfailure.snapshot=true healthcheck.httprequest.actions.connectfailure.terminate=false
-
データ送受信失敗の検知の場合
healthcheck.httprequest.actions.iofailure.usercommand.idrefs.1=exec1 healthcheck.httprequest.actions.iofailure.snapshot=true healthcheck.httprequest.actions.iofailure.terminate=false
-
レスポンスステータスコードによるエラー検知の場合
healthcheck.httprequest.actions.errorresponse.usercommand.idrefs.1=exec1 healthcheck.httprequest.actions.errorresponse.snapshot=true healthcheck.httprequest.actions.errorresponse.terminate=false
-
回復イベントに対するユーザコマンドを定義する場合
healthcheck.httprequest.actions.recovery.usercommand.idrefs.1=exec2