[技术干货] Zabbix使用javascript+jsonpath预处理动态生成监控项

[复制链接]
乐维 发表于 2020-8-27 10:08:49 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
场景模拟:
问题1:数据库空间如果太大,对性能方面有一定的影响,所以某知名企业的运维人员小智想要监控每台数据库服务器的数据库文件大小。这名运维人员目前的做法是执行查询语句,把结果存成txt文件,然后每天都需要登录到所有的数据库服务器查看这个保存了数据库文件大小的txt文件,这样的做法导致了小智每天都要加班完成其他的工作,所以小智就想要用zabbix监控数据库文件的大小。

实验过程:
如图,下面是运行人员小智用查询语句把数据库的大小写入某个txt文件中
1.png

第一步:获取数据库大小的数据。(小智把所有数据库服务器上记录数据库大小的db.txt文件,统一存在/tmp目录,/tmp/db.txt)

定义一个自定义键值,用来获取/tmp/db.txt的文件内容
2.png

然后到zabbix的主机界面定义一个键值,用来获取db.txt的内容
3.png

记住,一定要选文本类型,因为如果文件中出现了空行,类型选字符,空行下面如果有内容,就会显示不出来。所以要学文本类型。

重启zabbix_agent是配置生效


如果已经获取到数据库的大小了
4.png

把获取的数据用javascript转换成json格式先。
result = value.split('\n')
var result_array = new Array()
for(var i=0;i<result.length;i++)
{
result_array = '{"DBNAME":'+'"'+result.split(' ')[0]+'"'+',"SIZE":'+'"'+result.split(' ')[1]+'"'+'}'
}
return '{"data":['+result_array+']}'
获取的结果是:
{"data":[{"DBNAME":"admin","SIZE":"0.00GB"},{"DBNAME":"cadre","SIZE":"25.650GB"},{"DBNAME":"config","SIZE":"0.015GB"},{"DBNAME":"cspdb","SIZE":"13.988GB"}]}
5.png
第二步:zabbix的预处理javascript+jsonpath做成自动发现规则
6.png
图中的类型要用相关项目,因为这样才能用刚才获取数据库文件大小的键值的内容用jsonpath+javascript处理成自动发现规则的固定形式
7.png
根据上面获取数据库文件的大小那个键值,我们可以看出来,运维人员小智存的数据格式是每行一个数据库名对应一个数据库的大小
提取数据库名
Jsonpath的参数
$.data..['DBNAME']
Javascript的内容
8.png
提取数据库名的javascipt
db = eval(value)
db_arr = db.length
result_array = new Array()  定义一个新的数组专门存放数据库名
for(var i=0;i<db_arr;i++)  循环每一个数据库名
{
result_array = '{"{#DBNAME}":'+'"'+db+'"'+'}' 提取数据库名报保存到数组中
}
return '{"data":['+result_array+'}]'   字符串拼接生成自动发现规则的形式
return返回的结果是
{"data":[{"{#DBNAME}":"admin"},{"{#DBNAME}":"cadre"},{"{#DBNAME}":"config"},{"{#DBNAME}":"cspdb"}}]
第三步:使用jsonpath做成监控项
9.png
监控项原型使用刚才{#DBNAME}宏值做监控项名称,并且键值也必须要用到这个宏,不然到时候键值会冲突。
类型也要选相关项目,因为他要通过一开始获取数据库大小的键值,利用jsonpath提取数据库的大小。
10.png
最后等待生成的监控项
11.png
技术交流欢迎加入Q群:177428068




上一篇:Zabbix监控值统计每个月触发器告警次数
下一篇:Windows 安装多一个agent
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝0

帖子239

发布主题

乐维社区

微信公众号

版权所有 © 2016-2019 九一乐维丨粤ICP备17007026号