

【5.0対応済】Python3でZabbix API – ホストグループを絞り込む
こんにちは。プラットフォーム技術部の飯出(いいで)です。
前回、ホストグループの一覧を取得する方法について説明しましたが、今回はさらに検索条件を指定して絞り込む方法について説明します。
この記事の実装サンプルでは、以前の記事で実装した内容を再利用して説明しています。Googleなどの検索結果から直接この記事に訪れた方は、一度、以下の記事を読んでいただけますと幸いです。
部分一致で検索する
前回の記事ではホストグループ名の完全一致で検索しましたが、部分一致で検索する場合は “search" パラメーターを使って検索します。
プログラム
以下のプログラムの中で、ハイライトしている部分が完全一致検索と異なる点です。
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",
"search": {
"name": "servers"
}
},
"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-08.py
groupid: 2
name: Linux servers
internal: 0
flags: 0
groupid: 4
name: Zabbix servers
internal: 0
flags: 0
AND条件で検索する
“search" パラメーターを配列に変更し、複数の条件を設定します。ハイライトしている部分が変更点です。
プログラム
import os
import traceback
from function import login, logout, invoke
def main():
server = "http://hostname/zabbix"
user = "Admin"
password = "******"
session_id = ""
names = [
"zab",
"servers"
]
try:
session_id = login(server, user, password)
if 0 < len(session_id):
request = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"search": {
"name": names
}
},
"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-09.py
groupid: 4
name: Zabbix servers
internal: 0
flags: 0
OR条件で検索する
AND条件で紹介したプログラムにパラメーター “searchByAny" を追加して、Trueを設定します。プログラムの説明がくどくなってきたので、抜粋にします(笑)
request = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"searchByAny": True,
"search": {
"name": names
}
},
"auth": session_id,
"id": 1
}
実行結果
PS C:\zabbixapi\sample> python3 .\sample-10.py
groupid: 2
name: Linux servers
internal: 0
flags: 0
groupid: 4
name: Zabbix servers
internal: 0
flags: 0
ワイルドカードを使って検索する
“searchWildcardsEnabled" パラメーターをTrueに設定します。そして、検索文字列に*を付けましょう。
request = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"searchWildcardsEnabled": True,
"search": {
"name": "Templates*"
}
},
"auth": session_id,
"id": 1
}
実行結果
PS C:\zabbixapi\sample> python3 .\sample-11.py
groupid: 1
name: Templates
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
検索条件に一致しないものを抽出する
“excludeSearch" パラメーターを使ってください。もちろんTrueに設定します。
request = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"searchWildcardsEnabled": True,
"excludeSearch": True,
"search": {
"name": "Templates*"
}
},
"auth": session_id,
"id": 1
}
実行結果
PS C:\zabbixapi\sample> python3 .\sample-12.py
groupid: 2
name: Linux servers
internal: 0
flags: 0
groupid: 4
name: Zabbix servers
internal: 0
flags: 0
name: Discovered hosts
internal: 1
flags: 0
groupid: 6
name: Virtual machines
internal: 0
flags: 0
groupid: 7
name: Hypervisors
internal: 0
flags: 0
テンプレートが含まれるホストグループの一覧を取得する
“templated_hosts" というパラメーターもあります。Trueに設定することで、当該条件の絞り込みができます。試したところ、"excludeSearch" パラメーターとの併用はできませんでした。
request = {
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "extend",
"templated_hosts": True
},
"auth": session_id,
"id": 1
}
実行結果
PS C:\zabbixapi\sample> python3 .\sample-13.py
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
groupid: 12
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
まとめ
Zabbix APIにはさまざまな検索条件が準備されています。今回はホストグループを用いて説明しましたが、ホストの一覧を取得する際にも同様なパラメーターを用いて絞り込み検索ができます。
今回紹介したパラメーターは、以下の公式のマニュアルに記載されています。
そして、読んでいただいた方には察していただけたかと思いますが、ホストグループの一覧からテンプレート格納用に準備されたホストグループを除外したかったのです(涙)
Zabbixの導入・構築でお困りですか?
Zabbixの導入・構築でお困りですか?アークシステムは、Zabbix Japan LLCの公式認定パートナーとして、豊富な実績と高い技術力でお客様をサポートします。
アークシステムが選ばれる理由
- 豊富な経験: 多くのZabbix導入・構築プロジェクトを成功に導いた実績
- 確かな技術力: Zabbix認定資格を持つエンジニアが対応
- 独自のソリューション: 「監視定義テンプレート」を活用した迅速かつ高品質な実装
- 最新情報へのアクセス: Zabbix社との強力なパートナーシップを活かした最新技術対応
こんな方に最適です
- Zabbixの新規導入を検討している
- 現行システムの運用に課題を感じている
- 大規模環境での監視体制を整えたい
アークシステムでは、Zabbixの導入・運用に関する課題を解決し、最適な環境を構築します。どんなご相談でもお気軽にお問い合わせください!