Zabbix APIを使った外部ツールとの連携
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形式のレスポンスが返ってきます。
具体的には以下の手順で実行します。
- ZabbixのWebインタフェースからAPIアクセスするユーザアカウントに権限を付与
- 認証用API(user.login または user.authenticate)を実行してアクセストークンを発行
- 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】
連載バックナンバー
Think ITメルマガ会員登録受付中
全文検索エンジンによるおすすめ記事
- CloudサービスとRPAの連携
- Keycloakを用いたハードニングの実装方法
- RailsでAction Controllerについて学んでみた
- Oracle Cloud Hangout Cafe Season4 #4「マイクロサービスの認証・認可とJWT」(2021年7月7日開催)
- 注目のOpen Policy Agent、その概要とKubernetesでの活用事例
- FAPI 1.0に準拠したクライアントアプリケーションと リソースサーバの作り方
- pg_monzの導入手順と PostgreSQL監視の実態
- expressで開発したWebアプリをeXcaleで動かす
- チャットアプリとRPAとの連携
- 3scaleの基本的な使い方