【5.0対応済】Python3で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)
公式のマニュアルはこちらです。
英語だとわかりにくいので、日本語化してみました。
プロパティ | 宣言型 | 説明 |
---|---|---|
groupid | string | ホストグループのID(読取専用) |
name(必須) | string | ホストグループの名前 |
flags | integer | ホストグループの由来(読取専用) ・0: 一般的なホストグループ ・4: ディスカバリによって検出されたホストグループ |
internal | integer | ホストグループがシステムによって内部的に使われているかどうか。 内部で使われているホストグループは削除できません。(読取専用) ・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に関するお問い合わせはこちらからお願いいたします。