利用ZABBIX进行服务器自动巡检并导出报表
发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,实现思路主要是利用zabbix的api来对数据进行获取处理,实现思路如下:zabbix提供了丰富的api,可以根据此api获取zabbix得主机信息,监控项ID,监控项的趋势数据和历史数据首先根据主机
千家信息网最后更新 2025年01月23日利用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安全错误
数据库的锁怎样保障安全
rust服务器大全搜索
db2查看当前数据库
数据库number 10
天津联想服务器虚拟化设计云主机
主流网络技术有几种
网络服务器配置与管理考试
当今现代网络技术的作用
网络安全论文答辩问题及答案
r语言怎样导入外部的数据库
分布式数据库cap
绝地求生恐怖服务器
中经网统计数据库英文缩写
决战阿古斯数据库
服务器白话
cf进去服务器全是阿拉伯数字
伊犁网络安全
旗牌游戏软件开发公司
收缩数据库时恢复简单模式
教职工网络安全教育活动
济南智飞网络技术
必联网络技术有限公司
想学网络安全技术哪里学
tcga数据库下载亚型基因
网络设备服务器采购表
山西智慧工地管理平台软件开发
网络服务器可以看到浏览器吗
app怎么读取服务器图片
网络技术的军为民用
线美互联网科技 招聘信息
数据库做用户管理登录