【5.0対応済】Python3でZabbix API – ホストグループの一覧を取得する

2021年2月16日Python,Zabbix,Zabbix API

こんにちは。プラットフォーム技術部の飯出(いいで)です。

今回は、Zabbix APIを使ってホストグループの情報を取得する方法について説明します。

この記事の実装サンプルでは、以前の記事で実装した内容を再利用して説明しています。Googleなどの検索結果から直接この記事に訪れた方は、一度、以下の記事を読んでいただけますと幸いです。

ホストグループ名を指定して、情報を取得する

手始めに、ホストグループ名を指定して情報を取得します。使用するメソッドは、hostgroup.getです。公式のマニュアルはこちらです。

要求フォーマット

{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
        "filter": {
            "name": [
                "Zabbix servers"
            ]
        }
    },
    "auth": "********************************",
    "id": 1
}

応答フォーマット

{
    "jsonrpc": "2.0",
    "result": [
        {
            "groupid": "4",
            "name": "Zabbix servers",
            "internal": "0"
        }
    ],
    "id": 1
}

応答の内容を簡単に説明します。

ホストグループ情報の概要(Host group Object)

公式のマニュアルはこちらです。

英語だとわかりにくいので、日本語化してみました。

プロパティ宣言型説明
groupidstringホストグループのID(読取専用)
name(必須)stringホストグループの名前
flagsintegerホストグループの由来(読取専用)
・0: 一般的なホストグループ
・4: ディスカバリによって検出されたホストグループ
internalintegerホストグループがシステムによって内部的に使われているかどうか。
内部で使われているホストグループは削除できません。(読取専用)
・0: 内部で使われていません(規定値)
・1: 内部で使われています

ホストグループ「Zabbix servers」を取得する

では実際に、ホストグループの情報を取得してみましょう。Zabbix Applianceの構築時に設定されているホストグループ「Zabbix servers」の情報を取得します。

プログラム

以下のプログラムの中で、ハイライトしている部分がホストグループ固有の実装です。Zabbixサーバーに情報を取得したいホストグループ名を渡すと、Zabbixサーバーの応答(result)の中に配列(list)、その中に辞書(dictionary)を格納した階層構造でホストグループの情報を返却します。

「今回はホストグループの情報を1つ取得するのでは?」と思われるかもしれませんが、Zabbix APIはホストグループの数に関係なく、配列の中に情報を格納してきます。

import os
import traceback
from function import login, logout, invoke
  
def main():
    server = "http://hostname/zabbix"
    user = "Admin"
    password = "******"
    session_id = ""
  
    hostgroups = [
        "Zabbix servers"
    ]

    try:
        session_id = login(server, user, password)
        if 0 < len(session_id):
            request = {
                "jsonrpc": "2.0",
                "method": "hostgroup.get",
                "params": {
                    "filter": {
                        "name": hostgroups
                    }
                },
                "auth": session_id,
                "id": 1
            }
 
            response = {}
            if invoke(server, request, response):
                for item in response["result"]:
                    for key, value in item.items():
                        print("{}: {}".format(key, value))
 
            else:
                print("{}: error: message={}, data={}, code={}".format(
                    os.path.basename(__file__),
                    response["error"]["message"],
                    response["error"]["data"],
                    response["error"]["code"])
                )
             
    except Exception as e:
        print("{}: exception: {}".format(
            os.path.basename(__file__),
            traceback.format_exc())
        )
 
    finally:
        if 0 < len(session_id):
            # ログインしたら、忘れずにログアウトしましょう
            logout(server, session_id)
 
if __name__ == "__main__":
    main()

実行結果

PS C:\zabbixapi\sample> python3 .\sample-06.py
groupid: 4
name: Zabbix servers
internal: 0
flags: 0

ホストグループ「Zabbix servers」の情報がちゃんと取得できましたね!

ホストグループの一覧を取得する

要求パラメーターを少し変更すれば、ホストグループの一覧が簡単に取得できます。早速実装しましょう。

要求フォーマット

{
    "jsonrpc": "2.0",
    "method": "hostgroup.get",
    "params": {
        "output": "extend",
    },
    "auth": "********************************",
    "id": 1
}

応答フォーマット

ホストグループ名を指定して情報を取得したときと同じ。

プログラム

以下のプログラムでハイライトしている部分を改造しています。また、ホストグループ名を指定する必要がなくなりましたので、ホストグループ名の配列(hostgroups=[“Zabbix servers"])も削除しました。

import os
import traceback
from function import login, logout, invoke
  
def main():
    server = "http://hostname/zabbix"
    user = "Admin"
    password = "******"
    session_id = ""

    try:
        session_id = login(server, user, password)
        if 0 < len(session_id):
            request = {
                "jsonrpc": "2.0",
                "method": "hostgroup.get",
                "params": {
                    "output": "extend"
                },
                "auth": session_id,
                "id": 1
            }
 
            response = {}
            if invoke(server, request, response):
                for item in response["result"]:
                    for key, value in item.items():
                        print("{}: {}".format(key, value))
 
            else:
                print("{}: error: message={}, data={}, code={}".format(
                    os.path.basename(__file__),
                    response["error"]["message"],
                    response["error"]["data"],
                    response["error"]["code"])
                )
             
    except Exception as e:
        print("{}: exception: {}".format(
            os.path.basename(__file__),
            traceback.format_exc())
        )
 
    finally:
        if 0 < len(session_id):
            # ログインしたら、忘れずにログアウトしましょう
            logout(server, session_id)
 
if __name__ == "__main__":
    main()

実行結果

PS C:\zabbixapi\sample> python3 .\sample-07.py
groupid: 1
name: Templates
internal: 0
flags: 0
groupid: 2
name: Linux servers
internal: 0
flags: 0
groupid: 4
name: Zabbix servers
internal: 0
flags: 0
groupid: 5
name: Discovered hosts
internal: 1
flags: 0
groupid: 6
name: Virtual machines
internal: 0
flags: 0
groupid: 7
name: Hypervisors
internal: 0
flags: 0
groupid: 8
name: Templates/Modules
internal: 0
flags: 0
groupid: 9
name: Templates/Network devices
internal: 0
flags: 0
groupid: 10
name: Templates/Operating systems
internal: 0
flags: 0
groupid: 11
name: Templates/Server hardware
internal: 0
flags: 0
name: Templates/Applications
internal: 0
flags: 0
groupid: 13
name: Templates/Databases
internal: 0
flags: 0
groupid: 14
name: Templates/Virtualization
internal: 0
flags: 0

ホストグループの一覧を取得できました。今回の実装は、ここまで。
(Templates/*を、なんとかしたいと思った方は、また次回。)

Zabbix 4.0→5.0の変更点

大きな変更点がありませんので割愛しますが、ホストグループ検索時に指定できる以下の絞り込み条件が増えているようです。

  • with_graph_prototypes
  • with_item_prototypes
  • with_simple_graph_item_prototypes

まとめ

この記事では、Zabbix APIを呼び出してホストグループの一覧を取得する実装について紹介しました。監視対象の棚卸し作業などを実施する場合において、ホストグループ単位で絞り込めるような一覧を作りたい場合に活用できるのではないでしょうか。

次回以降、「ホストグループを登録する方法」と「ホストグループを条件で絞り込む方法」について紹介したいと思います。

アークシステムは Zabbix Japan LLC の認定パートナー企業です。 当社はZabbixバージョン1.1の時代から監視ソリューションの活用を進め、Zabbixに関する製品・サービスの販売に加え、Zabbix関連サービスの提供を行っています。

Zabbixに関するお問い合わせはこちらからお願いいたします。
  • 株式会社アークシステムの予約・来訪管理システム BRoomHubs
  • 低コスト・短納期で提供するまるごとおまかせZabbix