ペネトレーションしのべくん

さようなら、すべてのセキュリティエンジニア

PyZabbix(PythonのZabbix APIライブラリ)の使い方

概要

Zabbix APIPythonで叩くためのライブラリ「PyZabbix」に関する日本語情報があんまりなくて英語読んだりソース読んだりちょっと大変だったので、メモがてら書いておく。

github.com

Zabbix APIそのものについての説明は割愛するが、公式ドキュメントとお世話になったQiita記事をいくつか。

www.zabbix.com

qiita.com

qiita.com

使い方

ざっくり、ログインとそれ以外に分かれる。

ログイン

最初にアカウント情報を渡してトークンをもらうのがZabbix APIのお作法。これはreadmeに書いてある通りやったらよい。プロキシはOSの設定値(http_proxyやhttps_proxy)に従う。

from pyzabbix import ZabbixAPI

# ZabbixサーバーのFQDN。パス(/zabbix/api_jsonrpc.php)は不要
zapi = ZabbixAPI("http://zabbixserver.example.com")

# Zabbixアカウントのユーザー名とパスワード
zapi.session.auth = ("http user", "http password")

# SSL/TLS証明書の検証をするかどうか。Falseの場合は警告メッセージが出力される(後述)
zapi.session.verify = False

# タイムアウト値(秒)の設定
zapi.timeout = 5.1

# ログイン。session.authで入力している場合はpasswordは不要?
zapi.login("http user", "http password")

zapi.session.verifyをFalseにしている場合、PyZabbixで使われているRequestsライブラリの警告メッセージが出力される。抑止したい場合は以下を参照。

http://73spica.tech/blog/requests-insecurerequestwarning-disable/

import urllib3
from urllib3.exceptions import InsecureRequestWarning
urllib3.disable_warnings(InsecureRequestWarning)

get、create、deleteなどのAPIの利用

例えばhost.get APIを使う時は、zapi.host.getのように、あたかもPyZabbix自体のメソッドであるかのようにZabbix APIのメソッドを繋げて使う。パラメータの指定は引数でおこなう。アウトプットはdict型でリターンされる。

for h in zapi.host.get(output="extend"):
    print(h['hostid'])

# 複数の値を持たせる場合、list型で指定する。
host_dict = zapi.host.get(search=["test01", "prod"], output=["name", "available"])