PythonのpyzabbixでAPIの実行結果を出力する
サーモン大好き、横山です。
今回はZabbix APIとのやりとりを補助してくれるpyzabbixです。
ライブラリ側でログのON/OFFしてくれる関数が無かったのでメモ書きです。
準備
OSは、Amazon Linux上で確認しています。
virtualenvで環境を作り、その中で pip install pyzabbix
でモジュールを入れます。
$ mkdir -p /tmp/pyzabbix $ cd !:2 $ virtualenv -p /usr/bin/python27 venv $ . venv/bin/activate (venv)$ pip install -U pip (venv)$ pip install pyzabbix
コード
ライブラリの中身、 venv/lib/python2.7/site-packages/pyzabbix/__init__.py
が、以下になります。
import logging import requests import json class _NullHandler(logging.Handler): def emit(self, record): pass logger = logging.getLogger(__name__) logger.addHandler(_NullHandler()) class ZabbixAPIException(Exception): """ generic zabbix api exception code list: -32602 - Invalid params (eg already exists) -32500 - no permissions """ pass
venv/lib/python2.7/site-packages/pyzabbix/__init__.py
の中身を見てみますと、
logger = logging.getLogger(__name__) logger.addHandler(_NullHandler())
とありますので、こいつのHandlerを logging.StreamHandler
を追加し、ログを表示します。
#!/usr/bin/env python # coding: utf-8 import pyzabbix import logging # logの設定 logger = pyzabbix.logger logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) logger.addHandler(ch) zapi = pyzabbix.ZabbixAPI('http://localhost/zabbix') zapi.login('Admin', 'zabbix')
実行結果
$ python demo.py JSON-RPC Server Endpoint: http://localhost/zabbix/api_jsonrpc.php Sending: { "params": { "password": "zabbix", "user": "Admin" }, "jsonrpc": "2.0", "method": "user.login", "id": 0 } Response Code: 200 Response Body: { "jsonrpc": "2.0", "result": "84bb3e4679a22e9bc5d891c110092c6d", "id": 0 }
まとめ
Rubyの zbxapi
のデバッグモード見たいなことが出来ないかとライブラリを眺めていたら、
logger
のインスタンスが存在することに気が付きました。
APIをいじるのにシンプルなライブラリですので、Zabbix API触る機会があれば是非試して見てください。