Zabbix API を使うと、プログラムやコマンドラインから、ホストを追加したり、監視データを取得することが出来ます。自動化ツールの Chef 等と組み合わせれば、サーバの監視設定までもを自動化することが可能です。API と聞くと少し難解なイメージがありますが、Zabbix API は JSON-RPC 2.0 のシンプルな仕様に準拠しているため、比較的簡単に使えるようです。そこで今回は、PHP から Zabbix API の基本的な使い方をご紹介します。
Zabbix API のバージョン取得
まず初めに、JSON-RPC 2.0 での基本的なリクエスト方法とレスポンスを確認するため、Zabbix API のバージョンを取得してみます。
リクエストデータの作成
$request = array( 'jsonrpc' => '2.0', 'method' => 'apiinfo.version', 'id' => 1, 'auth' => null, 'params' => array(), );
jsonrpc
JSON-RPCのプロトコルバージョンを指定します。このパラメータは必ず「2.0」を設定します。
method
Zabbix API メソッドを指定。今回は API バージョンを取得する apiinfo.version メソッドを設定します。
id
ここで指定した値が、レスポンスでもそのまま返ってきます。複数のリクエストとレスポンスを識別するために使います。リクエストが1つであれば「1」を設定しておけば良いでしょう。
auth
アクセストークンを指定します。ほとんどのメソッドでは、このパラメータが必須になりますが、バージョンを取得するだけの apiinfo.version メソッドでは必要ありませんので null を設定しておきます。
params
メソッドに渡すパラメータを指定します。こちらも apiinfo.version メソッドでは必要無いため、空の配列を設定します。
リクエストデータを JSON 形式に変換
Zabbix API とやりとりするデータは、JSON 形式を使いますので、JSON 形式に変換しておきます。
$request_json = json_encode($request);
HTTPストリームコンテキストの作成
Zabbix API へ POST 送信するための下準備です。PHPでは stream_context_create を使うのが手軽です。
$opts['http'] = array( 'method' => 'POST', 'header' => 'Content-Type: application/json-rpc', 'content' => $request_json, ); $context = stream_context_create($opts);
method
HTTPメソッドの指定です。「POST」を設定します。
header
HTTPヘッダの指定です。必ず「Content-Type: application/json-rpc」設定します。
content
先ほど作成した JSON形式のリクエストデータを設定します。
リクエストの実行
後は、Zabbix API にリクエストを送るだけです。API の URL は下記のようになります。
アクセストークンを取得する時に、管理ユーザのパスワードを送信しますので、HTTPS を使うことをオススメします。
$url = 'https://example.com/zabbix/api_jsonrpc.php'; $response_json = file_get_contents($url, false, $context);
レスポンスの表示
JSON形式でレスポンスが返ってきます。内容を確認しやすいように、配列に変換してから表示します。
$response = json_decode($response_json, true); var_dump($response);
まとめると、以下のようなプログラムになります。「リクエストデータの作成」以外の処理は、基本的にどの Zabbix APIメソッドを使っても同じです。
<?php // リクエストデータの作成 $request = array( 'jsonrpc' => '2.0', 'method' => 'apiinfo.version', 'id' => 1, 'auth' => null, 'params' => array(), ); // リクエストデータを JSON 形式に変換 $request_json = json_encode($request); // HTTPストリームコンテキストの作成 $opts['http'] = array( 'method' => 'POST', 'header' => 'Content-Type: application/json-rpc', 'content' => $request_json, ); $context = stream_context_create($opts); // リクエストの実行 $url = 'https://example.com/zabbix/api_jsonrpc.php'; $response_json = file_get_contents($url, false, $context); // レスポンスの表示 $response = json_decode($response_json, true); var_dump($response);
プログラムを実行すると、以下のようなレスポンスが表示されます。result が Zabbix API のバージョンです。id にはリクエストと同じ「1」が返ってきていることも確認できますね。
array(3) { ["jsonrpc"]=> string(3) "2.0" ["result"]=> string(5) "2.4.2" ["id"]=> int(1) }
Zabbix API アクセストークンの取得
先にも書きましたが、ほとんどの Zabbix API メソッド使うには、アクセストークンが必要になります。
アクセストークンの取得は user.login メソッドを使います。メソッドに渡すパラメータに、管理ユーザ名とパスワードを設定します。
$request = array( 'jsonrpc' => '2.0', 'method' => 'user.login', 'params' => array( 'user' => 'Admin', ←管理ユーザ名 'password' => 'zabbix', ←パスワード ), 'id' => 1, 'auth' => null, );
リクエストデータ以外の処理は、バージョン取得の時と同じです。
プログラムを実行すると、以下のようなレスポンスが返ってきます。result が アクセストークンです。
array(3) { ["jsonrpc"]=> string(3) "2.0" ["result"]=> string(32) "f6ae88c261483c1ec3b6ceb0df6d7fa6" ["id"]=> int(1) }
監視ホスト一覧の取得
アクセストークンが取得できましたので、試しに監視ホストの一覧を取得してみます。
監視ホストの一覧は host.get メソッドを使います。先ほど取得したアクセストークンを auth パラメータに設定します。
$request = array( 'jsonrpc' => '2.0', 'method' => 'host.get', 'params' => array( 'output' => array('hostid', 'host'), 'selectInterfaces' => array('interfaceid', 'ip'), ), 'id' => 1, 'auth' => 'ddadcf12532aaf8c41edff2a13a2202e', );
プログラムを実行すると、以下のようなレスポンスが返ってきます。メソッドに渡すパラメータで指定すれば、監視ホストの色々な情報が取得できます。指定できるパラメータは 公式マニュアル をご参照ください。
array(3) { ["jsonrpc"]=> string(3) "2.0" ["result"]=> array(2) { [0]=> array(3) { ["hostid"]=> string(5) "10084" ["host"]=> string(13) "Zabbix server" ["interfaces"]=> array(1) { [0]=> array(2) { ["interfaceid"]=> string(1) "1" ["ip"]=> string(9) "127.0.0.1" } } } [1]=> array(3) { ["hostid"]=> string(5) "10105" ["host"]=> string(6) "LAMP01" ["interfaces"]=> array(2) { [0]=> array(2) { ["interfaceid"]=> string(1) "2" ["ip"]=> string(11) "172.16.1.20" } [1]=> array(2) { ["interfaceid"]=> string(1) "3" ["ip"]=> string(11) "172.16.1.20" } } } } ["id"]=> int(1) }
Zabbix API の公式マニュアル
Zabbix API は公式マニュアルがとても充実しています。詳細は下記をご参照ください。
▽ Zabbix API マニュアル
https://www.zabbix.com/documentation/2.4/manual/api
▽ Zabbix API メソッドの一覧
https://www.zabbix.com/documentation/2.4/manual/api/reference
終わりに
Zabbix API のことを色々調べていたら、公式トレーニングの記事を見つけました。受講には Zabbix の認定資格が必要なようですが、その分しっかり学べそうですね。
▽ Zabbix API公式トレーニングが10月より提供開始 | マイナビニュース
http://news.mynavi.jp/news/2015/08/04/197/
コメント