Zabbix APIを使った外部ツールとの連携

2012年5月11日(金)
池田 大輔

Zabbix2.0に関する連載の最後は、Zabbix2.0から正式な機能としてリリースされたZabbix APIについて紹介したいと思います。

Zabbix APIの概要紹介

Zabbix APIは1.8系のZabbixから搭載された機能で、Zabbixで集約している監視データを外部ツールと連携させるために取得したり、Zabbixの管理画面を利用せずに監視設定を行ったりすることができる機能です。Zabbix Serverにネットワーク的に到達可能かつHTTP通信が可能であればどこからでもAPIを利用することができます。

Zabbix APIは、1.8系のZabbixではβ版の扱いでしたが、Zabbix2.0からは正式な機能としてリリースされています。そのため、Zabbix1.8系とZabbix2.0ではAPIの仕様が異なっており、利用には注意が必要となります。

Zabbix APIの使い方紹介

Zabbix APIはjson-rpc※1というプロトコルで扱われます。API用のURLに対して、json形式のパラメータを付与してリクエスト送付することで、JSON形式のレスポンスが返ってきます。

具体的には以下の手順で実行します。

  1. ZabbixのWebインタフェースからAPIアクセスするユーザアカウントに権限を付与
  2. 認証用API(user.login または user.authenticate)を実行してアクセストークンを発行
  3. 2で発行されたアクセストークンを用いてAPIアクセス

Zabbix1.8系と2.0で手順が少し異なりますので、以下で説明します。

1. ZabbixのWebインタフェースからAPIアクセスするユーザアカウントに権限を付与

Zabbix1.8系

(1)ユーザグループのAPIアクセス権限を有効化

Zabbix1.8系では、ZabbixのWebインタフェースからAPIアクセス権限を明示的に付与する必要があります。APIアクセス権限が有効に設定されているユーザグループに所属させることで、そのユーザはAPIアクセスが利用可能になります。

例えば、デフォルトでAPIアクセス権限を有効に設定したユーザグループ「API access」が登録されているので、このユーザグループに所属させることでAPIアクセスが利用可能になります。

以下の図は、ユーザを「API access」グループに所属させる設定画面です。

図1:APIアクセス権限設定画面(クリックで拡大)

(2)ユーザが所属するユーザグループにホストのアクセス権限付与

あとは、このユーザが所属するユーザグループに対して権限を登録し、どのホストの管理ができるかを設定します。以下の画面でユーザグループに対して権限設定を行ってください。

図2:アクセス可能ホスト設定画面(クリックで拡大)
  • 読書可能:その対象に対する全てのAPIが実行可能。
  • 読込専用:その対象に対する監視データや設定情報の取得系APIのみ実行可能。
  • 拒否  :その対象に対する全てのAPIが実行不可。

Zabbix2.0

これに対し、Zabbix2.0では、別途APIアクセス権限の管理の必要がありません。APIアクセスを有効化する設定項目が廃止され、全てのユーザグループで有効となっています。

この仕様変更に伴い、「API access」グループも廃止されています。そのため、上記Zabbix1.8系での作業のうち、「2.」のみを実施してください。

2. 認証用API(user.login または user.authenticate)を実行してアクセストークンを発行

Zabbix APIを利用するにはまず認証を行う必要があります。Webインタフェースであればログイン画面が表示されてユーザ名とパスワードを入力するという行為です。これをAPI経由で行うには、以下の方法で行います。

以降の説明ではAPIアクセスの動作確認のために、Linuxのcurlコマンド※2を利用しています。

認証用のAPIリクエストは以下の形式で送ります。

送信先URL: http://example.co.jp/zabbix/api_jsonrpc.php (example.co.jp/zabbixの箇所は環境に応じて変更してください)
リクエストパラメータ:
{"auth":null,
"method":"user.login",
"id":識別番号,
"params":{"user":"ユーザ名",
          "password":"パスワード",
          },
"jsonrpc":"2.0"
}
リクエストヘッダ: "Content-Type:application/json-rpc"
リクエストメソッド:GET

上記では、methodとしてuser.loginを指定しています。

Zabbixの1.8.4以前のバージョンでは、user.loginはサポートされていないため、user.authenticateに置き換えてください。1.8.4よりも新しいバージョンのZabbixであっても、user.authenticateメソッドは利用可能です(ただし、user.authenticateは非推奨)。

idの項目はリクエストとレスポンスを紐付けるための番号を設定します(ユーザ側で自由な数値を設定可)。

この内容をcurlコマンドで実行すると以下のようになります。

$ curl -X GET -H "Content-Type:application/json-rpc" -d '{"auth":null,"method":"user.login","id":1,"params":{"user":"admin","password":"zabbix"},"jsonrpc":"2.0"}' http://example.co.jp/zabbix/api_jsonrpc.php

実行した結果、以下のような形式で応答が返ってきます。

  {"jsonrpc":"2.0","result":"65d1e0.........f53e9a84b","id":1}

レスポンスの中のresultの値(65d1e0.........f53e9a84b)がアクセストークンになります (実際は32桁の数字)。以降のAPIアクセスはこのアクセストークンをリクエストパラメータに設定することで実現できるようになります。

【参照URL】

TIS株式会社

Twitter : @ike_dai
TIS株式会社OSS推進室所属。社内向けシステムの保守運用業務を経験後、クラウド時代の効率的な統合運用管理をテーマに活動中。特に、OSSを駆使した運用のエコシステム実現を目指し、Zabbix,fluentd,Serverspec,Ansibleなどの導入や検証に取り組む。技術検証成果などを技術ブログ『Tech-Sketch』にて発信中。著書:『Zabbix統合監視徹底活用 - 複雑化・大規模化するインフラの一元管理』

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています