PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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

Zabbix APIを使った外部ツールとの連携 | Think IT(シンクイット)

Think IT(シンクイット)

サイトに予期せぬエラーが起こりました。しばらくたってから再度お試しください。