この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
サーモン大好き、横山です。
今回は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
が、以下になります。
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
を追加し、ログを表示します。
demo.py
#!/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触る機会があれば是非試して見てください。