利用ZABBIX进行服务器自动巡检并导出报表
发表于:2024-09-25 作者:千家信息网编辑
千家信息网最后更新 2024年09月25日,实现思路主要是利用zabbix的api来对数据进行获取处理,实现思路如下:zabbix提供了丰富的api,可以根据此api获取zabbix得主机信息,监控项ID,监控项的趋势数据和历史数据首先根据主机
千家信息网最后更新 2024年09月25日利用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安全错误
数据库的锁怎样保障安全
银行软件开发 工作强度
怎么知道我的电脑有数据库
国内有没有网络安全专业
香港云服务器太卡
战地1为什么登陆不了服务器
农信数据库管理
网络安全i ii
胶州商城软件开发服务公司
300英雄最强服务器
网络安全 华商报
软件开发常用证书
幻塔服务器能更换么
领地人生一直在载入服务器
数据库 批量存储
网吧游戏在服务器上还是硬盘上
数据库操作基础培训
计算机网络技术维护自评报告
网络技术商标属于第几类
软件开发核心组
合肥网络安全总部基地一期
商业网络技术
出租服务器手续怎么办
软件开发建立合作机制
网络安全法制宣传周主题
2018网络安全考试答案6
python创建数据库
校园网络安全视频怎么做
虹口区工程网络技术特点
怀旧服狮心服务器转服
杀毒后T3后无法连接服务器