前言
Zabbix是一款服务器监测应用,有良好的web界面,美中不足的是缺乏导出报表的功能,但是Zabbix同时也提供了强有力的API支持。https://www.zabbix.com/documentation/3.4/zh/manual/api 详细可以看这个。
本系统是我自己写的一个将zabbix监测到的数据导出成Excel表的系统。
后台使用Springboot+JPA+POI
前端使用VUE+ElementUI
源码先行奉上:
后台代码:https://github.com/FENGZHIJIE1998/zabbix-data/
前端代码:https://github.com/FENGZHIJIE1998/zabbix-data-vue/
效果
我们先来看看效果
来看看导出的表格
目前已经实现了历史导出数据记录、设置要导出的监控项,监控项的别名映射设置以及权重排序功能。
经过多线程的优化,计算数据大概需要4秒左右
食用指南:
部署后台:
1.克隆代码 https://github.com/FENGZHIJIE1998/zabbix-data/
2.修改配置文件 application.yml
需要将以下地方修改为你的设置
3.导入sql
sql文件再resource的sql目录下。
4.启动项目。
部署前端:
1.克隆前端代码 https://github.com/FENGZHIJIE1998/zabbix-data-vue/
2.执行命令
npm install
npm run serve
代码介绍
后台使用的是Springboot JPA POI技术,详细不展开。
1.获取数据
首先是调用Zabbix提供的API,在DataServiceImpl里,通过HTTPClient工具进行数据获取。关于zabbixapi的使用这里不展开说。
声明了一个内部类,AsynClu进行多线程异步计算,因为每个主机的数据是不会交叉的,所以我们采用多线程各个主机计算各自数据的思路。同时实现有返回值的Callable接口,将计算好的结果返回。
根据构造顺序执行:
1.login()方法获取token
2.getHost()获取主机项
通过设置output和selectInterfaces这两个参数可以获取到想要的数据,减少数据解析的消耗
String[] output = {"hostid", "host", "name", "ip"};
String[] selectInterfaces = {"ip"};
3.getItem()获取监控项
同样这里也是设置了output属性
String[] output = {"itemid", "hostid", "name", "key_", "value_type", "units"};
4.getHistory()获取对应时间范围内的历史数据
这里注意zabbix本身不同数据类型的历史数据是存放在不同表里的,我们查找时应根据getItem里获取到的value_type设置参数,否则会出现数据获取不到的情况
historyDTO.setHistory(Integer.valueOf(item.getValue_type()));
5.calculate()方法是对获取到的历史数据进行计算,获取最大最小值、平均值、差值。这一步其实就是根据你的需求来,你需要计算出什么样的值。注意你可能需要单位换算,单位换算的代码我还未想好如何能够更高效的换算,有思路的大佬欢迎留言。
6.将计算的数据排序返回,添加到res集合中
List<DataResponse> dataResponses = future.get();
res.addAll(dataResponses);
7.对数据进行excel填充,这里就不展开说了,关于POI的使用说明自行查找吧,太多了。
代码介绍就到这里
说明:本系统用于内网运维使用,所以就没有做登录模块,有需要的小伙伴可以看我的关于登录拦截的博客啦
这是第一版,如果有任何问题,请留下你的评论或者issue。如果觉得好用,客官别忘了点赞呀,能够去GitHub上star一下就更好了
有什么问题可以评论或者私信我,每日在线解(LIAO)疑(SAO)。
我是大誌,一位准备996的卑微码农
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)