1.代码
# -*- coding:utf-8 -*- import requests import json class Zabbix: def __init__(self, username=None, password=None): self.headers = { 'Content-Type': 'application/json-rpc' } self.url = 'https://www.xxx.com/zabbix/api_jsonrpc.php' #替换为具体的zabbix地址 if username and password: self.username = username self.password = password else: self.username = 'Admin' self.password = 'admin' def _token(self): #获取token data = { "jsonrpc": "2.0", "method": "user.login", "params": { "user": self.username, "password": self.password }, "id": 1, "auth": None } r = requests.post(url=self.url, headers=self.headers, data=json.dumps(data)) token = json.loads(r.content).get("result") return token def all_hostid(self): #获取所有主机的hostid data = { "jsonrpc": "2.0", "method": "host.get", "params": { "output": [ "hostid", "host", ], "selectInterfaces": [ "interfaceid", "ip" ] }, "id": 2, "auth": self._token() } r = requests.post(url=self.url, headers=self.headers, data=json.dumps(data)) hosts = json.loads(r.content) for i in hosts['result']: yield i def get_hostid_by_ip(self, ip=None): #通过ip地址获取主机的hostid hostid = "" if ip is None: print("ip address is None") return hostid for i in self.all_hostid(): if i["interfaces"][0]["ip"] == ip: hostid = i['hostid'] break return hostid def get_item_data(self, ip=None, item=None): #获取item 最新数据,item自定义 hostid = self.get_hostid_by_ip(ip) data = { "jsonrpc": "2.0", "method": "item.get", "params": { "output": "extend", "hostids": hostid, "search": { "key_": item } }, "id": 0, "auth": self._token() } r = requests.post(url=self.url, headers=self.headers, data=json.dumps(data)) res = json.loads(r.content) return res["result"][0]["lastvalue"] def get_mem_total(self, ip): #获取内存总数 return str(int(int(self.get_item_data(ip, 'vm.memory.size[total]')) / 1024**3)) + 'G' def get_disk(self, ip): #获取系统磁盘大小 return str(int(int(self.get_item_data(ip, 'vfs.fs.size[/,total]')) / 1000**3)) + 'G' def get_cpu_num(self, ip): #获取cpu核数 return self.get_item_data(ip, 'system.cpu.num') if __name__ == "__main__": zabbix = Zabbix() ip = "10.19.1.101" print(zabbix.get_disk(ip)) print(zabbix.get_mem_total(ip)) print(zabbix.get_cpu_num(ip))获取zabbix其他的监控数据,可以通过get_item_data() 方法,传入不同的item,如:system.cpu.util[,idle],vm.memory.size[available]等等
查看更多关于python调用zabbix api 获取主机cpu、mem、disk的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://haodehen.cn/did167138