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

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

認証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】

TIS株式会社

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

連載バックナンバー

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

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

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

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