没有合适的资源?快使用搜索试试~ 我知道了~
首页zabbix数据库表结构分析
zabbix数据库表结构分析
需积分: 47 81 下载量 55 浏览量
更新于2023-03-16
评论 3
收藏 468KB PDF 举报
zabbix数据库表结构分析,通过此文档,可以详细的了解zabbix3.0的数据库表结构
资源详情
资源评论
资源推荐
第1章 Zabbix 数据库表结构解析
由于 Zabbix 前端效率极低,大批量更新会造成 oracle tx 锁,所以对于这种大批量的更新,
一般都用数据库语句直接 update。想过通过 patch php 代码的方法来解决这个问题(Zabbix 本
身的类似问题就是这样解决的),但是 php 一个是不会,一个是太长。而且,数据 update 快。
这样就需要对 Zabbix 数据库的数据结构有清晰的了解。
另一方面,Zabbix 收集了大量的裸数据,其他人可以通过这些数据来进行分析,同样,也
需要了解数据库的结构。
在使用过程中,我们也是摸石头过河,一边摸索一边使用。这里会对 Zabbix 数据库的表结
构和常用的操作做一些说明。
注意:
Zabbix 数据库中的表的名称都是复数,比如存放 Host 信息的表的名字是 Hosts 等。
数据库操作有风险,一旦出问题会造成 Zabbix crash。需要谨慎操作。
普通的查询可以在备库上进行。两边数据是实时同步的。
1.1 表结构概述
Zabbix 的数据库设计是很有特点的,针对 Zabbix 中的每一个资源,都有一张表与其对应,
比如 hosts 表,items 表等。而这每一张表中,都有一个 id 字段,比如 hosts 表中有 hostid 列,
items 表中有 itemid 列。而资源之间的关联关系,是通过外键来完成的。比如 host 和 item 的
关联关系,就是在 items 表中使用 hostid 与 hosts 表中的资源进行关联的。
下面就以 hostid 来举例说明,其他 itemid,trigger 等都类似。
hostid 是每一个 host 的唯一标识,我们从数据库查询的时候,一般都是以 hostid 为查询条件。
我们点开一个 host,然后看 URL:
http://192.168.201.234/zabbix/hosts.php?form=update&hostid=10108&groupid=0&sid=27716d11
b8954723
我们可以看到 URL 里的 GET 参数有这几个:
1. form:表示当前页面的操作,这里的 update 是因为我是从 Configuration-Hosts 中点击 host
进入的,所以是一个更新的操作
2. hostid:点击的 host 的 hostid
3. groupid:这里不需要 groupid 这个字段,所以这个 0 没有意义
4. sid:sessionid,标识用户用的
这里顺便说一句,Zabbix 的前端界面的 URL,会有很多像上面的 URL 那样。有的是 itemid,
有的是 triggerid,我们更改一下这个 id,就自然能够跳转到对应的界面上去了。这一点正是
Zabbix 的灵活之处,再我们进行二次开发的时候,非常有用。
有的朋友要说了,我只要用好 Zabbix 就行了,不想去了解 Zabbix 的数据库表结构,觉得没
必要也没用。其实非也,从 Zabbix 数据库的表结构,我们可以知道 Zabbix 资源的数据结构。
另外,活用 SQL 查询 Zabbix 数据库,能够提升我们的效率,举个例子,我们想看某个机房
的网卡出口流量之和,怎么办呢?我们可以很复杂的定义一个 aggregate 类型的 item,然后
在前端点来点去。但是如果我们用 SQL,就一条 SQL 就可以非常简单的解决问题。
另一方面,Zabbix 的水平高低,或者说是否真正了解 Zabbix 的一个非常大的标志,就是是
否了解 Zabbix 的数据库。大家可能看这一节很吃力,但没关系,如果是刚接触 Zabbix 不久,
这也是正常的,可以先看一遍留个印象,等之后对 Zabbix 有了些了解以后再来仔细看看。
1.2 Hosts 表
“Host”就是指一台被监控的机器。我们先看 Hosts 表结构,如下:
mysql> desc hosts;
+--------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------------------+---------------------+------+-----+---------+-------+
| hostid | bigint(20) unsigned | NO | PRI | NULL | |
| proxy_hostid | bigint(20) unsigned | YES | MUL | NULL | |
| host | varchar(64) | NO | MUL | | |
| status | int(11) | NO | MUL | 0 | |
| disable_until | int(11) | NO | | 0 | |
| error | varchar(128) | NO | | | |
| available | int(11) | NO | | 0 | |
| errors_from | int(11) | NO | | 0 | |
| lastaccess | int(11) | NO | | 0 | |
| ipmi_authtype | int(11) | NO | | 0 | |
| ipmi_privilege | int(11) | NO | | 2 | |
| ipmi_username | varchar(16) | NO | | | |
| ipmi_password | varchar(20) | NO | | | |
| ipmi_disable_until | int(11) | NO | | 0 | |
| ipmi_available | int(11) | NO | | 0 | |
| snmp_disable_until | int(11) | NO | | 0 | |
| snmp_available | int(11) | NO | | 0 | |
| maintenanceid | bigint(20) unsigned | YES | MUL | NULL | |
| maintenance_status | int(11) | NO | | 0 | |
| maintenance_type | int(11) | NO | | 0 | |
| maintenance_from | int(11) | NO | | 0 | |
| ipmi_errors_from | int(11) | NO | | 0 | |
| snmp_errors_from | int(11) | NO | | 0 | |
| ipmi_error | varchar(128) | NO | | | |
| snmp_error | varchar(128) | NO | | | |
| jmx_disable_until | int(11) | NO | | 0 | |
| jmx_available | int(11) | NO | | 0 | |
| jmx_errors_from | int(11) | NO | | 0 | |
| jmx_error | varchar(128) | NO | | | |
| name | varchar(64) | NO | MUL | | |
批注 [d1]: 改下结构
| flags | int(11) | NO | | 0 | |
| templateid | bigint(20) unsigned | YES | MUL | NULL | |
+--------------------+---------------------+------+-----+---------+-------+
hostid:唯一标识 Host 在 Zabbix 及数据库的 id。不同表之间的关联也是用的 id。和这
个类似,Zabbix 中任意一种资源都有自己的 id,比如 itemid,groupid 等。
proxy_hostid:如果使用了‘Proxy-Server’架构,这个字段表示的是监控这台机器的 Proxy
的 hostid。有一点需要注意,每个 Proxy 在 Hosts 表里有两条记录(其他 Host 只有一条
记录),一条是和普通机器一样的、作为被监控机器的记录;另一条记录是作为 Proxy
的。作为 Proxy 的那条记录,ip 字段的值为“0.0.0.0”。 proxy_hostid 中的值就是 Proxy
记录中的 hostid。举个例子,我有一台 Proxy 的 ip 为 1.2.3.4,那么在 Hosts 表里有两条
记录,一个是 ip 为“ 1.2.3.4”的记录,hostid 为“ 1”;另一个是 ip 为“ 0.0.0.0”的记录,
hostid 为“2”。在这个背景下,有一台机器,他的 proxy 是之前提到的那台机器,那么
他在 Hosts 表中的 proxy_hostid 的值为“2”。
host:机器的 hostname。注意,在 1.8.8(即我们使用的)版本的 Zabbix 中,如果有两
台 hostname 一样的机器,那么 Zabbix 会 crash 直接退出。之后在 1.8.10(记不清了)取
消了这个功能。其实我也觉得这功能挺脑残的。
dns:DNS 名称。
useip:是否用 ip 监控。
port:监控使用的端口。
status:机器目前的状态。“0”为正常监控,“1”为 disable。“ 2”不清楚,从数据库里
找不到 status 为“ 2”的机器。google 了下,这个好像是 Zabbix 自身的一个 host available
检查有关。“3”表示是个 Template。(是不是很奇怪为啥 Template 也在 Hosts 表中?其
实 Template 就是个 Host。详细的以后再说)
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”。
lastaccess:这一列是专门为 proxy 准备的(如上文 ip 为“ 0.0.0.0”)。 lastaccess 表示的是
proxy 最后一次工作的时间。这里的“工作”指 Zabbix Server 收到 Proxy 数据。
inbytes,outbytes:不知道有什么用,1.8.8 的代码中也没有找到使用这两个字段的代码。
我估计是 Zabbix 以后会使用的。
useipmi,ipmi_*(除 8.中提到的):使用 IPMI 时后的参数。不展开说。
snmp_*(除 8.中提到的):同上,SNMP 参数。
maintenanceid,maintenance_*:这是 Zabbix 另一个机制 Maintaince 有关,用于使 Host
置于维护状态而不会报警。
常用操作
前面只讲了 Hosts 一张表,所以这里只能介绍一些针对 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';
enable/disable host:
update hosts set status='0' where host='Host_To_Enable';
update hosts set status='1' where host='Host_To_Disable';
1.3 Items 表
Items 表也是 Zabbix 的核心表之一,它记录了 Item 的所有设置。我们知道,在 Zabbix 中,
我们做多的操作就是对于 items 的了,添加监控项,删除监控项,更新监控项配置等等。这
一节中,我们一起看下 Item 在数据库存储的表——items 表。
首先我们看一下表结构:
+-----------------------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO | PRI | NULL | |
| type | int(11) | NO | | 0 | |
| snmp_community | varchar(64) | NO | | | |
| snmp_oid | varchar(255) | NO | | | |
| hostid | bigint(20) unsigned | NO | MUL | NULL | |
| name | varchar(255) | NO | | | |
| key_ | varchar(255) | NO | | | |
| delay | int(11) | NO | | 0 | |
| history | int(11) | NO | | 90 | |
| trends | int(11) | NO | | 365 | |
| status | int(11) | NO | MUL | 0 | |
| value_type | int(11) | NO | | 0 | |
| trapper_hosts | varchar(255) | NO | | | |
| units | varchar(255) | NO | | | |
| multiplier | int(11) | NO | | 0 | |
| delta | int(11) | NO | | 0 | |
| snmpv3_securityname | varchar(64) | NO | | | |
| snmpv3_securitylevel | int(11) | NO | | 0 | |
| snmpv3_authpassphrase | varchar(64) | NO | | | |
| snmpv3_privpassphrase | varchar(64) | NO | | | |
| formula | varchar(255) | NO | | 1 | |
| error | varchar(128) | NO | | | |
| lastlogsize | bigint(20) unsigned | NO | | 0 | |
| logtimefmt | varchar(64) | NO | | | |
| templateid | bigint(20) unsigned | YES | MUL | NULL | |
| valuemapid | bigint(20) unsigned | YES | MUL | NULL | |
| delay_flex | varchar(255) | NO | | | |
| params | text | NO | | NULL | |
| ipmi_sensor | varchar(128) | NO | | | |
| data_type | int(11) | NO | | 0 | |
剩余19页未读,继续阅读
qq_33254669
- 粉丝: 1
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- RTL8188FU-Linux-v5.7.4.2-36687.20200602.tar(20765).gz
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0