|
#!/usr/bin/env python
#
-*- coding: utf-8 -*-
import json
import urllib2
class get_hostinfo:
#先定义API要用的基本信息
def __init__(self):
self.url='http://IPADDRESS/api_jsonrpc.php'
self.header={'Content-Type': 'application/json'}
self.authID=self.login()
#登录的json请求,返回认证ID
def login(self):
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "USERNAME", #zabbix的管理员账号
"password": "PASSWORD" #zabbix的管理员密码
},
"id": 0
})
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key,self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
print 'Auth Failed', e.code
else:
response = json.loads(result.read())
result.close()
authID = response['result']
return authID
#取数据的json请求基本格式,下面都要用到
def get_data(self,data,param=""):
request = urllib2.Request(self.url,data)
for key in self.header:
request.add_header(key,self.header[key])
try:
result = urllib2.urlopen(request)
except URLError as e:
if hasattr(e, 'reason'):
print 'We failed to reach a server.'
print 'Reason: ', e.reason
elif hasattr(e, 'code'):
print 'The server could not fulfill the request.'
print 'Error code: ', e.code
return 0
else:
response = json.loads(result.read())
result.close()
return response
#取得指定hostgroup的hostid一览
def get_hostids(self,groupid):
data = json.dumps(
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": "hostid",
"groupids": groupid
},
"auth": self.authID,
"id": 2
})
res = self.get_data(data)['result']
hostids = []
for i in range(len(res)):
hostids.append(res['hostid'])
return hostids
#根据hostid一览取得所有host的数据
def get_info(self,groupid,method,info,parm=""):
hostinfos = []
infos = self.get_hostids(groupid)
for i in infos:
data = json.dumps(
{
"jsonrpc": "2.0",
"method": method,
"params": {
"output": "extend",
"hostids": i,
"search": {
"key_": parm
},
},
"auth": self.authID,
"id": 2
})
res = self.get_data(data)['result']
hostinfos.append(res[0][info]) if len(res) != 0 else hostinfos.a
ppend("0")
return hostinfos
def main():
#登录
zbx = get_hostinfo()
zbx.login()
#取得服务器名
#groupid不知道的话可以用host.get的method用组中的一个hostname去查groupid
names = zbx.get_info("24", "host.get", "name")
#取得IP
ips = zbx.get_info("24", "hostinterface.get", "ip")
#取得Ping信息
pings = zbx.get_info("24", "item.get", "lastvalue", "icmpping")
#取得C盘使用率,snmp监视的所以key是hrStorageUsage2
diskc = zbx.get_info("24", "item.get", "lastvalue", "hrStorageUsage2")
#取得D盘使用率,snmp监视的所以key是hrStorageUsage3
diskd = zbx.get_info("24", "item.get", "lastvalue", "hrStorageUsage3")
for a, b ,c, d, e in zip(names, ips, pings, diskc, diskd):
print a, b, c, d, e
if __name__ == '__main__':
main() |
|