どうも、日本Zabbixユーザ会の @_BSmile_ です。
前置き
zabbixには、バージョン1.8からAPIが実装されており、この素晴らしい機能により外部APとの連携が取れるようになりました。
そう、例えば「Zabbixのダッシュボード画面はXXXXXだ!」なんて言っている方々が使っているgrafanaなんかでZabbixダッシュボードを表示している場合はAPIを使用していますね。
一応言っておきますが、XXXXXな画面はZabbix 3.4からちょっと見栄えが良くなりますので使ってみると良いかもしれません。
内部API
さて、今回お話したいのはAPIドキュメントに載っていないAPIがあるという事です。
通称「内部API」。
Zabbixは過去の収集履歴等、ほぼ全ての情報をDBに保存しています。
皆さんが使用するWebUIについては、このDBからデータを検索した結果を見ています。
この点はログインユーザのグループへ「デバッグモード」を有効化すると分かり易いです。
ですが、ZabbixのDBに保持していない情報という物も存在します。
それはキューの情報です。
DBに無い情報をWebUIで取得する、そういう時に内部APIは使用されています。
キューの情報
キューの情報は、zabbix3.0.8以前は取得・表示できる上限値が500となっておりCのソースとphpの改修が必要でしたがそれ以降はphpのパラメータ変更可能になっています。
https://www.zabbix.com/documentation/3.2/manual/web_interface/definitions
手順
- 準備:通常のAPIでユーザのログインを行い、認証トークンを払い出して下さい。
[root@localhost ~]# curl -X POST -H 'Content-Type:application/json' -d'{"jsonrpc": "2.0","method":"user.login","params": {"user":"Admin","password":"zabbix"},"id":0}' 127.0.0.1/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"fa23a03c53c8db0c2654ce0893611747","id":0}
- 実践:払い出したトークンを使用し、内部APIを実行
内部APIは、通常のapiとは違いWebサーバは介さずにZabbixサーバの待受ポート(通常は10051/TCP)を使用します。
telnetでは無く、ncコマンドを使用しても取得できます。
queue.getで使用するsidは、先程のuser.loginで取得したresult値を使用してください。
[root@localhost ~]# telnet 127.0.0.1 10051
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
{"request":"queue.get", "sid":"fa23a03c53c8db0c2654ce0893611747","type":"overview"}
{"response":"success","data":[{"itemtype":3,"delay5":0,"delay10":1,"delay30":0,"delay60":0,"delay300":0,"delay600":0}]}Connection closed by foreign host.
上は、キュー画面の「概要」をJSON型式で取得したものです。
typeを"overview by proxy"や"details"にすると、プロキシの概要や詳細を取得できます。
まとめ
10分以上経過したキューが埋もれてWebUIから見えなくなってしまった時には、この内部APIが役立つかもしれません。
ソースを読むと意外と面白い事が分かるZabbix、是非チャレンジしてみてください!