自学Zabbix之路15.1 Zabbix数据库表结构简单解析-Hosts表、Hosts_groups表、Interface表
说在前面:
- 数据库中的表的名称都是复数,比如存放Host信息的表的名字是Hosts等。
- 数据库操作有风险,一旦出问题会造成Zabbix crash。需要谨慎操作。
- 普通的查询可以在备库上进行。两边数据是实时同步的。
概述:
- Zabbix数据库共有108个表,表的名称都是复数的。
- 针对Zabbix中的每一个资源,都有一张表与其对应,比如hosts表,items表等。
- 每一张表中都有一个id字段,如hosts表中的hostid,items中的itemid等。而资源之间的关联关系是通过外键来完成的。
- 资源之间的关联关系是通过外键来完成的。比如host和item的关联关系,就是在items表中使用hostid与hosts表中的资源进行关联。
1. Hosts表
“host”就是一台被监控的对象。
Hosts表结构如下:
- Hostid:唯一标识Host在Zabbix及数据库中的id。不同表之间的关联也要用id。
- Proxy_hostid:若启用“proxy-server”架构,才会出现被监控机器的proxy_hostid。
- Host:被监控机器的名字。
- Dns:DNS的名称。
- Useip:是否用ip监控。
- Port:监控的端口。
- Status:机器目前的状态。“0”为正常监控,“1”为disable。
- disable_util,error,available,errors_from(ipmi_disable_util,ipmi_error…和 snmp_disable_until…都是此类):这几个都是Zabbix Poller会去修改的值。我看了下poller.c的代码,当poller在第一次取不到值(根据值的类型不同会更新相应的列,Item类型为snmp就会更新snmp_XXX,默认为“zabbix”类型)的时候,会等15秒(CONFIG_UNREACHABLE_DELAY)来重试,并且日志会显示“first network error”,如果15秒后依然取不到值,zabbix会在数据库更新这个host取不到值的信息,即这几列。并且日志里显示“another network error”。
- Lastacess:表示proxy最后一次工作的时间。这里的“工作”指Zabbix Server收到Proxy数据。
- Ipmi*、snmp*、jmx*为使用这三种监控方式时的监控记录。
- maintenanceid,maintenance_*:这是Zabbix另一个机制Maintaince有关,用于使Host 置于维护状态而不会报警。
简单针对Host的操作:
更新机器的proxy。找到proxy的hostid,更新对用host的proxy_hostid:
select hostid from hosts where host='ProxyA' and ip='0.0.0.0'; -- get hostid: 1234
update hosts set proxy_hostid=1234 where host='Host_To_Update_Proxy';
得到更新的Host状态(enable/disable)如下:
update hosts set status='0' where host='Host_To_Enable';
update hosts set status='1' where host='Host_To_Disable';
2.Hosts_groups 表
hosts_groups保存了host(主机)与host groups(主机组)的关联关系。
这部分信息可以在我们自己做一些批量查询,例如查询关联到某个主机组的所有设备的IP 、存活状态等,进一步去查询该批量设备的load、IO、mem等统计信息。
3.Interface表
Interface表用于存储每一个host的接口信息,此表与hosts表分离,方便了用户修改信息与管理。