ヘルスチェック
ヘルスチェックを使用したKeeperゲートウェイの監視
概要
本ページでは、KeeperPAMゲートウェイに実装されたヘルスチェック機能について取り扱います。ヘルスチェックは、システムの状態を常に把握できるモニタリング手法であり、よくある運用上の課題を効果的に解決できます。
ヘルスチェックを有効にすることで、以下のようなメリットがあります。
ロードバランサーと連携し、不健全なインスタンスを自動的に待機系から除外し、回復後に再追加することが可能になります。
Prometheus、Nagios、Datadogなどの監視システムと統合することで、ゲートウェイの状態を可視化するダッシュボードや、自動アラート通知を構築できます。
自動監視スクリプトやオーケストレーションツールと連携し、障害発生時の検知と回復処理を人手を介さずに実行できます。
これにより、システム全体の可用性と運用効率が大幅に向上します。
ヘルスチェックサービスはデフォルトで無効になっています。
使用するには、以降のセクションに記載の通り、サービスを有効にする必要があります。
シンプルなヘルスチェックの設定
以下の設定を行うことで、バイナリ版およびDocker版の両方で、基本的なヘルスチェックサービスを有効にできます。より高度な設定については、この後のセクションで詳しく取り扱います。
ヘルスチェックの有効化 - バイナリインストール方式
ヘルスチェック機能を有効にしてゲートウェイを起動します。
gateway start --health-checkゲートウェイがヘルスチェックを有効にして起動した後、ゲートウェイの状態を確認できます。
「Could not connect to health check server」というエラーが表示された場合、適切にヘルスチェックを有効にしなかったことを意味します。
「Exception No such command 'keeper-gateway.exe'」というエラーが表示された場合、コマンドの構文が間違っている可能性があります。コマンド名は常にgatewayを使用してください。
ヘルスチェックの有効化 – Dockerインストール方式
Dockerインストール方式でヘルスチェックを有効化するには、docker-compose.yml ファイルを以下のように修正します。
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED を追加
healthcheck セクションを追加し、必要なチェック間隔を設定
docker-composeファイルを変更したら、以下のコマンドで変更を反映してコンテナを再起動します。
コンテナ名が keeper-gateway の場合、サービスステータスを確認するための1行bashコマンドは以下のとおりです。
コンテナ名が不明な場合は、以下のスクリプトで取得できます。
以下はbashコマンドでヘルスステータスを確認する例です。
以下の完全なbashスクリプトをwatchdogサービスに追加することで、サービスステータスを監視し、異常時にコンテナを自動再起動できます。/path/to/ を適切なパスに置き換えます。
このヘルスチェックをLinuxシステムでスケジュールするには、cronに追加します。
毎分監視を行うには、以下をcrontabに追加します。
高度なヘルスチェック構成の例
以下では、異なる環境におけるヘルスチェックのカスタマイズ方法をご紹介します。
基本的なHTTP
gateway start --health-check
gateway health-check
curl http://127.0.0.1:8099/health
認証付きHTTP
gateway start --health-check --health-check-auth-token mytoken
gateway health-check --token mytoken
curl -H "Authorization: Bearer mytoken" http://127.0.0.1:8099/health
HTTPS (SSL)
gateway start --health-check --health-check-ssl --health-check-ssl-cert /path/cert.pem --health-check-ssl-key /path/key.pem
gateway health-check --ssl
curl -k https://127.0.0.1:8099/health
認証付きHTTPS
gateway start --health-check --health-check-ssl --health-check-ssl-cert /path/cert.pem --health-check-ssl-key /path/key.pem --health-check-auth-token mytoken
gateway health-check --ssl --token mytoken
curl -k -H "Authorization: Bearer mytoken" https://127.0.0.1:8099/health
カスタムポート
gateway start --health-check --health-check-port 8443
gateway health-check --port 8443
curl http://127.0.0.1:8443/health
カスタムホスト
gateway start --health-check --health-check-host 0.0.0.0
gateway health-check --host 0.0.0.0
curl http://0.0.0.0:8099/health
本番環境のセットアップ
gateway start --health-check --health-check-host 0.0.0.0 --health-check-port 8443 --health-check-ssl --health-check-ssl-cert /etc/ssl/cert.pem --health-check-ssl-key /etc/ssl/key.pem --health-check-auth-token $(cat /etc/secrets/token)
gateway health-check --host 0.0.0.0 --port 8443 --ssl --token $(cat /etc/secrets/token)
curl -k -H "Authorization: Bearer $(cat /etc/secrets/token)" https://0.0.0.0:8443/health
出力形式の例
ステータスのみ
gateway health-check --ssl --token mytoken
ゲートウェイが実行中で接続されている場合は「OK」(終了コード0)、異常がある場合は「CRITICAL: ...」(終了コード1) を返します。
詳細情報
gateway health-check --ssl --token mytoken --info
監視スクリプトに適したkey=valueのペアを返します。
JSON形式
gateway health-check --ssl --token mytoken --json
HTTPエンドポイントに一致する完全なJSONレスポンスを返します。
トラブルシューティングコマンド
サーバーが実行中か確認
curl http://127.0.0.1:8099/health
接続成功または 「Connection refused」
SSL接続の確認
curl -k https://127.0.0.1:8099/health
SSLハンドシェイク成功またはSSLエラー
認証の確認
curl -k -H "Authorization: Bearer wrongtoken" https://127.0.0.1:8099/health
{"error": "Invalid authentication token"}
サーバーバインディングの確認
curl http://0.0.0.0:8099/health
バインドが0.0.0.0の場合は成功、127.0.0.1の場合は失敗
エラーメッセージとトラブルシューティング
CLIヘルスチェックを使用すると、問題を診断するための詳細なエラーメッセージが表示されます。
認証エラー (HTTP 401)
接続エラー
SSL証明書エラー
実装
ゲートウェイのヘルスチェックは、Bottleを使用して実装されています。Bottleは、Python用の軽量なWSGIマイクロウェブフレームワークです。以下の利点によりBottleが選ばれました。
最小限の依存関係 (単一ファイル、サイズは約60KB)
Pythonの組み込みHTTPサーバーよりも強化されたセキュリティ
適切なリクエストのルーティングと処理
優れたエラーマネジメント
スレッドセーフ
最小限のオーバーヘッドで本番環境に対応
CLIヘルスチェック
コマンドラインからゲートウェイのヘルスチェックを実行できます。
このコマンドは次のような結果を返します。
終了コード0: ゲートウェイが正常な場合
終了コード1: ゲートウェイが実行中でない、または正常でない場合
ステータスを示すテキスト (OK/CRITICAL/WARNING)
機械可読形式の詳細な出力 (1行につき1組のkey=value)
JSON形式の出力 (HTTPエンドポイント形式と同等の構造)
ヘルスチェックサーバーがSSLを使用している場合
ヘルスチェックサーバーに認証が必要な場合
ヘルスチェックサーバーがデフォルトのポート以外で動作している場合
ヘルスチェックサーバーが異なるホストで動作している場合
詳細な出力に含まれる情報
ゲートウェイのバージョン
接続状態
WebSocketメトリクス (利用可能な場合)
プロセス情報 (バックグラウンドモードの場合)
これにより、監視スクリプトやcronジョブに適した形式となります。
CLIヘルスチェックコマンドを使用するには、HTTPヘルスチェックサーバーを起動している必要があります。ヘルスチェックサーバーが起動していない場合はエラーメッセージが表示され、ヘルスチェックサーバーを有効にするよう案内されます。
HTTPヘルスチェック
ゲートウェイには、HTTPヘルスチェックエンドポイントが組み込まれており、環境変数またはコマンドライン引数を使って有効にできます。
設定
ヘルスチェックサーバーは、環境変数またはコマンドライン引数を使用して設定できます。
環境変数
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED
HTTPヘルスチェックの有効化 (1、true、yesで有効)
無効
KEEPER_GATEWAY_HEALTH_CHECK_PORT
HTTPサーバーのポート
8099
KEEPER_GATEWAY_HEALTH_CHECK_HOST
バインドするホストアドレス
127.0.0.1
KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKEN
リクエスト用の認証トークン
なし
KEEPER_GATEWAY_HEALTH_CHECK_USE_SSL
SSLの有効化 (1、true、yesで有効)
無効
KEEPER_GATEWAY_HEALTH_CHECK_SSL_CERT
SSL証明書のパス
なし
KEEPER_GATEWAY_HEALTH_CHECK_SSL_KEY
SSL秘密鍵のパス
なし
コマンドライン引数
ゲートウェイを起動する際、以下のコマンドライン引数も使用できます。
同じ設定が環境変数にも定義されている場合、コマンドライン引数が優先されます。
コマンド例
デフォルト設定での基本的なヘルスチェック
カスタムポートと認証トークンを指定する場合
すべてのインターフェースにバインド (安全が確保された環境でのみ推奨)
SSLを有効にし、証明書と秘密鍵を指定する場合
すべてのオプションを使用した完全な例
使用方法
ヘルスチェック機能を有効にすると、HTTPヘルスチェックエンドポイントは以下の場所で利用可能になります。
SSLを使用した場合
レスポンス形式
エンドポイントは次のようなレスポンスを返します。
HTTP 200: ゲートウェイが正常な場合
HTTP 503: ゲートウェイが正常でない場合
詳細な情報を含むJSONレスポンス
レスポンスに含まれる情報
status: ゲートウェイの全体的な状態 (「healthy (正常)」または「unhealthy (異常)」)
message: 状態を説明する簡潔な文章
details: ゲートウェイに関する詳細情報
timestamp: レスポンス生成時のサーバーのタイムスタンプ
version: APIバージョン
connection_status: 接続状態 (「connected (接続済み)」、「disconnected (未接続)」など)
websocket: WebSocket接続のメトリクス
uptime_seconds: WebSocket接続の稼働時間 (秒単位)
uptime_human: 人間が読める形式の稼働時間 (「1m 25s」など)
last_ping_received_seconds_ago: 前回のping受信からの経過時間 (秒単位)
latency_ms: 最後のping-pongの往復遅延時間 (ミリ秒単位)
last_ping_sent_timestamp: 前回のping送信時刻 (Unixタイムスタンプ)
last_pong_received_timestamp: 前回のpong受信時刻 (Unixタイムスタンプ)
レスポンス例
正常なゲートウェイ
正常でないゲートウェイ
latency_ms、last_ping_sent_timestamp、last_pong_received_timestamp などのメトリクスは、レスポンスに常に含まれるとは限りません。これらのメトリクスは、現在のWebSocket接続の状態やping/pongメッセージの送受信のタイミングによって異なります。
ステータス更新の遅延について
ヘルスチェックはWebSocket接続の現在の状態を反映しますが、ステータス更新に遅延が生じる場合があります。
ステータス更新の遅延例
接続が失われた場合、ゲートウェイが再接続を試みるため、ヘルスチェックが「unhealthy (異常)」 ステータスを報告するまで最大で2分かかることがあります。同様に接続が回復した場合でも、ヘルスチェックが「healthy (正常)」 ステータスを反映するまで最大で2分かかることがあります。
この遅延は、一時的な接続不良を即座に異常と判断しないための仕組みです。ゲートウェイが自動的に回復するための猶予を確保する目的で、意図的に設けられています。
セキュリティ
HTTPヘルスチェックを利用することで、以下のセキュリティ機能が適用されます。
認証:
KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKENが設定されている場合、リクエストにはAuthorizationヘッダーにトークンを含める必要があります。SSL/TLS: SSLが有効になっている場合、すべての通信は暗号化されます。有効な証明書と秘密鍵を提供する必要があります。
ローカルホストバインディング: サーバーはデフォルトでローカルホストにバインドされ、ネットワーク経由でエンドポイントは公開されません。
セキュリティヘッダー: ヘルスチェックサーバーからのレスポンスには、以下のセキュリティヘッダーが追加されます。
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Content-Security-Policy: default-src 'none'
レート制限: ローカルホスト以外の接続には自動的にレート制限が適用されます (1分あたり60リクエスト/IP)。
情報保護: サーバーが非ローカルホストアドレスにバインドされている場合、機密情報はレスポンスから自動的に削除されます。
強制SSL: 非ローカルホストインターフェースにバインドされると、SSLが自動的に強制されます。
TLSの互換性
ヘルスチェックサーバーは、さまざまなクライアントに対応できるよう、以下のように構成されています。
TLS 1.2以上の安全なTLSデフォルト設定を使用し、セキュリティを最大限に確保
強力な暗号化を実現する最新の暗号スイートに対応
HTTPおよびHTTPSのプロトコル交渉を自動的に処理
最新のTLSバージョンに対応したクライアントについては、以下のような標準的なcurlコマンドを使用できます。
Docker特有の構成要件
KeeperゲートウェイをDocker内で実行する場合、ヘルスチェックをホストや外部システムから利用できるようにするには、以下の特別な設定が必要な場合があります。
0.0.0.0へのバインド
ヘルスチェックサーバーをコンテナ外部からアクセス可能にするには、
0.0.0.0にバインドする必要があります。127.0.0.1にバインドした場合、アクセスはコンテナ内部のみに制限されます。
SSLの強制
0.0.0.0を使用する場合、Keeperゲートウェイはヘルスチェックデータを保護するためにSSLを強制します。有効な証明書と秘密鍵を提供しない場合、サーバーは起動しません。
認証の必要性
0.0.0.0にバインドする場合、エンドポイントを保護するために、AUTH_TOKENを指定する必要があります。
Docker Composeの例
自己署名証明書の作成
ホストからエンドポイントをテスト
Linux環境での構成例
コマンドライン引数を使用する場合
自己署名SSL証明書の使用
テスト環境や内部利用の場合、自己署名証明書を生成してSSL/TLS暗号化を有効にすることができます。
コマンドライン引数を使用する場合
自己署名証明書を使用する場合、HTTPクライアントは証明書を信頼するように設定するか、SSL検証を無視するように設定する必要があります (本番環境では推奨されません)。
監視システムとの統合
このエンドポイントは、次のような監視システムと連携して使用できます。
Prometheus (Blackbox exporter経由)
Nagios/Icinga
Zabbix
Datadog
AWS CloudWatch
HTTPチェックが可能な任意の監視システム
最終更新

