PythonのpyzabbixでAPIの実行結果を出力する

2015.08.19

この記事は公開されてから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触る機会があれば是非試して見てください。