利用zabbix—API查询zabbix监控项历史数据、均值、峰值详细讲解

前言:

 查询监控项历史数据,最常见的办法就是在页面查询,但是页面只能展现最近的500个数值,如果要查询历史数据比较久远或要形成数据表格进行分析,这个办法就不适用了,但是利用zabbix—API查询zabbix监控项历史数据就可以满足这一需求,只需要指定查询的起止时间及监控项,就能以数据的形式进行输出,便于业务侧分析此期间的性能指标是否正常

具体脚本讲解如下:

#coding:utf-8#给定主机IP获取一段时间内cpu的均值和峰值并写入文件(txt,可以跑完后直接把后缀名改为csv以表格形式打开);需要指定IP文件import requestsimport jsonimport csvimport timedef get_token(): data = { "jsonrpc": "2.0", "method": "user.login", "params": { "user": username, "password": password }, "id": 0 } r = requests.get(zaurl, headers=header, data=json.dumps(data)) auth = json.loads(r.text) return auth["result"]def item_get(token, host, itemkey): data = { "jsonrpc": "2.0", "method": "item.get", "params": { "host": host, "search": { "key_": itemkey }, }, "auth": token, "id": 1 } request = requests.post(zaurl, data=json.dumps(data), headers=header) dict = json.loads(request.content)# print(dict) return dict[‘result‘][0][‘itemid‘]def getdata(token,itemid, start, stop): data = { "jsonrpc": "2.0", "method": "history.get", "params": { "output": "extend", "itemids": itemid, "history": 0, "time_from":start, "time_till":stop }, "id": 2, "auth": token, } request = requests.post(zaurl, headers=header, data=json.dumps(data)) dict = json.loads(request.content) print(dict) return dict[‘result‘]def timecovert(stringtime): timeArray = time.strptime(stringtime, "%Y-%m-%d %H:%M:%S") timeStamp = int(time.mktime(timeArray)) return timeStampif __name__ == "__main__": zaurl = "http://IP/api_jsonrpc.php" # 访问zabbix页面的url header = {"Content-Type": "application/json"} username = "xxx" #zabbix的账户与密码 password = "xxx" hostfile="ip.txt" token = get_token() starttime = "2020-05-24 11:30:00" #查询历史数据的起止时间 stoptime = "2020-05-24 12:30:00" start = timecovert(starttime) stop = timecovert(stoptime)#生成一个txt文件 datafile = "/home/dwchenrongbin/linfan/data.txt" fdata = open(datafile,‘w‘) with open(hostfile, "r") as f: f1 = f.readlines() for ips in f1: host = ips.replace(‘\n‘, ‘‘).strip() # 修改参数#以下例子为cpu itemkey = ["cpu_use_ag"] #要查询监控项的KEY值 itemid = item_get(token, host, itemkey) data = getdata(token,itemid,start,stop) if data: valuelist = [] for i in data: valuelist.append(float(i["value"])) avge = sum(valuelist)/len(valuelist) #查询周期内的平均值 max1 = max(valuelist) #查询周期内的最大值 fdata.write(host + ‘,‘ + str(round(avge,2)) + ‘,‘ + str(round(max1,2)) + ‘\n‘) print (host, avge, max1,valuelist) #打印出 主机名、平均值、最大值、历史数据 else: print (host) fdata.close()
以下是我根据脚本输出整理的Excel表历史数据(IP已被我过滤掉)

利用zabbix—API查询zabbix监控项历史数据、均值、峰值详细讲解

相关文章