はじめに
LifeKeeper API for Monitoring は、稼働中の LifeKeeper に対して問い合わせを行うことで、LifeKeeper ノードの稼働状況や保護しているリソースの状況を取得できます。
概要
本APIはlighttpd上でCGIとして動作し、lcdstatusコマンドで取得できる情報を、API経由で取得できるようにしたものです。本APIで取得できる情報の概要は以下のとおりです。
- LifeKeeper ノードの死活
- コミュニケーションパスの死活
- リソースの保護状況
これにより、ユーザは LifeKeeper サーバにログインせずとも異常の発生を知ることができます。しかし、具体的にどのような異常が発生しているのかを確認するためには、LifeKeeperGUI にログインしたり、LifeKeeper のログを確認したりする必要があります。
取得できる情報
LifeKeeper が稼働している1台のノードに対して、ユーザが問合せを行った場合、以下の情報が取得できます。なお、LifeKeeper は通常複数のサーバで構成されることが多いですが、取得できる情報は問合せを行ったサーバのもののみです。
- ステータス
- ステータス
- º 各サーバの稼働状況
- ▪ノード名
- ▪ 稼働状況(ALIVE/DEAD)
- º コミュニケーションパスの稼働状況
- ▪ ノード名
- ▪ 稼働状況(ALIVE/DEAD)
- ▪ アドレス/デバイス名
- º リソースの保護状況
- ▪ ノード名
- ▪ タグ
- ▪ 稼働状況(ALIVE/DEAD)
- ▪ ステータス(ISP、OSU、OSF、…)
- ▪ 依存関係
- ▪ DRリソースのミラー情報(ステータスがISPの場合のみ取得可能)
- ▪ タグ
- ▪ Mirror status configuration (Sync, Pause, …)
- ▪ Replication status (75%, 100%, …)
- ログ
- ログ
- º /var/log/lifekeeper.log ※ログファイルのパスが変更されている場合はサポートしない
- ▪ 最大1000行分(データ出力フォーマットがHTMLの場合)
- ▪ 全て(データ出力フォーマットがplain textの場合)
- º /var/log/lifekeeper.err ※ログファイルのパスが変更されている場合はサポートしない
- ▪ 最大1000行分(データ出力フォーマットがHTMLの場合)
- ▪ 全て(データ出力フォーマットがplain textの場合)
通信形式
本 API で情報を取得するための通信は、HTTP で行います。
ユーザが対象サーバ上で動作する lighttpd 上で動作する CGI に対してHTTP GET リクエストを送信すると、前述の情報を取得することができます。
データフォーマット
データフォーマットは以下の3つがあります。
- JSON
- JSON
- º 外部ツールにてステータスを解析するために利用されることを想定
- º ステータスの確認が可能
- º ログの出力はできない
- HTML
- HTML
- º ブラウザでの目視確認などに利用されることを想定
- º ステータスの確認が可能
- º ログは 1000 行分のみ取得可能
- plain text
- plain text
- º ステータスの確認はできない
- º ログの取得ができる
- º /var/log/lifekeeper.log や /var/log/lifekeeper.err の全ての内容を取得可能
LifeKeeper のクラスタ設定が以下の図の状態であるとき、取得できる JSON フォーマットと HTML フォーマットを示します。
{ "resource": [ { "replication": {}, "child": [ { "tag": "datarep-data" } ], "server": { "status": "ISP", "name": "lk01" }, "tag": "/data" }, { "replication": { "percent": "100%", "mirror": "Fully Operational" }, "child": [], "server": { "status": "ISP", "name": "lk01" }, "tag": "datarep-data" }, { "replication": {}, "child": [], "server": { "status": "ISP", "name": "lk01" }, "tag": "ip-10.125.139.118" } ], "compath": [ { "status": "ALIVE", "server": [ { "name": "lk01", "term": "192.168.139.18" }, { "name": "lk02", "term": "192.168.139.19" } ] }, { "status": "ALIVE", "server": [ { "name": "lk01", "term": "172.20.139.18" }, { "name": "lk02", "term": "172.20.139.19" } ] } ], "server": [ { "status": "ALIVE", "name": "lk01" }, { "status": "ALIVE", "name": "lk02" } ] }
使用方法
本機能の有効化
本機能はデフォルトでは無効になっています。有効にする場合、/etc/default/LifeKeeper に以下の設定を行う必要があります。
LKAPI_MONITORING=true
なお、本機能の有効・無効を切り替える場合、LifeKeeper の再起動は不要です。
クラスタを構成している場合、設定の有効化は、問い合わせを行うLifeKeeperノードにのみ必要です。問い合わせを行わないノードは本機能の設定が無効であっても問題ありません。
ポート番号
本機能は、デフォルトでは 779 番ポートを使用します。ポート番号をデフォルトから変更する場合、/etc/default/LifeKeeper に以下の設定を行う必要があります。
LKAPI_WEB_PORT=<ポート番号>
使用例
LifeKeeper が稼働しているサーバに以下のように問い合わせることで情報を取得できます。ここでは、curl を用いた例を示します。
curl http://<IPADDR>:779/Monitoring.cgi
このように引数を与えない場合、デフォルトでは JSON 形式にて現在のステータスが取得できます。HTML 形式でログを取得する場合、以下のように引数を指定します。
curl http://<IPADDR>:779/Monitoring.cgi?format=html&show=log
使用できる引数一覧は以下の通りです。
|
|||
---|---|---|---|
show | 取得したい情報を指定する | status, log, log-err | デフォルトは status |
format | データフォーマットを指定する | json, html, plain | デフォルトでは json show=log,log-err を指定した時に、format=json を指定した場合はエラーとなる |
セキュリティ
本機能を用いると、情報取得のリクエストを行った全てのユーザが LifeKeeper のステータスを取得することができます。
そのため、ユーザのセキュリティ設定に基づき、ステータスを取得できるユーザの制限や、SSL の設定、情報の暗号化を行うことができます。
Basic 認証
本APIで情報を取得するために、Basic認証を使用することができます。
lighttpd 設定ファイルの修正例は以下の通りです。赤字で示す箇所を追加、変更してください。修正後、設定を反映させるため、コマンド 「/opt/LifeKeeper/sbin/sv restart steeleye-lighttpd」 を実行し、lighttpd を再起動してください。
なお htpasswd コマンドが存在しない場合、ご使用のディストリビューション提供の httpd-tools をインストールしてください。
/opt/LifeKeeper/etc/lighttpd/lighttpd.conf
server.modules = ( ... "mod_auth", # uncommenting
/opt/LifeKeeper/lib64/steeleye-lighttpd/include_server_bind.pl
print qq/\$SERVER["socket"] == "$addr:$port" {\n/; print qq/ server.document-root = "\/opt\/LifeKeeper\/api"\n/; print qq/ auth.backend = "htpasswd"\n/; print qq/ auth.backend.htpasswd.userfile = "\/opt\/LifeKeeper\/etc\/lighttpd\/lighttpd.user.htpasswd"\n/; print qq/ auth.require = ( "\/" =>\n/; print qq/ (\n/; print qq/ "method" => "basic",\n/; print qq/ "realm" => "LifeKeeperAPI",\n/; print qq/ "require" => "valid-user"\n/; print qq/ )\n/; print qq/ )\n/; print qq/ }\n/;
htpasswdファイル作成手順
htpasswd -c /opt/LifeKeeper/etc/lighttpd/lighttpd.user.htpasswd <USERNAME>
SSL/TLS 対応
本 API での通信において、SSL/TLS を用いることができます。lighttpd 設定ファイルの修正例は以下の通りです。修正後、設定を反映させるため、コマンド「/opt/LifeKeeper/sbin/sv restart steeleye-lighttpd」を実行し、lighttpd を再起動してください。
また、この対応により、本 API が使用するデフォルトポートの設定が不要となった場合は、次の「779 番ポートの無効化」を参照し無効化をおこなってください。
/opt/LifeKeeper/etc/lighttpd/include_ssl_port.pl
configAPI("0.0.0.0", 443);
if(socket($sock, AF_INET6, SOCK_STREAM, 0)) {
configAPI("[::]", 443);
}
sub configAPI {
my $addr = shift;
my $port = shift;
print qq/\$SERVER["socket"] == "$addr:$port" {\n/;
print qq/ server.document-root = "\/opt\/LifeKeeper\/api"\n/;
print qq/ ssl.engine = "enable"\n/;
print qq/ ssl.pemfile = "\/opt\/LifeKeeper\/etc\/certs\/LK4LinuxValidNode.pem"\n/;
print qq/ }\n/;
}
779 番ポートの無効化
SSL/TLS の対応を行った場合、お客様の環境によっては本 API が従来使用していたポート(デフォルトでは 779 番ポート)の設定が不要となる場合があります。その場合は、以下の設定を削除、あるいはコメントアウトを行い、本 API が使用するデフォルトポートの設定を無効化してください。修正後、設定を反映させるため、コマンド「/opt/LifeKeeper/sbin/sv restart steeleye-lighttpd」を実行し、lighttpd を再起動してください。
/opt/LifeKeeper/lib64/steeleye-lighttpd/include_server_bind.pl
#lkapi_config("0.0.0.0", $lkapi_port); #if(socket($sock, AF_INET6, SOCK_STREAM, 0)) { # lkapi_config("[::]", $lkapi_port); #}
IP アドレスアクセス制限
アクセス可能な IP アドレスを制限することができます。
IP アドレス 192.168.10.1 以外の接続を拒否する場合の lighttpd 設定ファイルの修正例は以下の通りです。修正後、設定を反映させるため、コマンド「/opt/LifeKeeper/sbin/sv restart steeleye-lighttpd」を実行し、lighttpd を再起動してください。
/opt/LifeKeeper/etc/lighttpd/conf.d/lkapi_user.conf
$HTTP["remoteip"] != "192.168.10.1" { url.access-deny = ( "" ) }
エラー
本 API 実行時にエラーが発生することがあります。その際、エラーの概要が出力されます。以下に JSON フォーマットでのエラー例を示します。 なお、ここでは lighttpd が返す HTTP ステータスコードについては触れません。
{ "error" : { id : -1, message : "Failed to get LCD status" } }
出力フォーマットが HTML 版の場合も、同様の内容のメッセージを出力します。
このトピックへフィードバック