翼度科技»论坛 云主机 LINUX 查看内容

Zabbix模板数据存储在哪里?

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
Zabbix的模板数据存储在数据库的哪一个表里面?以MySQL数据库为例,在数据库zabbix中,其实模板数据存储在hosts这个表里面,而不是存在hosts_templates表里面。很多人一看到templates关键字,容易先入为主的以为这个表会存储模板的相关数据。但是实际上,hosts_templates表用于存储主机和模板之间的关系。这个表允许一个主机与多个模板关联,对应实际情况中的主机配置多个模板,从而实现监控项、触发器和图形的继承。以下是hosts_templates表的一些重要字段及其描述:
  1. mysql> desc hosts_templates;
  2. +----------------+-----------------+------+-----+---------+-------+
  3. | Field          | Type            | Null | Key | Default | Extra |
  4. +----------------+-----------------+------+-----+---------+-------+
  5. | hosttemplateid | bigint unsigned | NO   | PRI | NULL    |       |
  6. | hostid         | bigint unsigned | NO   | MUL | NULL    |       |
  7. | templateid     | bigint unsigned | NO   | MUL | NULL    |       |
  8. | link_type      | int             | NO   |     | 0       |       |
  9. +----------------+-----------------+------+-----+---------+-------+
  10. 4 rows in set (0.00 sec)

  11. mysql>
  12. mysql> show create table hosts_templates\G
  13. *************************** 1. row ***************************
  14.        Table: hosts_templates
  15. Create Table: CREATE TABLE `hosts_templates` (
  16.   `hosttemplateid` bigint unsigned NOT NULL,
  17.   `hostid` bigint unsigned NOT NULL,
  18.   `templateid` bigint unsigned NOT NULL,
  19.   `link_type` int NOT NULL DEFAULT '0',
  20.   PRIMARY KEY (`hosttemplateid`),
  21.   UNIQUE KEY `hosts_templates_1` (`hostid`,`templateid`),
  22.   KEY `hosts_templates_2` (`templateid`),
  23.   CONSTRAINT `c_hosts_templates_1` FOREIGN KEY (`hostid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE,
  24.   CONSTRAINT `c_hosts_templates_2` FOREIGN KEY (`templateid`) REFERENCES `hosts` (`hostid`) ON DELETE CASCADE
  25. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
  26. 1 row in set (0.00 sec)

  27. mysql>
复制代码
由于模板和主机都存储在hosts表中,hosts_templates表可以通过hostid或templateid与hosts表进行关联。这种设计允许灵活地管理主机和模板之间的关系,包括创建层次化的模板结构,其中父模板的设置可以被子模板继承。
下面我们来看一个简单的例子,服务器mysqlu01映射了两个模板,如下所示:
  1. mysql> select hostid from hosts where name='mysqlu01';
  2. +--------+
  3. | hostid |
  4. +--------+
  5. |  10556 |
  6. +--------+
  7. 1 row in set (0.00 sec)

  8. mysql> select * from  hosts_templates where hostid=10556;
  9. +----------------+--------+------------+-----------+
  10. | hosttemplateid | hostid | templateid | link_type |
  11. +----------------+--------+------------+-----------+
  12. |            460 |  10556 |      10001 |         0 |
  13. |            461 |  10556 |      10316 |         0 |
  14. +----------------+--------+------------+-----------+
  15. 2 rows in set (0.00 sec)

  16. mysql> select name,host from hosts where hostid in(10001,10316);
  17. +-----------------------+-----------------------+
  18. | name                  | host                  |
  19. +-----------------------+-----------------------+
  20. | Linux by Zabbix agent | Linux by Zabbix agent |
  21. | MySQL by Zabbix agent | MySQL by Zabbix agent |
  22. +-----------------------+-----------------------+
  23. 2 rows in set (0.00 sec)

  24. mysql>
复制代码
上面例子可以很清楚的展示了模板与主机的关联关系。这里就不做过多阐述了。
另外一个问题,既然hosts中保存了主机和模板的数据,那么它通过哪一个字段来表示区分数据是模板数据还是主机数据呢?其实它是通过hosts中的字段status来区分的。其中status 代表主机的状态:它有三个值,0 表示正常监控,1表示未被监控(disable状态), 3表示该主机是模板。
备注:不清楚是否有状态为2的记录。
我们可以验证一下,例如,在Zabbix的主页,它提示模板数量有315个,如下所示,那么
  1. mysql>  select count(*) from hosts where status=3;
  2. +----------+
  3. | count(*) |
  4. +----------+
  5. |      315 |
  6. +----------+
  7. 1 row in set (0.00 sec)

  8. mysql>
复制代码
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
来源:https://www.cnblogs.com/kerrycode/p/18473773
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具