

【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()
- invoke(): HTTP(S)でZabbix APIを呼び出す関数
- login(): Zabbix APIを使うにあたり、Zabbix Serverにログインする関数
- logout(): 同、ログアウトする関数
実行結果
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()
- invoke(): HTTP(S)でZabbix APIを呼び出す関数
- login(): Zabbix APIを使うにあたり、Zabbix Serverにログインする関数
- logout(): 同、ログアウトする関数
実行結果
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の導入・構築でお困りですか?
Zabbixの導入・構築でお困りですか?アークシステムは、Zabbix Japan LLCの公式認定パートナーとして、豊富な実績と高い技術力でお客様をサポートします。
アークシステムが選ばれる理由
- 豊富な経験: 多くのZabbix導入・構築プロジェクトを成功に導いた実績
- 確かな技術力: Zabbix認定資格を持つエンジニアが対応
- 独自のソリューション: 「監視定義テンプレート」を活用した迅速かつ高品質な実装
- 最新情報へのアクセス: Zabbix社との強力なパートナーシップを活かした最新技術対応
こんな方に最適です
- Zabbixの新規導入を検討している
- 現行システムの運用に課題を感じている
- 大規模環境での監視体制を整えたい
アークシステムでは、Zabbixの導入・運用に関する課題を解決し、最適な環境を構築します。どんなご相談でもお気軽にお問い合わせください!