zabbix自动发现数据库表数据
Posted 久违的太阳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了zabbix自动发现数据库表数据相关的知识,希望对你有一定的参考价值。
zabbix可以处理json格式,并将其以键值的方式在监控项中展示出来,下面模拟一个从数据库中获取数据的低级自动发现规则示例.
1.需求分析
在oracle数据库中有一个表,如下:
SQL> select * from ds.tt;
NAME ID REC
------------------------------ ---------- ----------
a 1 88
b 2 99
c 3 100
我需要在zabbix中配置监控项的方式,获取REC的值,也就是创建三个监控项,分别以name为命名,每个监控项的值取REC的值.
这些REC的值会不停的变,NAME也有可能会变,但是变化不怎么频繁.
2.创建低级自动发现
这里由于name的值是会变的,所以需要使用低级自动发现功能.由于变化频率不高,所以自动发现的频率可以降低.连接数据库采用odbc的方式连接(你需要在zabbix-server上配置正确odbc).
lld自动发现是基于主机或者模版的,下面以基于主机开始创建lld自动发现:
主机->自动发现规则->创建自动发现
名称随意,建议写上XXX Discovery
类型选择数据库监控
键值:名称随意填写,后面添加DSN的名字,这里我使用变量$DSN
用户名和密码:这里使用变量
SQL查询:这里写上我们需要的sql查询.注意这里如果没有实际的列名,需要使用别名.记住这里的别名就是后面的监控项所需要用到的
更新间隔:可以适当调大点,例如1h发现一次
3.测试监控项
点击测试进行发现测试:
手工输入变量的值,例如这里的txyun,zabbix,zabbix,点击get value and test,会获取到结果
我们点击值,获取到json数组,
将数组在网页中bjson中进行格式化后结果如下:
[
"#NAME": "a",
"#ID": "1",
"#REC": "88"
,
"#NAME": "b",
"#ID": "2",
"#REC": "99"
,
"#NAME": "c",
"#ID": "3",
"#REC": "100"
]
这里自动发现了三个数组.
4.创建监控项原型
选择监控项原型->创建监控项原型
名称:这里一般都是以自动发现的名称打头,即#NAME ,这里的NAME就是上面json数组中返回的键的名字
类型:选择可计算的
键值:这里的名称可以随意取,但是必须要包含你需要的键的名称#NAME,一般我们取比较有意义的名称,可以一眼看出这取的是什么值,例如这里的REC[#NAME]
公式:写上在JSON中你要获取的键的名字,这里我们需要的REC,所以为#REC
根据需要配置合适的监控间隔和应用集
5.测试监控项原型
点击测试,在宏上面写上json中的值,点击get value and test,如果能正确的获取到你想要的值,则表示监控项原型完成.
6.执行自动发现
在完成所有的配置之后,回到自动发现界面,点击Execute Now立刻执行:
这样在监控项中可以看到刚刚自动发现的监控项:
在最新数据中可以查看到最新获取的值:
到此处理完成.
7.后续
其实这个示例非常实用,例如在检查表空间或者ASM磁盘组的监控的时候,以前我们往往实用自定义监控项写脚本的方式实现,用了这种方式可以很方便的直接在zabbix中配置.
下面是获取oracle表空间使用率的sql语句,有兴趣的朋友可以自己配置一下:
select a.tablespace_name,trunc(used) used ,trunc(total-used) free,trunc(total) total,trunc(used*100/total) pct_used from (select tablespace_name,sum(decode(maxbytes,0,bytes,maxbytes))/1024/1024 total from dba_data_files group by tablespace_name) a, (select tablespace_name,sum(bytes)/1024/1024 used from dba_segments group by tablespace_name) b where a.tablespace_name=b.tablespace_name order by 5 desc;
以上是关于zabbix自动发现数据库表数据的主要内容,如果未能解决你的问题,请参考以下文章