Hitachi

uCosminexus Application Runtime for Apache Tomcat ユーザーズガイド


10.3.3 ヘルスチェック

TomcatのHTTPリクエスト受付のヘルスチェックを実施できます。

稼働監視コンポーネントからOPTIONSメソッドによるヘルスチェックHTTPリクエストを送信することで,ヘルスチェックを実施します。

〈この項の構成〉

(1) 障害発生の判定基準

ヘルスチェックHTTPリクエストによる通信に失敗した場合,およびエラーステータスコードが返ってきた場合,障害発生と判定します。

詳細な状態は次のとおりです。

状態

説明

初期状態

Tomcatサーバプロセスからの開始完了通知受信時にヘルスチェックHTTPリクエストの送信を開始します。

正常状態

ヘルスチェックの結果,ステータスコードの値が400未満のHTTPレスポンスを受信した場合,ヘルスチェック成功と判定します。ヘルスチェック成功と判定している間は,イベントは発行しません。

異常状態

次の状態を障害発生と判定し,障害の種類に応じた障害イベントを1回発行します。

  • ヘルスチェックHTTPリクエストで接続失敗(接続タイムアウト発生を含む)やデータ送受信失敗(読み込みタイムアウト発生を含む)をした場合。この際,タイムアウトの場合はメッセージKDLR20216-Wを,タイムアウト以外の通信失敗の場合はメッセージKDLR20214-Wをそれぞれ出力します。

  • ステータスコードの値が400以上のHTTPレスポンスを受信した場合。この際,メッセージKDLR20215-Wを出力します。

その後,ステータスコードの値が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) 障害検知後のアクション

障害イベントの通知を受けた場合,デフォルトでは次のアクションを実行します。

  • スナップショットログを収集します。

  • Tomcatサーバプロセスの停止指示は出さないで処理を続行します。

アクションの変更方法については「(3)(b) 障害イベント・回復イベントの通知後の動作」を参照してください。

(3) 設定できる内容

ヘルスチェックに関して設定できる内容を次に示します。

(a) ヘルスチェックの監視設定

Tomcatプロセスモニタのconfig.properties(uCART設定ファイル)で,次に示す項目を設定できます。

  • ヘルスチェックの有効/無効

  • ヘルスチェックのインターバル

  • ヘルスチェック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(uCART設定ファイル)については,「12.2 config.properties(uCART設定ファイル)」を参照してください。

(b) 障害イベント・回復イベントの通知後の動作

障害イベント・回復イベントの通知後の動作は,config.properties(uCART設定ファイル)で変更できます。変更できる内容は次のとおりです。

config.properties(uCART設定ファイル)については,「12.2 config.properties(uCART設定ファイル)」を参照してください。

なお,障害イベント・回復イベントの通知時にアクションを実行する場合は,そのアクション実行時間が経過したあとにhealthcheck.httprequest.check.default.intervalで指定したインターバルを空けて次のヘルスチェックHTTPリクエストを送信します。

該当するプロパティと設定例を次に示します。この例では,「10.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