不背锅运维Zabbix数据查询技巧分享快速找出zabbix的
写在开篇当zabbix监控的体量上去后,数据量就会非常大,在web页面上总是查询很慢、甚至查询失败时。又或者,当其他用户向你提出一些查询需求,特别是在web页面很难做到的个性化查询时,那么就要编写查询sql了。本篇不是sql教程,而是分享如何快速获得查询zabbix数据的sql语句,并在其基础上改造成适合你的sql。
查询需求当用户向你提出这样一个需求,需要查询某台主机的所有监控项、监控key、触发器名称以及告警级别。这时候,你可能第一时间就是要登录到数据库去看所涉及到的表的表结构、搞清楚他们之间的关系,然后再写个多表关联查询的sql语句,如果你对zabbix的表非常熟悉,可能搜的一下就搞定了。那要是不熟悉呢?实话说,监控项和触发器的关系,我就找了大半天(尴尬。。。)。按正常想法,肯定涉及到triggers表,但看了triggers的表结构,又特么跟items表没关系。那我就想,肯定还有一张中间表,找了大半天没找到,最后发现这张中间表的名字叫做functions,我了个去。特么叫这个名字我一万匹草泥马奔腾而过打死我都没想到,是这个中间表,尴尬。
SQLdescfunctions;NameTypeNullableDefaultCommentsFUNCTIONIDNUMBER(20)ITEMIDNUMBER(20)TRIGGERIDNUMBER(20)NAMENVARCHAR2(12)YPARAMETERNVARCHAR2(255)Y0技巧实战结合我踩过的坑,以及依托用户侧的查询需求,那么正式分享一下我是怎么快速解决这个需求的。好了,废话不说,开撸!!!(O()O小撸怡情,大撸伤身啊!)
1、首先开启调试模式
2、然后随便找一台主机并进入触发器
3、接着创建一个测试的触发器
4、触发器名称随便给就好,然后添加表达式
5、随便选个监控项
6、最后添加这个触发器
7、接着把调试模式框框中的sql都复制到文本文件里,方便等会查找
8、搜索刚才创建的触发器名称testa,找到相关的sql
9、将原滋原味的sql拿到PLSQLDeveloper执行一下看看(我的是oracle环境)
10、根据实际需求改造查询sql接下来就是慢慢改造这条sql了,本篇只是分享如何快速获得zabbix的sql,不讲改造的过程,下面我直接分享出改造后的sql,以及查询结果。
改造后的sqlselectdata。host主机,data。name监控项,data。key监控项KEY,data。description触发器名称,data。alertlevel告警级别FROM(SELECTh。host,i。name,i。key,t。description,CASEt。priorityWHEN0THEN未分类WHEN1THEN信息WHEN2THEN警告WHEN3THEN一般严重WHEN4THEN严重WHEN5THEN灾难ELSE未知的告警级别ENDASalertlevelFROMtriggerst,functionsf,itemsi,hostshWHEREf。triggeridt。triggeridANDf。itemidi。itemidANDh。hostidi。hostidANDh。hostZabbixserver)data;
查询结果
写在最后好了,本篇分享到此结束,如果您有更好、更快速的方法可以私信我,一起交流、学习、进步。