ヘルスチェック
ヘルスチェックを使用したKeeperゲートウェイの監視
概要
本ページでは、KeeperPAMゲートウェイに実装されたヘルスチェック機能について取り扱います。ヘルスチェックは、システムの状態を常に把握できるモニタリング手法であり、よくある運用上の課題を効果的に解決できます。
ヘルスチェックを有効にすることで、以下のようなメリットがあります。
ロードバランサーと連携し、不健全なインスタンスを自動的に待機系から除外し、回復後に再追加することが可能になります。
Prometheus、Nagios、Datadogなどの監視システムと統合することで、ゲートウェイの状態を可視化するダッシュボードや、自動アラート通知を構築できます。
自動監視スクリプトやオーケストレーションツールと連携し、障害発生時の検知と回復処理を人手を介さずに実行できます。
ネイティブインストール (Windows、Linux) では、ヘルスチェックサービスはデフォルトで無効です。以降のセクションに記載のとおり、サービスを有効にする必要があります。
シンプルなヘルスチェックの設定
以下の設定を行うことで、バイナリ版およびDocker版の両方で、基本的なヘルスチェックサービスを有効にできます。より高度な設定については、高度な構成もご参照ください。
ヘルスチェックの有効化
ゲートウェイでヘルスチェックサービスを有効にするには、以下のCLIプロパティ / 環境変数を追加します。
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: 'true'ゲートウェイ環境変数の構成方法をご参照ください。
Docker Composeファイルでは、合わせて healthcheck の構成も必要です。
keeper-gateway:
...
environment:
...
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: 'true'
healthcheck:
test:
- CMD
- /usr/local/bin/keeper-gateway
- health-check
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
...
restart: unless-stopped--health-checkゲートウェイCLI引数の構成方法をご参照ください。
ヘルスチェックの確認
有効化後、ゲートウェイのヘルスチェックを確認します。
CLI
ネイティブのWindowsおよびLinuxインストールでは、ゲートウェイCLIでヘルスチェックを確認できます。
「Could not connect to health check server」というエラーが表示された場合、適切にヘルスチェックを有効にしていないことを意味します。
「Exception No such command 'keeper-gateway.exe'」というエラーが表示された場合、コマンドの構文が間違っています。コマンド名は常に「gateway」を使用してください。
Docker
Dockerインストールでは、Dockerの inspect メソッドでヘルスチェックを取得できます。
コンテナ名が keeper-gateway の場合、以下はサービスステータスを確認する1行のbashコマンドです。
コンテナ名が不明な場合は、以下のスクリプトで取得できます。
以下は、bashコマンドでヘルスステータスを確認する例です。
以下の完全なbashスクリプトをwatchdogサービスに追加することで、サービスステータスを監視し、異常時にコンテナを自動再起動できます。/path/to/ を適切なパスに置き換えます。
このヘルスチェックをLinuxシステムでスケジュールするには、cronに追加します。
毎分監視を行うには、以下をcrontabに追加します。
高度な構成
以下では、異なる環境におけるヘルスチェックのカスタマイズ方法について詳しく取り扱います。
ヘルスチェックの有効化
基本的なHTTP
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
認証付きHTTP
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKEN: mytoken
HTTPS (SSL)
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_USE_SSL: true
KEEPER_GATEWAY_HEALTH_CHECK_SSL_CERT: /path/cert.pem
KEEPER_GATEWAY_SSL_KEY: /path/key.pem
認証付きHTTPS
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_USE_SSL: true
KEEPER_GATEWAY_HEALTH_CHECK_SSL_CERT: /path/cert.pem
KEEPER_GATEWAY_SSL_KEY: /path/key.pem
KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKEN: mytoken
カスタムポート
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_PORT: 8443
カスタムホスト
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_HOST: 0.0.0.0
本番環境のセットアップ
KEEPER_GATEWAY_HEALTH_CHECK_ENABLED: true
KEEPER_GATEWAY_HEALTH_CHECK_USE_SSL: true
KEEPER_GATEWAY_HEALTH_CHECK_SSL_CERT: /path/cert.pem
KEEPER_GATEWAY_SSL_KEY: /path/key.pem
KEEPER_GATEWAY_HEALTH_CHECK_HOST: 0.0.0.0
KEEPER_GATEWAY_HEALTH_CHECK_PORT: 8443
KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKEN: $(cat /etc/secrets/token)
基本的なHTTP
gateway start \
--health-check
認証付きHTTP
gateway start \
--health-check \
--health-check-auth-token mytoken
HTTPS (SSL)
gateway start \
--health-check \
--health-check-ssl \
--health-check-ssl-cert /path/cert.pem \
--health-check-ssl-key /path/key.pem
認証付き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 start \
--health-check \
--health-check-port 8443
カスタムホスト
gateway start \
--health-check \
--health-check-host 0.0.0.0
本番環境のセットアップ
gateway start \
--health-check \
--health-check-ssl \
--health-check-ssl-cert /path/cert.pem \
--health-check-ssl-key /path/key.pem \
--health-check-host 0.0.0.0 \
--health-check-port 8443 \
--health-check-auth-token $(cat /etc/secrets/token)
これらのプロパティのデフォルト定義について詳しくは、ゲートウェイ環境変数のドキュメントをご参照ください。
ヘルスチェックの確認
基本的なHTTP
gateway health-check
curl https://127.0.0.1:8099/health
認証付きHTTP
gateway health-check \
--token mytoken
curl https://127.0.0.1:8099/health \
-H "Authorization: Bearer mytoken"
HTTPS (SSL)
gateway health-check \
--ssl
curl https://127.0.0.1:8099/health \ -k
認証付きHTTPS
gateway health-check \
--ssl \
--token mytoken
curl https://127.0.0.1:8099/health \ -k
-H "Authorization: Bearer mytoken"
カスタムポート
gateway health-check \
--port 8443
curl http://127.0.0.1:8443/health
カスタムホスト
gateway health-check \
--host 0.0.0.0
curl http://0.0.0.0:8099/health
本番環境のセットアップ
gateway health-check \
--host 0.0.0.0 \
--port 8443 \
--ssl \
--token $(cat /etc/secrets/token)
curl -k https://0.0.0.0:8443/health \
-H "Authorization: Bearer $(cat /etc/secrets/token)"
出力形式の例
ステータスのみ
gateway health-check \
--token mytoken
戻り値:
OK: Gateway is running and connected
CRITICAL: ...
詳細情報
gateway health-check \
--token mytoken \
--info
戻り値:
監視スクリプト向けのKey=valueペア
JSON形式
gateway health-check \
--token mytoken \
--json
戻り値:
HTTPエンドポイントと一致する完全なJSONレスポンス
HTTPヘルスチェック
上記のヘルスチェック機能を使用して、ゲートウェイのHTTPヘルスチェックを有効にできます。
使用方法
有効にすると、HTTPヘルスチェックエンドポイントは以下の場所で利用可能になります。
SSLを使用した場合:
レスポンス形式
エンドポイントは以下を返します。
HTTP 200: ゲートウェイが正常な場合
HTTP 503: ゲートウェイが正常でない場合
詳細を含むJSONレスポンス
正常なゲートウェイの例
正常でないゲートウェイの例:
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を使用する場合、ヘルスチェックデータを保護するため、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チェックが可能な任意の監視システム
トラブルシューティング
サーバーが実行中か確認
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サーバーよりも強化されたセキュリティ
適切なリクエストのルーティングと処理
優れたエラーマネジメント
スレッドセーフ
最小限のオーバーヘッドで本番環境に対応
最終更新

