api查询所有记录 zabbix_利用zabbix—API查询zabbix监控项历史数据、均值、峰值详细讲解...

前言:

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

具体脚本讲解如下:

#coding:utf-8

#给定主机IP获取一段时间内cpu的均值和峰值并写入文件(txt,可以跑完后直接把后缀名改为csv以表格形式打开);需要指定IP文件

import requests

import json

import csv

import time

def 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 timeStamp

if __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已被我过滤掉)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值