Zabbix APIを使った外部ツールとの連携
認証APIアクセスエラーの例
API実行した結果エラーになる場合の一例
・リクエストパラメータの書式が間違っていた場合
{"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":"Invalid JSON. An error occurred on the server while parsing the JSON text."},"id":null}
・認証に失敗した場合
{"jsonrpc":"2.0","error":{"code":-32602,"message":"Invalid params.","data":"Login name or password is incorrect"},"id":1}
3. 2で発行されたアクセストークンを用いてAPIアクセス
2までの作業でZabbix APIを利用する準備が整いました。あとは、API methodをいろいろ変更してZabbixの操作を行ってください。Zabbix APIで使えるmethodの一覧は公式マニュアルにまとめられています。
ただし、現在公開されているのはZabbix1.8のマニュアルになります。記事執筆時点ではZabbix2.0のAPIマニュアルは公開されていませんでした。2.0版のAPIマニュアルもそのうち公開されるかと思います(Zabbix2.0と1.8で異なる部分については以降の章で解説します)。
→参照:Zabbix1.8公式マニュアル
Zabbix APIを利用した監視結果取得例
Zabbixで監視していて、「障害が発生したという情報を他のツールと連携させたい」といった要望も多いかと思います。そこで、一例として、あるホストにおける「障害」状態のトリガーのデータを取得する方法を紹介します。
具体的には、以下のような状況のトリガーデータを取得してみます。
- ホスト:test-server(ID:10017)
- トリガーステータス:有効
- トリガーの値:障害
送信先URL: http://example.co.jp/zabbix/api_jsonrpc.php (example.co.jp/zabbixの箇所は環境に応じて変更してください) リクエストパラメータ: {"auth":"アクセストークン", "method":"trigger.get", "id":識別番号, "params":{"hostids":["10017"], "output":"extend", "expandData":1, "monitored":1, "filter":{"status":0, "value":1 } }, "jsonrpc":"2.0" } リクエストヘッダ: "Content-Type:application/json-rpc" リクエストメソッド:GET
上記のリクエストの、パラメータの内容を説明します(詳細はマニュアル参照※3)。
パラメータ名 | 説明 |
---|---|
hostids | 特定のホストのトリガー結果を取得する場合に設定。 設定なしの場合は全ホストの情報取得。 |
output | 結果の出力形式を指定。 shotrenを設定すると最低限の情報のみ取得。 |
expandData | 取得したトリガーに紐付くホストなどの追加情報を取得。 指定なしの場合、レスポンス結果にホスト情報等が含まない。 |
monitored | トリガーが現在監視が有効なアイテムのトリガーかどうかを指定。 |
filter | 取得結果をフィルタリングするための設定。 json形式の値を取り、複数項目の設定が可能。 |
status | トリガーステータスを指定。 0の場合はトリガーが有効なものを取得。 |
value | トリガーの値を指定。 1の場合は「障害」の状態のものを取得。 |
このようなリクエストを送ると、以下の値が取得でき、障害の発生時刻や、発生した障害の説明の情報が取得可能になります。
{"jsonrpc":"2.0", "result": [{"hosts":[{"hostid":"10017"}], "triggerid":"12787", "expression":"{11876}=0", "description":"Agent is unavailable on {HOST.NAME}", "url":"", "status":"0", "value":"1", "priority":"4", "lastchange":"1334293245", "comments":"", "error":"", "templateid":"10047", "type":"0", "value_flags":"0", "flags":"0", "hostid":"10017", "hostname":" test-server ", "host":" test-server "}], "id":1 }
結果中のlastchangeという項目は、最後に値が変わった時刻(障害が発生した時刻)の情報です。lastchangeはunixtime形式で扱われているため、人が読めるようにするにはlocaltimeに変換するなどの処理が必要です。インターネット上には変換ツール等公開されているのでご活用ください※4。
ここではtrigger.getメソッドの例を紹介しましたが、その他のメソッドに関しても同様の方法でAPIアクセスすることが可能です。リクエストパラメータに何が指定できるのかについては、method毎に異なるため、マニュアルを参考に設定してください。
【参照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の基本的な使い方