ZabbixのAPIを使って監視対象のホスト一覧を取得してみました。
環境
Zabbixサーバー
ホスト名 | example.com |
---|---|
zabbixバージョン | Zabbix Server 2.0.7 |
Zabbixクライアント
ホスト名 | test01.example.com |
---|---|
zabbixバージョン | Zabbix Agent 2.0.11 |
下準備
ZabbixサーバーでAPI専用ユーザ
ユーザ名 | zabbixapi |
---|---|
パスワード | ***** |
を作っておきます。
認証トークンを取得
curl -X GET -H "Content-Type:application/json-rpc" -d '{"auth":null, "method":"user.login", "id":1, "params":{"user":"zabbixapi", "password":"*****"}, "jsonrpc":"2.0"}' http://example.com/zabbix/api_jsonrpc.php
↓こんな感じでトークンが発行されます。
{"jsonrpc":"2.0","result":"f7v1e46b24ee2aadcsf47v7bb66cf1d1","id":1}
ホスト一覧を取得
上記で取得したトークンを使ってホスト一覧を取得します。
curl -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"f7v1e46b24ee2aadcsf47v7bb66cf1d1", "method":"host.get", "id":1, "params":{"output":"extend"}, "jsonrpc":"2.0"}' http://example.com/zabbix/api_jsonrpc.php | jq '.'
jqコマンドを使って見やすく表示させています。
結果
{ "name": "test01", "jmx_error": "", "jmx_errors_from": "0", "jmx_available": "0", "jmx_disable_until": "0", "snmp_error": "", "ipmi_error": "", "snmp_errors_from": "0", "ipmi_errors_from": "0", "maintenance_from": "0", "maintenance_type": "0", "maintenance_status": "0", "maintenanceid": "0", "snmp_available": "0", "snmp_disable_until": "0", "available": "1", "error": "", "disable_until": "0", "status": "0", "host": "test01", "proxy_hostid": "0", "hostid": "10001", "maintenances": [], "errors_from": "0", "lastaccess": "0", "ipmi_authtype": "-1", "ipmi_privilege": "2", "ipmi_username": "", "ipmi_password": "", "ipmi_disable_until": "0", "ipmi_available": "0" },
こんな感じで取得されます。
が、DNS名やIPアドレス項目が表示されていません。。。。
ホスト一覧はZabbixサーバーに登録してあるホスト名ではなく、
「Zabbixエージェントのインターフェースの設定」で入力しているdns項目の一覧を取得したかったのです。
↑この部分ですね。
Zabbixの公式ドキュメントを見たりと調べてみて分かったのですがどうもZabbixのバージョン2.0からAPIの仕様が変わったようです。
1.8系だとDNS名やIPアドレスの項目が表示されるのですが、2.0からはparamsにselectInterfaces
というパラメータを追加してやる必要があるようです。
selectInterfacesを追加してもう一度ホスト一覧取得をやってみました。
curl -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"f7v1e46b24ee2aadcsf47v7bb66cf1d1", "method":"host.get", "id":1, "params":{"output":"extend", "selectInterfaces":"extend"}, "jsonrpc":"2.0"}' http://example.com/zabbix/api_jsonrpc.php | jq '.'
結果
{ "name": "test01", "jmx_error": "", "jmx_errors_from": "0", "jmx_available": "0", "jmx_disable_until": "0", "snmp_error": "", "ipmi_error": "", "snmp_errors_from": "0", "ipmi_errors_from": "0", "maintenance_from": "0", "maintenance_type": "0", "maintenance_status": "0", "maintenanceid": "0", "snmp_available": "0", "snmp_disable_until": "0", "ipmi_available": "0", "error": "", "disable_until": "0", "status": "0", "host": "test01", "proxy_hostid": "0", "hostid": "11293", "maintenances": [], "interfaces": { "33089": { "port": "10050", "dns": "test01.example.com", "ip": "10.0.0.1", "useip": "1", "type": "1", "main": "1", "hostid": "10001", "interfaceid": "33089" } }, "available": "1", "errors_from": "0", "lastaccess": "0", "ipmi_authtype": "-1", "ipmi_privilege": "2", "ipmi_username": "", "ipmi_password": "", "ipmi_disable_until": "0" },
今度はちゃんとtest01.example.comや10.0.0.1といったDNS名とIPアドレスなどインターフェース設定の項目が表示されるようになりました。
監視ステータスが有効のもののみ表示
paramsに"monitored_hosts":"True"
を追加することで可能でした。
curl -X GET -H "Content-Type:application/json-rpc" -d '{"auth":"f7v1e46b24ee2aadcsf47v7bb66cf1d1", "method":"host.get", "id":1, "params":{"output":"extend", "selectInterfaces":"extend", "monitored_hosts":"True"}, "jsonrpc":"2.0"}' http://example.com/zabbix/api_jsonrpc.php | jq '.'