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