はじめに

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
  • º 外部ツールにてステータスを解析するために利用されることを想定
  • º ステータスの確認が可能
  • º ログの出力はできない
    • HTML
  • º ブラウザでの目視確認などに利用されることを想定
  • º ステータスの確認が可能
  • º ログは 1000 行分のみ取得可能
    • 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 版の場合も、同様の内容のメッセージを出力します。

フィードバック

お役に立ちましたか?

はい いいえ
お役に立ちましたか
理由をお聞かせください
フィードバックありがとうございました

このトピックへフィードバック

送信