Status Code 303 - See Other

サーバサイド、iOS・アンドロイドアプリ、インフラレベルの話まで幅広くやってます。情報の誤りや指摘・意見などは自由にどうぞ。

Zabbix API を使ってみる

概要

前回の記事で(Raspberry PI に Zabbix Server 導入まで - Status Code 303 - See Other)
作ったZabbix Server に対して、API を発行してみる。今回は、curl で通信してみる。

Zabbix API テスト

BEFORE

Zabbix コンソールから現状のホストグループ構成を調べる。

まず、Zabbix コンソールにアクセスする。ルート管理者でログイン
http://[Raspberry pi プライベート IP]/zabbix/
f:id:kouki_hoshi:20160218001718p:plain

現状ではプライベート環境しか通信できないため、80番ポートでも大丈夫だと思うが、
今後、外部からも通信したいなら、セキュリティ上、SSL/TLS にしたりポート変更したりしなければならない。

そして、[設定]->[ホストグループ] で一覧確認。
f:id:kouki_hoshi:20160218002201p:plain

Zabbix API 実行

サンプルとして、 [設定]->[ホストグループ] に curl コマンドで新しくホストグループを作成する手順を記す。

認証情報を取得する。
curl -X POST -d '{"jsonrpc":"2.0","method":"user.login","id":1,"params":{"user":"userName","password":"xxxxx"}}' -H "Content-Type:application/json-rpc" http://[Raspberry pi プライベート IP]/zabbix/api_jsonrpc.php

やってることを説明すると


curl [options] http://[Raspberry pi プライベート IP]/zabbix/api_jsonrpc.php
Zabbix API を呼び出すコマンドで、 api_jsonrpc.php に対して問い合わせをする
-X POST
HTTP 問い合わせを POST で行う
-d '{"jsonrpc":"2.0","method":"user.login","id":1,"params":{"user":"userName","password":"xxxxx"}}'
問い合わせ時に引き渡すJSONデータ
-H "Content-Type:application/json-rpc"
送信データがJSON-RPC用データであることを送信先に明示する

なお、今回渡したデータは認証のためのデータ。詳細は本家 API 参照のこと。
user.login [Zabbix Documentation 2.2]

こんなデータが返ってくる。

{"jsonrpc":"2.0","result":"3df0b33dc345fe5a29f8b862a4e60bcc","id":1}

そして、「3df0b33dc345fe5a29f8b862a4e60bcc」の部分がトークンと呼ばれる、認証成功時に本人を識別するための情報。
このトークンには期限があり、これが切れると再度取得しなければならない。
それまでであれば、このトークンを API 呼び出しのデータに含めることで、様々な操作が実行できる。

API (hostgroup.create) 実行

test という名のホストグループを新しく作成してみる。API は下記を利用する。
hostgroup.create [Zabbix Documentation 2.2]

curl http://[Raspberry pi プライベート IP]/zabbix/api_jsonrpc.php -H "Content-type: application/json-rpc" -X POST -d '{"jsonrpc":"2.0","method":"hostgroup.create","auth":"3df0b33dc345fe5a29f8b862a4e60bcc","id":1,"params":{"name":"test"}}'

そして、成功すれば、以下のような結果を得る。
これは、ホストグループの作成に成功し、そのホストグループ ID を結果として送られている。

{"jsonrpc":"2.0","result":{"groupids":["11"]},"id":1}

実際に、さっきのページを更新してみると。

f:id:kouki_hoshi:20160218010006p:plain
test という名のホストグループが作られていることが分かる。
同様に、他の API を用いて行えば様々に Zabbix の設定を変更することができる。

ホストグループ以外に作成できるもの

ホストグループは、ホストと呼ばれる統合的な管理オブジェクトをまとめるものである。
だから、これだけでは特に何もできない。そこで、他には何を作成できるか、その一例を記す。


ホスト
様々なオブジェクト(下記)を統合的に管理するオブジェクト
テンプレート
設定情報を保持するオブジェクトで、ホストに設定するとその設定が適用されたホストになる
ユーザマクロ
ホストごとに特有なパラメータを管理するオブジェクト
アイテム
監視データを管理するオブジェクト
アプリケーション
論理的なグループでアイテムをグループ化するためのオブジェクト
トリガー
監視データから異常を検知するオブジェクト
アクション
異常を検知したときに、その動作定義を保持したオブジェクト

他にもあるので、もし興味があれば本家で調べてみるといいだろう。
Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution