Zabbix APIの使用方法

こんにちは、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アカウントを開設しました!★

タイトルとURLをコピーしました