📖

Zabbix: IDの調べ方

2023/06/16に公開

はじめに

Zabbixは監視設定をIDで管理しています。
例えば、ホストはhostid、アイテムはitemid、トリガーはtriggeridなどです。
この記事ではそれらの調べ方について紹介していきます。
※本記事は2023/06現在の最新LTSの6.0で紹介をしていきます。

Webインターフェースからの調べ方

Zabbixの各種IDの調べ方で最も多くの人が行うであろう調べ方で、
各種設定ページのURLからIDを確認することができます。

例えばホストの場合ですが、Webインターフェースにログイン後、
[設定] -> [ホスト] -> 対象のホスト名をクリックした際に表示されるURLの、
hostid=xxxxxのxxxxx部分がホストのIDとなります。

その他のIDも基本的には同様で各種設定ページで対象を開いた際のURLで確認できます。

DBからの調べ方

次に考えられる方法としては、DBでSQLコマンドを発行する方法です。
MySQLでの例になりますが、DBにアクセスし下記のようなSQLコマンドで確認できます。

ただSQL検索する際はwhere句で対象を絞る、でlimit句で量を制限するなど、
必ず負荷対策を心掛けた上で実行するように注意してください。
※DBに不要な負荷を与え、本来の機能自体に影響がないように注意してください。

APIを使用した調べ方

今回の本題となりますが、その他の方法ではZabbixが標準で用意している
Zabbix APIを使用する方法があります。
こちらは何かしらのコードを書く必要がありますが、

  • Zabbixが標準で用意している方法であり、裏側で実行されるSQLも最適化されている
  • 自身が加工しやすい形で出力がしやすい
  • そもそもIDを調べようと言う方は何かしら連携や外部出力を目的としていることが多い
    というような点からも個人的には推奨する方法です。

ここではAPIに関する仕様や、呼び出し方などは言及せず、
APIのリクエスト部分のみを紹介しますが、ホストの場合は下記のようなリクエストで
hostidなどの情報を取得できます。
※PHPで例を書いています。
※ホストグループID:4に含まれるホストのホストID、ホスト名、表示名を出力する例です。
※APIの詳細等は最下部の参考で紹介している公式ドキュメントを参照ください。

'jsonrpc' => '2.0',
'method' => 'host.get';
'params' => array(
    'groupids' => "4",
    'output' => array(
        'hostid',
        'host',
        'name'
    )
),
'id' => 1,
'auth' => "038e1d7b1735c6a5436ee9eae095879e"

このようなリクエストを実行することで、JSON形式でデータが返却されます。

自作スクリプトの紹介

上記のようなAPIを使用したコードを書いたスクリプトなどを用意すれば、
任意のデータが取得できますが、未経験から用意するのは結構大変だと思います。
その場合、私がGitHubで一部IDを取得するスクリプトを公開していますので、
一度使用してみてください。(ご自身用にローカルで修正いただいても大丈夫です。)

Github -> gohatomo -> Various Scripts for Zabbix

入手方法

gitコマンドが使用できる方は、実行環境でリポジトリをクローンしてください。

git clone https://github.com/gohatomo/various-scripts_for-Zabbix.git

gitコマンドを使わない場合は、GitHubのリポジトリの"<> Code"ボタンから、
"Download ZIP"でダウンロードいただく。
もしくは、Releaseのページから任意の形式(zip、tar.gz)でダウンロードいただいて、
実行環境にアップロードください。

IDを取得するスクリプト

色々スクリプトが入っていますが、IDを取得するスクリプトとして用意しているのは、
下記2つのスクリプトです。

  • get-id-withhost.php
    ホストのIDと、ホストに設定されているアイテム、トリガーのIDを取得できます。
  • get-id-withtemplate.php
    テンプレートのIDと、ホストに設定されているアイテム、トリガーのIDを取得できます。

使い方

※ここで記載した内容と合わせて、リポジトリのReadme.mdの内容も確認ください。

基本的な使い方は同様なので、get-id-withhost.phpで説明をします。
今回、/tmp/work配下にファイルを展開している前提で記載しています。

  • スクリプトを配置した後、/tmp/work/various-scripts_for-Zabbix/data/get-id-withhost/ディレクトリ配下に規定のJSON形式のファイルを配置する。
    ※ディレクトリにサンプルがありますので、そちらを参考にしてください。
    ※今回はZabbix serversグループを対象に出力しています。
# cd /tmp/work/various-scripts_for-Zabbix/data/get-id-withhost
# vi 任意のファイル名.json
{
    "groups": [
        "Zabbix servers"
    ]
}
  • スクリプトを実行する
    スクリプトがあるディレクトリ(Topディレクトリ)まで戻り、スクリプトを実行します。
# cd /tmp/work/various-scripts_for-Zabbix
# ./get-id-withhost.php

Working...1/1/0 (now/max/error)
[Output File Path]
/tmp/work/various-scripts_for-Zabbix/output/get-id-withhost_20230616_221032.zip

実行するとzipファイルが出力されますので、そちらをダウンロードしてください。

  • 出力データを確認する
    zipファイルにはJSONファイルがホストごとに分かれて出力されています。
    そちらを開いていただくと各種IDが確認できます。
{
    "hosts": {
        "hostid": "10084",
        "host": "Zabbix server",
        "name": "Zabbix server",
        "status": "enable"
    },
    "items": [
        {
            "itemid": "42227",
            "name": "Host name of Zabbix agent running",
            "status": "enable",
            "link_triggerid": []
        },
        {
            "itemid": "42251",
            "name": "Maximum number of open file descriptors",
            "status": "enable",
            "link_triggerid": [
                "22382"
            ]
        },
~~~省略~~~
    ],
    "triggers": [
        {
            "triggerid": "22382",
            "description": "Configured max number of open filedescriptors is too low",
            "status": "enable"
        },
        {
            "triggerid": "22383",
            "description": "Configured max number of processes is too low",
            "status": "enable"
        },
~~~省略~~~
        {
            "triggerid": "13490",
            "description": "Zabbix server: More than 75% used in the trends cache",
            "status": "enable"
        }
    ]
}

JSONファイルにホストグループ名を追加する。
同じような形式で複数ファイルを配置いただいても、合わせて取得できるようになっています。
もし確認される手段など持たれていない場合に参考になれば幸いです。

参考

Zabbix API公式ドキュメント(6.0)

Discussion