For the complete documentation index, see llms.txt. This page is also available as Markdown.

ヘルスチェック

ヘルスチェックを使用したKeeperゲートウェイの監視

概要

本ページでは、KeeperPAMゲートウェイに実装されたヘルスチェック機能について取り扱います。ヘルスチェックは、システムの状態を常に把握できるモニタリング手法であり、よくある運用上の課題を効果的に解決できます。

ヘルスチェックを有効にすることで、以下のようなメリットがあります。

  • ロードバランサーと連携し、不健全なインスタンスを自動的に待機系から除外し、回復後に再追加することが可能になります。

  • Prometheus、Nagios、Datadogなどの監視システムと統合することで、ゲートウェイの状態を可視化するダッシュボードや、自動アラート通知を構築できます。

  • 自動監視スクリプトやオーケストレーションツールと連携し、障害発生時の検知と回復処理を人手を介さずに実行できます。


シンプルなヘルスチェックの設定

以下の設定を行うことで、バイナリ版および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)

これらのプロパティのデフォルト定義について詳しくは、ゲートウェイ環境変数のドキュメントをご参照ください。

ヘルスチェックの確認

構成
CLIヘルスチェック
Curlヘルスチェック

基本的な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)"

出力形式の例

出力形式
CLIコマンド
説明

ステータスのみ

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_mslast_ping_sent_timestamplast_pong_received_timestamp などのメトリクスは、レスポンスに常に含まれるとは限りません。これらのメトリクスは、現在のWebSocket接続の状態やping/pongメッセージの送受信のタイミングによって異なります。

ステータス更新の遅延について

ヘルスチェックはWebSocket接続の現在の状態を反映しますが、ステータス更新に遅延が生じる場合があります。

ステータス更新の遅延

接続が失われた場合、ゲートウェイが再接続を試みるため、ヘルスチェックが「unhealthy」ステータスを報告するまで最大で2分かかることがあります。同様に接続が回復した場合でも、ヘルスチェックが「healthy」ステータスを反映するまで最大で2分かかることがあります。

この遅延は、一時的な接続不良を即座に異常と判断しないための仕組みです。ゲートウェイが自動的に回復するための猶予を確保する目的で、意図的に設けられています。

セキュリティ

HTTPヘルスチェックには、以下のセキュリティ機能が含まれます。

  1. 認証: KEEPER_GATEWAY_HEALTH_CHECK_AUTH_TOKEN が設定されている場合、リクエストにはAuthorizationヘッダーにトークンを含める必要があります。

  2. SSL/TLS: SSLが有効な場合、すべての通信は暗号化されます。有効な証明書と秘密鍵を用意する必要があります。

  3. ローカルホストバインディング: サーバーはデフォルトでローカルホストのみにバインドされ、ネットワーク経由でエンドポイントは公開されません。

  4. セキュリティヘッダー: ヘルスチェックサーバーからのレスポンスには、以下のセキュリティヘッダーが追加されます。

    • X-Content-Type-Options: nosniff

    • X-Frame-Options: DENY

    • Content-Security-Policy: default-src 'none'

  5. レート制限: ローカルホスト以外の接続には自動的にレート制限が適用されます (1分あたり60リクエスト/IP)。

  6. 情報保護: サーバーが非ローカルホストアドレスにバインドされている場合、機密情報はレスポンスから自動的に削除されます。

  7. 強制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サーバーよりも強化されたセキュリティ

  • 適切なリクエストのルーティングと処理

  • 優れたエラーマネジメント

  • スレッドセーフ

  • 最小限のオーバーヘッドで本番環境に対応

最終更新