Zabbix APIを使ってWeb監視設定を登録してみる

Zabbix公式APIマニュアルには、Zabbix APIの使い方として、Web監視設定情報を取得したり、追加登録する方法が載っていません。
しかし、ソースコードを見ると、CWebCheck.phpというのが存在していて、どうやらAPIで叩けるようです。
ということで、Zabbix APIを使ってWeb監視設定の取得と追加登録を実施してみます。

公式に提供されている機能ではないので、以下解説する内容は参考程度に留めて下さい。
以下、Zabbix2.0.3で動作確認済みです。
別のバージョンでは動かないかもしれません。

webcheck.getによるWeb監視設定情報取得

Web監視関連のAPIはwebcheck.xxxという形のメソッドで実行できます。
監視設定を取得する場合にはwebcheck.getです。

取得する際のパラメータ情報は次の通りです。

パラメータには次の値を設定します。

{"output":"extend"}

これにより、Web監視のシナリオの情報が詳細に取得できます。

実際にcurlコマンドを使って実行した結果はこちら。

curl -X POST -H "Content-Type:application/json-rpc" -d '{"auth":"認証トークン","method":"webcheck.get","id":1,"params":{"output":"extend"},"jsonrpc":"2.0"}' http://Zabbixサーバホスト名/zabbix/api_jsonrpc.php

取得できるJSONデータ

{"jsonrpc":"2.0",
"result":
    [{"httptestid":"1",
     "name":"webtest",
     "applicationid":"454",
     "nextcheck":"1358985877",
     "delay":"60",
     "status":"0",
     "macros":"",
     "agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\/6.0)",
     "authentication":"0",
     "http_user":"",
     "http_password":""}],
"id":1}

シナリオの基本設定だけでなく、各ステップの情報も取得したい場合はパラメータを次のように設定します。

{"output":"extend","selectSteps":"extend"}

curlでの実行例

curl -X POST -H "Content-Type:application/json-rpc" -d '{"auth":"認証トークン","method":"webcheck.get","id":1,"params":{"output":"extend","selectSteps":"extend"},"jsonrpc":"2.0"}' http://Zabbixサーバホスト名/zabbix/api_jsonrpc.php

取得できるJSONデータ

{"jsonrpc":"2.0","result":
[{"steps":
	{"1":{"httptestid":"1",
		"name":"index",
		"no":"1",
		"url":"http:\/\/xx.xx.xx.xx\/redmine",
		"timeout":"15",
		"posts":"",
		"required":"hoge",
		"status_codes":"200",
		"webstepid":"1"
	}},
	"httptestid":"1",
	"name":"webtest",
	"applicationid":"454",
	"nextcheck":"1358988040",
	"delay":"60",
	"status":"0",
	"macros":"",
	"agent":"Mozilla\/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident\/6.0)",
	"authentication":"0",
	"http_user":"",
	"http_password":""
}],
"id":1}

ホストの情報も一緒に取得したい場合は"selectHosts":"refer"を更にパラメータに追加して下さい。
すると、シナリオが登録されているホストの情報が"hosts":[{"hostid":"10084"}]といった形で追加されます。

webcheck.createによるWeb監視設定情報登録

では、次にWeb監視設定を登録してみます。
登録にはwebcheck.createを利用します。
webcheck.createを利用することでシナリオ情報、ステップ情報全て登録できます。

パラメータには、シナリオの基本情報と、1つ以上のステップ情報を設定します。
※下記に記載した内容以外にも認証情報やPOST内容など必要に応じて追加して下さい

{"name":"test_case1",  ←シナリオ名
 "delay":60,  ←監視間隔
 "status":0,  ←監視の有効(0)/無効(1)設定
 "authentication":"0",  ←認証設定の有り(1)/無し(0)設定
 "applicationid":454,  ←アプリケーションIDの設定
 "hostid":10084,  ←アイテム登録する対象ホスト指定(ZabbixServerからWeb監視するのであればZabbix ServerのホストIDを指定)
 "steps":[{   ←ステップ情報設定(配列形式で複数のステップを一括登録可能)
     "name":"login",  ←ステップ名
     "no":1,  ←ステップ番号(1以上の数字を指定する必要あり)
     "url":"http://localhost/zabbix",  ←監視URL
     "timeout":10,  ←タイムアウト設定
     "required":"zabbix",  ←要求文字列指定
     "status_codes":200}]  ←ステータスコード
}

この時、注意点としては、applicationidとhostidが正しい組み合わせになっていない場合、シナリオが正しく指定したホストに対して登録されません。実在する組み合わせで設定して下さい。

また、登録時にはシナリオ名で重複チェックがされるため、同一名のシナリオは登録できません。
さらに、同一シナリオ内でステップの名前の重複も許可されていません。

webcheck.updateによるWeb監視設定の変更

既に存在するシナリオにステップを追加したい場合や、既存の設定を変更する場合にはwebcheck.updateを利用します。
パラメータの指定方法はwebcheck.createとほぼ同じです。
一点注意が必要なのは、変更するシナリオのID(httptestid)をパラメータに追加する必要があります。

{"httptestid":2    ←変更したいシナリオのID。create時に自動で割り振られる
 "name":"test_case1",
 "delay":60,
 "status":0,
 "authentication":"0",
 "applicationid":454,
 "hostid":10084,
 "steps":[{
     "name":"login",
     "no":1,
     "url":"http://localhost/zabbix",
     "timeout":10,
     "required":"zabbix",
     "status_codes":200}],
      "steps":[{   ←追加するステップ情報設定
     "name":"dashboard",
     "no":2,  ←ステップが連番になるように設定
     "url":"http://localhost/zabbix/dashboard",
     "timeout":10,
     "required":"zabbix",
     "status_codes":200}]
}