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