先声个明:
我写技术文章的目的可能就是充个数,因为最近几个月都在钻研技术,没时间思考主要方向。既然花费了大量精力来搞技术,不如当个文章写出来。技术大牛请绕行,初学者可能也学不到什么基本功,就是个个人学习成长血泪史,兴许可以替同路人铺个把个坑儿。
下面继续挖坑儿......
上回说到用Python写数据库测试脚本。之后我就开始摸索zabbix数据库结构,因为之前用API调用时知道了几个关键表,所以直接就拿来用了,其他的表对于不同的需求也都非常有用,多数都能和zabbix页面上的选项对应上。
zabbix安装时导入的表结构里包含140个表,我这里多了一个,就是第一列的django_migrations,这是因为我把zabbix数据库导入到了Django框架里,这个以后再介绍。主要的表有groups、hosts、hosts_groups、items、trends和trends_uint。history系列的表是zabbix收集的原始数据,数据量庞大,实在不敢调用,我们这的数据量就有14亿条。下面分别来看看各表的结构。
groups表里存放的是组ID和组名,查询结果举例如下。
有了这个表,我们就可以把组名和组ID对应起来,由于我们是按项目分组,所以找到组名对应关系是向下查找的第一步。
hosts_groups表储存的是组ID和主机ID对应的表,每个组和组下的主机一一对应产生了主机组ID,我们只要拿到组和主机的对应关系就可以了,主机组ID暂时没啥大用。举例如下。
我通过刚才查到的组ID,查到了该组下的所有主机ID。
hosts表里的项就多了,大部分我还不知干啥用的,因为没用到。。唯一用到的只是name这项,为了做报表用。例子如下。
通过hostid,我可以查到name这项的值。
items表就更多了,它是zabbix监控项,是主机信息和数据的交汇处,所以接口比较多。例子如下。
从SQL语句可以看出,我只查询了itemid和name两项,每个主机的监控项有很多,从zabbix页面上就能看见,我只截取了一段。查items的目的也只是通过hostid得到这两项的值。
trends和trends_uint就是我最终想要得到的数据,通过itemid,可以查到该监控项里clock时间对应的最大、最小和平均值。这两表的区别在于存储的数据类型略有不同,有没有正负号的区别,但好像还有是不是百分数的区别,具体还是去网上查查的好,别被我带坑儿里。例子如下。
好了,数据库简单地搞明白了,下次就用Python来调用数据库中的数据了。
领取专属 10元无门槛券
私享最新 技术干货