首页 > 编程语言 > 详细

运维python进行(三) 用python写一个自己zabbix的调用方法

时间:2017-01-05 08:06:19      阅读:319      评论:0      收藏:0      [点我收藏+]

  zabbix是一款非常主流监控软件,以简单易用为人称道。zabbix拥有完善的api方便大家通过第三方调用,所以今天介绍一下如何利用python完成对zabbix api调用。

   zabbix api主要通过http协议进行通讯,这里我们使用数据是json格式数据进行交互。

   这里先放一个官方文档的传送门方便大家翻阅


介绍

zabbix api的地址是“/api_jsonrpc.php”这里先用linux系统命令做个演示:如何获取zabbix的登录token,下面返回的结果是一个json对应的result是结果,也就是你想要得到的token

技术分享

[root@salt-node1 zabbix]# curl -XPOST http://192.168.198.116/api_jsonrpc.php  -H ‘Content-Type:application/json‘ -d ‘{
>     "jsonrpc": "2.0",
>     "method": "user.login",
>     "params": {
>         "user": "admin",
>         "password": "zabbix"
>     },
>     "id": 0
> }‘
{"jsonrpc":"2.0","result":"f2e8bbaf7e5290d51914a78a0328f19e","id":0}


看上去只是一个post的http请求那我们就用python来搞一下吧

首先我们选的是urllib2模块,之所以用这个是因为python本身自带此模块增加系统的兼容性

#coding:utf-8
import json
import urllib2
import logging
logging.basicConfig(filename=‘./my_log_test.log‘,format=‘%(asctime)s - %(name)s - %(levelname)s - %(message)s‘,level=logging.INFO)

zbx_url = ‘http://192.168.199.224:88/api_jsonrpc.php‘
zabbix_user = ‘admin‘
zabbix_pwd = ‘dianjoy.com‘

def get_token():
    url = zbx_url
    #这里定义一个header的字典,方便填写全部的http头信息
    header = {"Content-Type": "application/json"}
    # 这里是一个需要发送的json数据
    data = ‘‘‘{
            "jsonrpc": "2.0",
            "method": "user.login",
            "params": {
                "user": "%s",
                "password": "%s"
            },
            "id": 0
        }‘‘‘ % (zabbix_user,zabbix_pwd)
    # 创建一个请求的对象
    request = urllib2.Request(url,data)
    #遍历获取http头信息
    for key in header:
        request.add_header(key,header[key])
    #发送请求,最终返回token
    try:
        result = urllib2.urlopen(request)
    except urllib2.URLError as e:
        print "Auth Failed, Please Check Your Name And Password:",e.code
    else:
        response = json.loads(result.read())
        result.close()
        return response[‘result‘]



class Zbx_base_api(object):
    def __init__(self, zbx_action, zbx_params):
        self.url = zbx_url
        self.header = {"Content-Type": "application/json"}
        zbx_token = get_token()
        self.zbx_action = zbx_action
        self.zbx_params = zbx_params

    def zbx_req (self):
        ‘‘‘ get host all graph ‘‘‘
        data=‘‘‘{
        "jsonrpc": "2.0",
        "method": "%s",
        "params": %s,
        "auth": "%s",
        "id": 1 }‘‘‘ % (self.zbx_action, self.zbx_params, self.zbx_token)
        #data = json.dumps(s_data)
        #print data
        request = urllib2.Request(self.url, data)
        for key in self.header:
            request.add_header(key, self.header[key])
        # auth and get authid
        try:
            result = urllib2.urlopen(request)
        except urllib2.URLError as e:
            print "request Failed:", e.code
        else:
            response = json.loads(result.read())
            if ‘error‘ in response:
                logging.info(response[‘error‘])
                print response[‘error‘]
                return False
            elif not response[‘result‘]:
                logging.info(response)
                print response
                return False
            else:
                return response[‘result‘]
            result.close()
            msg ="[%s] :%s" % (self.zbx_action, self.zbx_params)
            logging.info(msg)

现在有点晚先写到这里明天继续

本文出自 “nginxs小白” 博客,请务必保留此出处http://nginxs.blog.51cto.com/4676810/1889120

运维python进行(三) 用python写一个自己zabbix的调用方法

原文:http://nginxs.blog.51cto.com/4676810/1889120

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!