Zabbix通过SQL语句从数据库获取数据说明

## 1、Zabbix databases说明
Zabbix可以直接由zabbix后台数据库获取历史数据,适用于一次性大规模的取出大量主机大量监控项的大批数据。
### 1.1、相关表说明
#### 1.1.1、history系列表
history系列表是按照数据类型分别存储历史数据的,表中只包含itemid、clock、value等数据,表中数据以update interval为时间间隔:
- zabbix.history 存放浮点型数据
- zabbix.history_log 存放日志类型数据
- zabbix.history_str 存放字符型数据(最大不超过255个字节)
- zabbix.history_text 存放文本数据
- zabbix.history_unit 存放无符号整形数据

#### 1.1.2、trends系列表
trends系列表是以数据类型来分别存储历史数据的统计结果的,表中只包含itemid、clock、value_min、value_avg、value_max等数据,表中数据以小时为时间间隔,存储每小时的最小、最大和平均值。
- zabbix.trends 存放浮点型数据
- zabbix.trends_unit 存放无符号整形数据

在trends系列表中character、log、text类型是没有历史统计结果的。

#### 1.1.3、重要的表以及表字段
history、trends需要与items、hosts、hosts_groups、groups表关联来获取item名称、host名称、组别等。

##### 1.1.3.1、hosts表
hosts表存放的是主机的信息,比较重要的字段如下:
- hosts.hostid 主机id
- hosts.host 主机名
- hosts.status 主机状态 0为正常监控,1为关闭,3表示是个Template,5尚不不清楚。

##### 1.1.3.2、hosts_groups表
hosts_groups表是主机和主机组的中间表,主要描述主机和主机组的关系。
- hosts_group.hostid 主机id
- hosts_group.groupid 所属组id

##### 1.1.3.3、groups表
groups表是主机组表,存放主机组的相关信息,重要字段如下:
- groups.groupid 组id
- groups.name 组名

##### 1.1.3.4、items表
items表是监控项表,主要存放需要监控的监控项信息,重要字段如下:
- items.itemid 监控项id
- items.hostid 监控项所在主机id
- items.name 监控项别名
- items.key_ 监控项标准名称
- items.value_type 值类型
- items.delay 取数时间间隔
- items.history 历史表数据保留天数
- items.trends 历史统计表数据保留天数
- items.units 数据单位

另外items表中的value_type与history(主要是为了存取效率将不同的值存不同的history表中)的对应关系如下:

| value_type | history表 |
|--------|--------|
| 0 | history |
| 1 | history_str |
| 2 | history_log |
| 3 | history_uint |
| 4 | history_text |

### 1.2、获取监控数据说明
Zabbix通过专用的Agent或SNMP收集相关的监控数据,然后存储到数据库里实时在前台展示。Zabbix监控数据主要分为以下两类:
- 历史数据: history系列表,存放监控项目存储监控数据的原始数据。
- 趋势数据: trends系列表,存放趋势数据,趋势数据是经过Zabbix计算的数据,数据是从history系列表中汇总的,从trends系列表中可以查看到监控数据每小时最大,最小和平均值,即存储监控数据的汇总数据。

从Zabbix数据库中查询监控项目方法,这里以查询主机每1分钟CPU负载为例子:
1. 通过hosts表查找主机的ID:
`mysql> select host,hostid from hosts where host="Zabbix server";`
比如,查到主机的ID为:`10084`
2. 通过items表查找主机的监控项的key以及itemid:
`SELECT itemid,`name`,KEY_ from items where hostid='10084' AND key_='system.cpu.load[percpu,avg1]';`
比如,查到的itemid为:`23296`
3. 通过itemid查询主机的监控项目(history系列表或者trends系列表):
`SELECT from_unixtime(clock) as DateTime,`value` as Processer_load_per_sec from history WHERE itemid='23296' ORDER BY clock DESC LIMIT 1;`
就查询到了每分钟CPU负载的值。

### 1.3、常见监控项说明

| 监控项名称|描述|
|------|------|
|system.cpu.load[all,avg1]|系统平均负载(1分钟)|
|system.cpu.load[all,avg5]|系统平均负载(5分钟)|
|system.cpu.load[all,avg15]|系统平均负载(15分钟)|
|system.cpu.util[,user]|CPU利用率(用户)|
|system.cpu.util[,system]|CPU利用率(系统)|
|vm.memory.size[total]|内存(总)|
|vm.memory.size[used]|内存(使用)|
|vm.memory.size[cached]|内存(已缓存)|
|system.swap.in[,pages]|内存(SWAP)|
|vfs.fs.size[/,total]|磁盘(总容量)|
|vfs.fs.size[/,free]|磁盘(剩余容量)|
|system.uptime|服务器运行时间|

posted on 2018-12-07 10:14  大龄小技术  阅读(2259)  评论(0编辑  收藏  举报

导航