こんにちは、SCSK株式会社の小寺崇仁です。
ZabbixはAPIが豊富に用意されており、データの抽出や外部システムとの連携が容易になっております。
今回はcurlコマンドを使ってAPIを実行する方法を紹介いたします。
※昔Qiitaで書いた記事の転載になります。
※下記にZabbix社のマニュアルがありますが、実用例をわかりやすく紹介します。
はじめに
下記文字列はご自身の環境に合わせて、変更をお願いします。
ユーザ | Admin |
パスワード | zabbix |
ZabbixのURL | https://127.0.0.1/zabbix/api_jsonrpc.php |
APIトークン | 3.APIトークンで発行した文字列 |
事前準備
ZabbixAPIの実行結果はJSON形式になります。
成形しやすいようにJQコマンドを配置します。
curl -o /usr/local/bin/jq -L https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && sudo chmod +x /usr/local/bin/jq
APIトークン
ZabbixのAPIを実行するにはAPIトークンが必要になります。
APIトークンは下記2種類の方法で発行できます。
- 2-1.ZabbixAPIから発行
- 2-2.WEB管理画面から発行(バージョン6.0以降)
2-1.ZabbixAPIから発行
curlが実行できる環境で下記コマンドを実行します。
curl -s -k -d ' { "auth": null, "method": "user.login", "id": 1, "params": { "password": "<パスワード>", "user": "<ユーザ>" }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq -r '.result'
2-2.Web管理画面からAPIトークンの発行
①ZabbixのWeb管理画面にて「管理」「一般設定」「APIトークン」を開きます。
②右上の「APIトークン作成」ボタンをクリックします。
③APIトークンの名前、APIの実行ユーザ、APIトークンの有効期限を入力すると発行可能です
データの単純取得
まずはじめに、簡単なデータ取得の方法になります。
ホストの情報を取得するには「host.get」のAPIを実行します。
methodに「host.get」と、取得項目(output)にはすべて(extend)を指定します。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "output": "extend" }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
取得条件の指定
次に、取得データの条件を指定します。
paramsの直下に取得したい条件を追加します。
下記はhostidを条件に取得しています。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "hostids":[10084,10255], "output": "extend" }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
取得項目の指定
次に、取得する情報を絞って抽出します。
outputに取得したい項目を指定します。
下記ではホストと表示名を取得しています。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "hostids":[10084,10255], "output": ["host","name"] }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
関連情報の取得
次に、ホスト情報に加え、アイテム、トリガーの情報を取得します。
「selectItems」「selectTriggers」に取得したい項目を指定します。
下記では、アイテム名、アイテムキー、トリガー名、条件式を取得しています。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "hostids":[10084,10255], "output": ["host","name"], "selectItems": ["itemid","name","key_"], "selectTriggers": ["description","expression"] }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
件数の取得
次に、取得結果の件数を取得します。
「countOutput」をtrueにすることで件数と取得できます。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "hostids":[10084,10255], "countOutput": true }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq -r '.result'
検索(完全一致)
次に、完全一致で検索する方法です。
「filter」を使用して、条件指定をしています。
下記では、ホスト名が「Zabbix server」を抽出しています。
curl -s -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "output": ["name"], "filter": { "name": "Zabbix server" } }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
検索(部分一致)
次に、部分一致で検索する方法です。
「search」を使用して、条件指定をしています。
下記では、ホスト名に「Zabbix」を含むホストを抽出しています。
curl -s -k -d ' { "auth": "<APIトークン>", "method": "host.get", "id": 1, "params": { "output": ["name"], "search": { "name": "Zabbix" } }, "jsonrpc": "2.0" } ' -H "Content-Type: application/json-rpc" http://127.0.0.1/zabbix/api_jsonrpc.php | jq '.result'
最後に
Zabbix関連サービスに関しましては、以下をご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★Twitterに、SCSK Zabbixアカウントを開設しました!★