利用ZABBIX进行服务器自动巡检并导出报表
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,实现思路主要是利用zabbix的api来对数据进行获取处理,实现思路如下:zabbix提供了丰富的api,可以根据此api获取zabbix得主机信息,监控项ID,监控项的趋势数据和历史数据首先根据主机
千家信息网最后更新 2025年12月03日利用ZABBIX进行服务器自动巡检并导出报表
实现思路
主要是利用zabbix的api来对数据进行获取处理,实现思路如下:
- zabbix提供了丰富的api,可以根据此api获取zabbix得主机信息,监控项ID,监控项的趋势数据和历史数据
- 首先根据主机组ID获取组内的所有主机信息,包括主机名和IP地址
- 循环主机组内的主机ID,并在循环里再嵌套一个根据监控项键值获取监控项ID的请求
- 根据获取到的监控项ID分别获取历史数据和趋势数据
- 将历史数据和趋势数据的值写到一个字典里,并把循环之后的所有字典添加到列表中
- 将列表中的信息写入到Excel中,把脚本放到定时任务中定时执行
定义获取的时间间隔
x=(datetime.datetime.now()-datetime.timedelta(minutes=120)).strftime("%Y-%m-%d %H:%M:%S")y=(datetime.datetime.now()).strftime("%Y-%m-%d %H:%M:%S")def timestamp(x,y): p=time.strptime(x,"%Y-%m-%d %H:%M:%S") starttime = str(int(time.mktime(p))) q=time.strptime(y,"%Y-%m-%d %H:%M:%S") endtime= str(int(time.mktime(q))) return starttime,endtime根据主机组ID获取主机信息
def get_hosts(groupids,auth): data ={ "jsonrpc": "2.0", "method": "host.get", "params": { "output": [ "name"], "groupids": groupids, "filter":{ "status": "0" }, "selectInterfaces": [ "ip" ], }, "auth": auth, # theauth id is what auth script returns, remeber it is string "id": 1 } gethost=requests.post(url=ApiUrl,headers=header,json=data) return json.loads(gethost.content)["result"]根据获取到的主机信息构建循环,获取主机监控项的数据
获取历史数据
host=[] print(hosts) for i in hosts: item1=[] item2=[] #print(i) dic1={} for j in ['vfs.fs.size[C:,total]','vm.memory.size[total]','system.cpu.num']: data={ "jsonrpc": "2.0", "method": "item.get", "params": { "output": [ "itemid" ], "search": { "key_": j }, "hostids": i['hostid'] }, "auth":auth, "id": 1 } getitem=requests.post(url=ApiUrl,headers=header,json=data) item=json.loads(getitem.content)['result'] hisdata={ "jsonrpc":"2.0", "method":"history.get", "params":{ "output":"extend", "time_from":timestamp[0], #"time_till":timestamp[1], "history":0, "sortfield": "clock", "sortorder": "DESC", "itemids": '%s' %(item[0]['itemid']), "limit":1 }, "auth": auth, "id":1 } gethist=requests.post(url=ApiUrl,headers=header,json=hisdata) hist=json.loads(gethist.content)['result'] item1.append(hist)获取趋势数据
for j in ['vfs.fs.size[C:,used]','vm.memory.size[used]','system.cpu.load']: data={ "jsonrpc": "2.0", "method": "item.get", "params": { "output": [ "itemid" ], "search": { "key_": j }, "hostids": i['hostid'] }, "auth":auth, "id": 1 } getitem=requests.post(url=ApiUrl,headers=header,json=data) item=json.loads(getitem.content)['result'] trendata={ "jsonrpc":"2.0", "method":"trend.get", "params":{ "output": [ "itemid", "value_max", "value_avg" ], "time_from":timestamp[0], "time_till":timestamp[1], "itemids": '%s' %(item[0]['itemid']), "limit":1 }, "auth": auth, "id":1 } gettrend=requests.post(url=ApiUrl,headers=header,json=trendata) trend=json.loads(gettrend.content)['result'] item2.append(trend) 对获取到的数据进行处理,并导出到csv文件中
dic1['Hostname']=i['name'] dic1['IP']=i['interfaces'][0]['ip'] dic1['磁盘C:Total(B)']=round(float(item1[0][0]['value'])/1024**3,2) dic1['磁盘最大C:Used(B)']=round(float(item2[0][0]['value_max'])/1024**3,2) dic1['内存Total(B)']=round(float(item1[1][0]['value'])/1024**3,2) dic1['内存最大Used(B)']=round(float(item2[1][0]['value_max'])/1024**3,2) dic1['内存平均used(B)']=round(float(item2[1][0]['value_avg'])/1024**3,2) dic1['CPU负载最大值']=item2[2][0]['value_max'] dic1['CPU负载平均值']=item2[2][0]['value_avg'] dic1['CPU 核数']=item1[2][0]['value'] x = time.localtime(int(item1[2][0]['clock'])) item1[2][0]['clock'] = time.strftime("%Y-%m-%d %H:%M:%S", x) dic1['clock']=item1[2][0]['clock'] host.append(dic1) print(item) print(host) return host def writecsv(getitem1): with open('data.csv','w',encoding='utf-8-sig') as f: #f.write(codecs.BOM_UTF8) writer = csv.DictWriter(f,csvheader) writer.writeheader() for row in getitem1: writer.writerow(row)实现效果如下:

完整代码可以访问github地址:"https://github.com/sunsharing-note/zabbix/blob/master/xunjian_auto.py"
zabbix API地址:https://www.zabbix.com/documentation/4.0/zh/manual/api/reference/history/get
欢迎各位关注个人公号"没有故事的陈师傅"
数据
主机
监控
信息
历史
历史数据
趋势
循环
最大
内存
地址
字典
思路
磁盘
处理
个人
中将
代码
任务
师傅
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
王者服务器会在晚上关闭吗
如何加强校园网络安全防护
成都贰零贰零互联网科技有限公司
数据库的技术及运用
数据库应用技术上机软件
数据库与信息挖掘技术
成都网络安全宣传周公众体验活动
数据库安全加固规范
新爱美剧此服务器证书无效
科技发展与互联网的关系
网络安全立法主要目的
ftp服务器传输速度提升
什么是ice服务器事件
数据库检索技术中
osts云服务器价格
校园安全网络安全观后感
上海强象互联网科技有限公司
腾讯云哪里下载服务器协议
数据库名称sa
浙江通信网络安全防护方案设计
饥荒服务器启动洞穴
数据库的技术及运用
sql建立数据库的用途
数据库dba的收入
关于网络安全的应急预案
香港 服务器 dns
网络安全信息安全基础知识
邯郸市博信软件开发
数据库的多表查询实验总结与分析
学习做软件开发难吗