前言:网上有很多关于zabbix数据库的资料,但大多是复制+转载,我一直想找一篇博客是关于zabbix数据库表字段的说明,但始终找不到,为此不得不将工作中需要的表字段一一记录,为了防止和我有相同需求的小伙伴和我一样苦逼,现将我总结出来的表字段意思贴出来。
在百度文库上找到一份比较全的参考资料
参考资料:https://wenku.baidu.com/view/8d56c7b489eb172ded63b7ea.html
1.host:主机表
不作全部说明,只说比较重要的和我开发中用到的
hostid:主机的id
proxy_hostid:代理主机的id
host:这里代表主机的ip
status:代表主机的状态:数据库存储有三个值:0代表被监控,1代表未监控,3代表该主机是模板主机
通过zabbix的api的host.get只能获取到状态为0的主机,通过template.get能获取到状态为3的主机
name:主机的别名/昵称
flags:这个主机是否启用:0代表启用,1代表未启用
templateid:模板id(有点像自关联)
description:对主机的描述
2.item:监控项表
itemid:监控项的id
type:监控项的类型:常见的有agent,SNMP,agent(active) 等
hostid:监控项关联的主机id
name:监控项的名称
key_ :监控项item的key值,(数据库中存储的这个key_的内容大概就是监控表达式比如:system.swap.size[,free]这种
delay:配置item时候配置的 “Update Interval”,开发中没用到,不清楚。
history:监控项数据在历史表中保留的时间天数
trends:监控项数据在trends表中保留的天数
status:监控项的状态:0代表能够使用,1代表不能够使用
value_type:重点中的重点:有五个值:
0:numeric float
1:character
2:log
3:numeric unsigned
4:text
分别代表监控项不同的返回类型,这个值决定了监控项的数据会存储在哪张历史表中(历史表一共有五张,分
别对应着这五个值,这个稍后讲解历史表的时候细说)
units:监控项数据的单位
这个也是需要注意的地方:
默认情况下,监控项采集的数据会存储在历史表中,这些采集的数据如果超过1000,zabbix会将其除以1000存储在数据库中
如果单位是B(byte)或者bps(bytes per second),那么这些采集的数据会除以1024然后存储在数据库中
时间单位:
unixtime – 转为 “yyyy.mm.dd hh:mm:ss”. 只能使用正数。
uptime – 转为“hh:mm:ss” 或者“N days, hh:mm:ss”
这些注意事项稍后再历史表中详细叙述
3.history:历史表
历史表一共有五张表:
先说下各字段什么意思
itemid:监控项的id
clock:时间戳,监控项采集数据的触发时间
value:监控项采集数据的值
ns:纳秒,我现在的理解是监控项采集数据这个过程的时间,不知道正不正确,待定。
历史表与监控表的关系:
这也是开发中把我困扰了很久的问题:如何通过监控项id来获取它的监控数据:
①我是通过zabbix的api来获取的,使用history.get来获取历史数据,注意了,这时需要我们传入的参数不止
一个监控项的id,还需奥传入监控项的value_type,因为如果不传入value_type,history.get方法默认取
history这个表的数据,如果itemid对应不上,就取不到数据。
②如何设置value_type属性:在history.get总可以传入参数history,这是个Integer类型的参数,
它对应着item表中的value_type属性,参数的五种类型如下:
FLOAT(0),
STRING(1),
LOG(2),
INTEGER(3),
TEXT(4);
③我的解决方案是从页面中传过来的itemid,通过它获取其对应的value_type,然后通过这两个值去查询历史
数据,当然,也可以通过页面将value_type的值直接传过来。
4.hostgroup表:主机群组表
groupid:主机群组的id
name:群组名称
internal:未知
flags:未知
5.application表:应用集表
applicationid:应用集的id
hostid:应用集关联的主机id
name:应用集名称
flags:未知