Zabbix

Zabbix

Zabbix支持的主要监控方式

Zabbix主要有Agent, Trapper, SNMP, JMX, IPMI这几种监控方式,下面主要就监控原理和优缺点介绍一下这几种方式。

Zabbix支持的主要监控方式

Agent监控方式

在Agent监控方式下,zabbix-agent会主动收集本机的监控信息并通过TCP协议与zabbix-server传递信息。Agent监控方式分为主动和被动模式。在被动模式下,zabbix-agent监听10050端口,等待zabbix-server的监控信息收集信息请求;在主动模式下,zabbix-agent收集监控信息并通过10050端口主动将数据传给zabbix-server所在服务器的10051端口。

优点:

  1. 是zabbix最常用的监控方式,监测指标深入细致有针对性。
  2. 内置监控功能强大,内置监控项目丰富。
  3. TCP方式实现通讯,可靠性也有保证。

缺点:

  1. 需要在被监控机器上安装zabbix-agent客户端,部署相对麻烦,最初需要逐个机器安装代理软件。
  2. zabbix-agent客户端运行在被监控机上,会收集本机信息。

Trapper监控方式

Trapper监控方式使用zabbix-sender程序主动向zabbix-server发送数据。key的名称和发送的数据内容都可以灵活定义。发送的信息采用JSON格式,遵循zabbix-sender协议。可以自定义脚本利用zabbix-sender协议来向zabbix-server发送信息。

优点:

  1. 不需要在被监控机器安装zabbix-agent
  2. 不收集被监控机器的信息
  3. 可以自定义发送的信息内容
  4. 可以使用自定义脚本发送信息

缺点:

  1. 需要自定义发送的信息内容
  2. 无内置监控项目

SNMP监控方式

SNMP全称Simple Network Management Protocol,即网络管理协议,包括进程管理和被管理设备两部分。作为一种国际通用的网络管理协议被广泛的应用于对各种交换机,路由器等网络设备的管理上,而现在也越来越多被用于对服务器的监控上。

优点:

  1. 服务器一旦部署SNMPAgent,任何能实现SNMP协议的软件都可对其进行监测。
  2. 通过这种手段进行监测不需知道被监测服务器的用户名与密码,比较安全。

缺点:

  1. 很多服务器并非默认安装SNMPAgent,如果要通过这种方式监测则需要对所有服务器安装部署。
  2. 能监测的参数指标比较固定不够深入,无法满足用户的特殊需求。
  3. 由于SNMP协议是通过UDP方式实现的,在网络状况不佳的情况下其可靠性难以保证。

JMX监控方式

JMX,全称Java Management Extensions,即Java管理拓展,是Java平台为应用程序,设备,系统等植入管理功能的框架。在zabbix中,JMX数据的获取由zabbix-java-gateway代理程序来负责数据的采集。

优点:

  1. 可以详细地监控各类Java程序的运行状态。

缺点:

  1. 被监控机上需要安装zabbix-java-gateway

IPMI监控方式

IPMI,全称Intelligent Platform Management Interface,即智能平台管理接口,原本是Intel架构中企业系统的周边设备所采用的一种工业标准,后来成为业界通用的标准。用户可以利用IPMI监视服务器的物理特征,如温度,电压,电扇工作状态,电源供应以及机箱入侵等指标。

结论

根据以上对zabbix各主要监控方式的梳理,结论如下:

  1. 根据被监控机器的环境和客户要求选用适当的监控方式,可同时配合使用多种监控方式。

  2. 有条件在被监控机上部署zabbix-agent客户端时,该方法为第一选择,因为其功能强大且配置相对简便。

  3. 需要自定义脚本或者监控信息时,可使用trapper方式,即使用zabbix-sender程序或者自定义脚本遵循zabbix-sender协议,以JSON形式,通过TCP发送自定义信息。

安装 zabbix server

查看编译参数

/usr/local/zabbix-3.0.30/config.log

[root@RHEL zabbix-2.2.18]# ps -ef | grep zabbix | grep -v "grep"
zabbix   10167     1  0 06:08 ?        00:00:00 zabbix_server
zabbix   10188     1  0 06:10 ?        00:00:00 zabbix_agentd
zabbix   10189 10188  0 06:10 ?        00:00:00 zabbix_agentd: collector [idle 1 sec]
zabbix   10190 10188  0 06:10 ?        00:00:00 zabbix_agentd: listener #1 [waiting for connection]
zabbix   10191 10188  0 06:10 ?        00:00:00 zabbix_agentd: listener #2 [waiting for connection]
zabbix   10192 10188  0 06:10 ?        00:00:00 zabbix_agentd: listener #3 [waiting for connection]
zabbix   10193 10188  0 06:10 ?        00:00:00 zabbix_agentd: active checks #1 [idle 1 sec]
[root@RHEL zabbix-2.2.18]#

启动

service zabbix_server restart
service zabbix_server start
service zabbix_server stop

service zabbix_agentd restart
service zabbix_agentd start
service zabbix_agentd stop

WEB

http://192.168.237.137/zabbix/index.php
#登陆zabbix,默认用户名:Admin,密码:zabbix

中文:
Profile -> Chiness(zh_CN) -> Save
每页行数    250

新创建的用户每页默认行数:
/var/www/html/zabbix/include/forms.inc.php
$data['rows_per_page']    = getRequest('rows_per_page', 50);

虽然整个界面是中文,但是图形的中文会出现乱码:
cp simkai.ttf /var/www/html/zabbix/fonts/
sed -i 's/DejaVuSans/simkai/g' /var/www/html/zabbix/include/defines.inc.php

安装 zabbix agents

Linux:

1 将zabbix_agents_linux目录复制到/usr/local/目录下
2 cd /usr/local/zabbix_agents_linux
3 无需解压,直接执行:sh start_zabbix_agentd.sh

Windows:

1 将zabbix_agents_win目录复制到任意目录下
2 进入zabbix_agents_win目录,解压.zip并替换zabbix_agentd.win.conf
3 Windows Server 2003执行win32_zabbix_agentd_install_start.bat
Windows Server 2008执行win64_zabbix_agentd_install_start.bat

其他

常用查询

./zabbix_get -s10.36.40.137 -k system.uname

[root@RHEL bin]# ./zabbix_get -s10.36.40.137 -k system.uname
Windows WIN-S6S9QBKP8GD 6.1.7601 Microsoft Windows Server 2008 R2 Enterprise  Service Pack 1 x64

[root@RHEL bin]# ./zabbix_get -s10.36.40.174 -k system.uname
Linux localhost.localdomain 2.6.32-358.el6.x86_64 #1 SMP Tue Jan 29 11:47:41 EST 2013 x86_64

自定义UserParameter

自定义用户参数,也就是自定义key,有时候当我们运行的监控项目在zabbix预定义的key中没有定义时,就需要我们手动编写zabbix用户参数来监控要定义的项目。需要在zabbix agent端把相关获取参数的命令写入到配置文件zabbix_angentd.confzabbix_agentd.d/xxx.confUserParameter中,

定义方法如下:

UserParameter=key[*],command

注意:一个用户参数包含一个key和一个命令,在配置监控项时,key是唯一的不能与其他自定义key重名,并且在配置完成后,需要重启zabbix-agent服务

参数 描述
Key 唯一. [*]表示里面可以传递多个参数
Command 需要执行的脚本,key的[]里面的参数一一对应$1到$9,一共9个参数。$0表示脚本命令.

注意事项

  1. 如果需要使用命令行里面出现$2这种变量,那么你要使用两个$$,例如awk '{ print $$2 }',之前就遇到过这个问题,不停的测试自己脚本输出正常,但是zabbix却拿不到数据,原来是出在这里。为了防止和参数冲突,所以zabbix做了这个规定。
  2. zabbix禁止使用一些不安全的参数,如下:
    \ ' ” ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @
  3. 从zabbix 2.0开始,zabbix返回文本数据可以是空格。

名称解释

rrqm/s : Dick $1 每秒合并读操作的次数  io.rrqmps[{#DISK_NAME}]
wrqm/s : Dick $1 每秒合并写操作的次数  io.wrqmps[{#DISK_NAME}]
r/s :Dick $1 每秒读操作的次数  io.rps[{#DISK_NAME}]
w/s : Dick $1 每秒写操作的次数  io.wps[{#DISK_NAME}]
rMB/s :Dick $1 每秒读取的MB字节数  io.rMBps[{#DISK_NAME}]
wMB/s :Dick $1 每秒写入的MB字节数  io.wMBps[{#DISK_NAME}]
avgrq-sz:每个IO的平均扇区数,即所有请求的平均大小,以扇区(512字节)为单位
avgqu-sz:平均为完成的IO请求数量,即平均意义山的请求队列长度
await:平均每个IO所需要的时间,包括在队列等待的时间,也包括磁盘控制器处理本次请求的有效时间。
svctm: 表面看是每个IO请求的服务时间,不包括等待时间,但是实际上,这个指标已经废弃。实际上,iostat工具没有任何一输出项表示的是硬盘设备平均每次IO的时间。
%util: 工作时间或者繁忙时间占总时间的百分比

数据库表

所有表

mysql> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |actions表记录了当触发器触发时,需要采用的动作。
| alerts                     |alerts 表保存了历史的告警事件,可以从这个表里面去做一些统计分析,例如某个部门、某人、某类时间的告警统计,以及更深入的故障发生、恢复时间,看你想怎么用了。
| application_discovery      |
| application_prototype      |
| application_template       |
| applications               |
| auditlog                   |
| auditlog_details           |
| autoreg_host               |
| conditions                 |
| config                     |config表保存了全局的参数,前端包括后端也是,很多情况下会查询改表的参数的,例如用户的自定义主题、 登陆认证类型等,非常重要,不过对我们做数据分析意义不大。
| dbversion                  |
| dchecks                    |
| dhosts                     |
| drules                     |
| dservices                  |
| escalations                |
| events                     |
| expressions                |
| functions                  |function 表时非常重要的一个表了,记录了trigger中使用的表达式,例如max、last、nodata等函数。
但其实这个表说他重要时因为同时记录了trigger、itemid,那就可以做一些API的开发了,
例如根据IP 茶香改IP的所有trigger,我记得1.8的版本的API是无法实现我说的这个功能的,那只能利用function表去自己查询了。
| globalmacro                |
| globalvars                 |
| graph_discovery            |
| graph_theme                |
| graphs                     |graphs 表包含了用户定义的图表信息,同样的玩法可以是根据IP去查询改IP下的所有图表, 不过似乎是有API的,我只是举例而已。
| graphs_items               |graphs_items 保存了属于某个图表的所有的监控项信息。
| group_discovery            |
| group_prototype            |
| groups                     |groups 没啥说的,都懂,就是保存了组名和组的ID 。
| history                    |history 、history_str、history_log 、history_uint_sync等
这部分表都差不多,唯一不同的是保存的数据类型,history_str保存的数据类型就算str即字符类型的。这个是和采集时设置的数据类型一致的。
需要注意的时,因为history表有这么多的类型,那自己写报表系统等去查询数据时,就需要判断下数据的采集类型,如果查错了表,那肯定时没有数据的。
接收item值时的时间值存放在两个字段内,大于1秒的部分存放找clock字段单位是秒(s),小于一秒的部分存放在ns字段单位是纳秒(ns)。
两个字段相加的值才是接收item值时的时间值,一般不用关心小于1秒的部分。
| history_log                |
| history_str                |
| history_text               |
| history_uint               |
| host_discovery             |
| host_inventory             |
| hostmacro                  |
| hosts                      |hosts 非常重要,保存了每个agent、proxy等的IP 、hostid、状态、IPMI等信息,几乎是记录了一台设备的所有的信息。
当然hostid是当中非常非常重要的信息,其他的表一般都时关联hostid的。
| hosts_groups               |hosts_groups 保存了host(主机)与host groups(主机组)的关联关系。
这部分信息可以在我们自己做一些批量查询,例如查询关联到某个主机组的所有设备的IP 、存活状态等,进一步去查询该批量设备的load、IO、mem等统计信息。
我之前做的一个简单的报表就是例如了这部分的信息去查询某个业务线下所有设备的一周统计信息,当然了是在同一个主机组或者模版组才可以的。
| hosts_templates            |保存了host(主机)与templates(模板)的关联关系
| housekeeper                |
| httpstep                   |
| httpstepitem               |
| httptest                   |
| httptestitem               |
| icon_map                   |
| icon_mapping               |
| ids                        |
| images                     |
| interface                  |
| interface_discovery        |
| item_application_prototype |
| item_condition             |
| item_discovery             |
| items                      |items 表保存了采集项的信息。
| items_applications         |
| maintenances               |
| maintenances_groups        |
| maintenances_hosts         |
| maintenances_windows       |
| mappings                   |
| media                      |media 保存了某个用户的media配置项,即对应的告警方式。
| media_type                 |media_type 表与media 表不同的是media_type 记录了某个告警方式对应的脚步等的存放路径。media 与media_type 通过mediatypeid 键关联。
| opcommand                  |
| opcommand_grp              |
| opcommand_hst              |
| opconditions               |
| operations                 |
| opgroup                    |
| opinventory                |
| opmessage                  |
| opmessage_grp              |
| opmessage_usr              |
| optemplate                 |
| profiles                   |profiles 表保存了用户的一些配置项。
| proxy_autoreg_host         |
| proxy_dhistory             |
| proxy_history              |
| regexps                    |
| rights                     |rights 表保存了用户组的权限信息,zabbix的权限一直也是我理不太清的地方,其实这个表里面有详细的记录。
| screen_user                |
| screen_usrgrp              |
| screens                    |screens 表保存了用户定义的图片(即聚合图形)。
| screens_items              |同graphs_items。保存了属于某个聚合图形的所有的监控项信息。
| scripts                    |
| service_alarms             |
| services                   |
| services_links             |
| services_times             |
| sessions                   |sessions 表很重要,保存了每个用户的sessions,在登陆、注销的时候均会操作该张表的。做cas等统一认证时,需要了解下该表和相关的登陆、验证流程。有兴趣的看我前面的文章吧。
| slides                     |
| slideshow_user             |
| slideshow_usrgrp           |
| slideshows                 |
| sysmap_element_url         |
| sysmap_url                 |
| sysmap_user                |
| sysmap_usrgrp              |
| sysmaps                    |
| sysmaps_elements           |
| sysmaps_link_triggers      |
| sysmaps_links              |
| timeperiods                |
| trends                     |trends、trends_uint
trends 也是保存了历史数据用的,和history不同的是,trends表仅仅保存了小时平均的值,即你可以理解为是history表的数据压缩。所以trends表也有
很多的类型,对应history。
值的注意的trends和history表这两类表数据量都非常大,我们一天大概就要有40G 的数据。所以注意定是去做压缩、删除。
| trends_uint                |
| trigger_depends            |trigger_depends 保存了trigger的依赖关系。
| trigger_discovery          |保存了trigger的父trigger。
| triggers                   |triggers 顾名思义保存了trigger(触发器)的所有信息。
| users                      |不需要解释了,值的一提的部分用户配置会在该表中,例如auotlogin、autologout、url、theme等信息。
| users_groups               |用户与组的关系
| usrgrp                     |用户组
| valuemaps                  |
+----------------------------+

actions

actions表记录了当触发器触发时,需要采用的动作。

mysql> desc actions;
+---------------+---------------------+------+-----+---------+-------+
| Field         | Type                | Null | Key | Default | Extra |
+---------------+---------------------+------+-----+---------+-------+
| actionid      | bigint(20) unsigned | NO   | PRI | 0       |       |
| name          | varchar(255)        | NO   |     |         |       |
| eventsource   | int(11)             | NO   | MUL | 0       |       |
| evaltype      | int(11)             | NO   |     | 0       |       |
| status        | int(11)             | NO   |     | 0       |       |
| esc_period    | int(11)             | NO   |     | 0       |       |
| def_shortdata | varchar(255)        | NO   |     |         |       |
| def_longdata  | blob                | NO   |     | NULL    |       |
| recovery_msg  | int(11)             | NO   |     | 0       |       |
| r_shortdata   | varchar(255)        | NO   |     |         |       |
| r_longdata    | blob                | NO   |     | NULL    |       |
+---------------+---------------------+------+-----+---------+-------+

alerts

alerts 表保存了历史的告警事件,可以从这个表里面去做一些统计分析,例如某个部门、
某人、某类时间的告警统计,以及更深入的故障发生、恢复时间,看你想怎么用了。

mysql> desc alerts;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| alertid     | bigint(20) unsigned | NO   | PRI | 0       |       |
| actionid    | bigint(20) unsigned | NO   | MUL | 0       |       |
| eventid     | bigint(20) unsigned | NO   | MUL | 0       |       |
| userid      | bigint(20) unsigned | NO   | MUL | 0       |       |
| clock       | int(11)             | NO   | PRI | 0       |       |
| mediatypeid | bigint(20) unsigned | NO   | MUL | 0       |       |
| sendto      | varchar(100)        | NO   |     |         |       |
| subject     | varchar(255)        | NO   |     |         |       |
| message     | blob                | NO   |     | NULL    |       |
| status      | int(11)             | NO   | MUL | 0       |       |
| retries     | int(11)             | NO   |     | 0       |       |
| error       | varchar(128)        | NO   |     |         |       |
| nextcheck   | int(11)             | NO   |     | 0       |       |
| esc_step    | int(11)             | NO   |     | 0       |       |
| alerttype   | int(11)             | NO   |     | 0       |       |
+-------------+---------------------+------+-----+---------+-------+

config

config表保存了全局的参数,前端包括后端也是,很多情况下会查询改表的参数的,例如用户的自定义主题、
登陆认证类型等,非常重要,
不过对我们做数据分析意义不大。

mysql> desc config;
+-------------------------+---------------------+------+-----+-----------------+-------+
| Field                   | Type                | Null | Key | Default         | Extra |
+-------------------------+---------------------+------+-----+-----------------+-------+
| configid                | bigint(20) unsigned | NO   | PRI | 0               |       |
| alert_history           | int(11)             | NO   |     | 0               |       |
| event_history           | int(11)             | NO   |     | 0               |       |
| refresh_unsupported     | int(11)             | NO   |     | 0               |       |
| work_period             | varchar(100)        | NO   |     | 1-5,00:00-24:00 |       |
| alert_usrgrpid          | bigint(20) unsigned | NO   |     | 0               |       |
| event_ack_enable        | int(11)             | NO   |     | 1               |       |
| event_expire            | int(11)             | NO   |     | 7               |       |
| event_show_max          | int(11)             | NO   |     | 100             |       |
| default_theme           | varchar(128)        | NO   |     | default.css     |       |
| authentication_type     | int(11)             | NO   |     | 0               |       |
| ldap_host               | varchar(255)        | NO   |     |                 |       |
| ldap_port               | int(11)             | NO   |     | 389             |       |
| ldap_base_dn            | varchar(255)        | NO   |     |                 |       |
| ldap_bind_dn            | varchar(255)        | NO   |     |                 |       |
| ldap_bind_password      | varchar(128)        | NO   |     |                 |       |
| ldap_search_attribute   | varchar(128)        | NO   |     |                 |       |
| dropdown_first_entry    | int(11)             | NO   |     | 1               |       |
| dropdown_first_remember | int(11)             | NO   |     | 1               |       |
| discovery_groupid       | bigint(20) unsigned | NO   |     | 0               |       |
| max_in_table            | int(11)             | NO   |     | 50              |       |
| search_limit            | int(11)             | NO   |     | 1000            |       |
+-------------------------+---------------------+------+-----+-----------------+-------+

functions

function 表时非常重要的一个表了,记录了trigger中使用的表达式,例如max、last、nodata等函数。
但其实这个表说他重要时因为同时记录了trigger、itemid,那就可以做一些API的开发了,例如根据
IP 茶香改IP的所有trigger,我记得1.8的版本的API是无法实现我说的这个功能的,那只能利用
function表去自己查询了。

mysql> desc functions ;
+------------+---------------------+------+-----+---------+-------+
| Field      | Type                | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+-------+
| functionid | bigint(20) unsigned | NO   | PRI | 0       |       |
| itemid     | bigint(20) unsigned | NO   | MUL | 0       |       |
| triggerid  | bigint(20) unsigned | NO   | MUL | 0       |       |
| lastvalue  | varchar(255)        | YES  |     | NULL    |       |
| function   | varchar(12)         | NO   |     |         |       |
| parameter  | varchar(255)        | NO   |     | 0       |       |
+------------+---------------------+------+-----+---------+-------+

graphs

graphs 表包含了用户定义的图表信息,同样的玩法可以是根据IP去查询改IP下的所有图表,
不过似乎是有API的,我只是举例而已。

mysql> desc graphs;
+------------------+---------------------+------+-----+---------+-------+
| Field            | Type                | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+-------+
| graphid          | bigint(20) unsigned | NO   | PRI | 0       |       |
| name             | varchar(128)        | NO   | MUL |         |       |
| width            | int(11)             | NO   |     | 0       |       |
| height           | int(11)             | NO   |     | 0       |       |
| yaxismin         | double(16,4)        | NO   |     | 0.0000  |       |
| yaxismax         | double(16,4)        | NO   |     | 0.0000  |       |
| templateid       | bigint(20) unsigned | NO   |     | 0       |       |
| show_work_period | int(11)             | NO   |     | 1       |       |
| show_triggers    | int(11)             | NO   |     | 1       |       |
| graphtype        | int(11)             | NO   |     | 0       |       |
| show_legend      | int(11)             | NO   |     | 0       |       |
| show_3d          | int(11)             | NO   |     | 0       |       |
| percent_left     | double(16,4)        | NO   |     | 0.0000  |       |
| percent_right    | double(16,4)        | NO   |     | 0.0000  |       |
| ymin_type        | int(11)             | NO   |     | 0       |       |
| ymax_type        | int(11)             | NO   |     | 0       |       |
| ymin_itemid      | bigint(20) unsigned | NO   |     | 0       |       |
| ymax_itemid      | bigint(20) unsigned | NO   |     | 0       |       |
+------------------+---------------------+------+-----+---------+-------+

graphs_items

graphs_items 保存了属于某个图表的所有的监控项信息。

mysql> desc graphs_items;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| gitemid     | bigint(20) unsigned | NO   | PRI | 0       |       |
| graphid     | bigint(20) unsigned | NO   | MUL | 0       |       |
| itemid      | bigint(20) unsigned | NO   | MUL | 0       |       |
| drawtype    | int(11)             | NO   |     | 0       |       |
| sortorder   | int(11)             | NO   |     | 0       |       |
| color       | varchar(6)          | NO   |     | 009600  |       |
| yaxisside   | int(11)             | NO   |     | 1       |       |
| calc_fnc    | int(11)             | NO   |     | 2       |       |
| type        | int(11)             | NO   |     | 0       |       |
| periods_cnt | int(11)             | NO   |     | 5       |       |
+-------------+---------------------+------+-----+---------+-------+

groups

groups 没啥说的,都懂,就是保存了组名和组的ID 。

mysql> desc groups ;
+----------+---------------------+------+-----+---------+-------+
| Field    | Type                | Null | Key | Default | Extra |
+----------+---------------------+------+-----+---------+-------+
| groupid  | bigint(20) unsigned | NO   | PRI | 0       |       |
| name     | varchar(64)         | NO   | MUL |         |       |
| internal | int(11)             | NO   |     | 0       |       |
+----------+---------------------+------+-----+---------+-------+

history等

这部分表都差不多,唯一不同的是保存的数据类型,history_str保存的数据
类型就算str即字符类型的。这个是和采集时设置的数据类型一致的。

需要注意的时,因为history表有这么多的类型,那自己写报表系统等去查询
数据时,就需要判断下数据的采集类型,如果查错了表,那肯定时没有数据的。

mysql> desc history;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO   | PRI | 0       |       |
| clock  | int(11)             | NO   | PRI | 0       |       |
| value  | double(16,4)        | NO   |     | 0.0000  |       |
+--------+---------------------+------+-----+---------+-------+

mysql> desc history_str;
+--------+---------------------+------+-----+---------+-------+
| Field  | Type                | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO   | MUL | 0       |       |
| clock  | int(11)             | NO   |     | 0       |       |
| value  | varchar(255)        | NO   |     |         |       |
+--------+---------------------+------+-----+---------+-------+
接收item值时的时间值存放在两个字段内,大于1秒的部分存放找clock字段单位是秒(s),小于一秒的部分存放在ns字段单位是纳秒(ns)。

两个字段相加的值才是接收item值时的时间值,一般不用关心小于1秒的部分。

trends 也是保存了历史数据用的,和history不同的时,trends表仅仅保存了
小时平均的值,即你可以理解为是history表的数据压缩。所以trends表也有
很多的类型,对应history。

值的注意的trends和history表这两类表数据量都非常大,我们一天大概就要有
40G 的数据。

所以注意定是去做压缩、删除。

mysql> desc trends;
+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| itemid    | bigint(20) unsigned | NO   | PRI | 0       |       |
| clock     | int(11)             | NO   | PRI | 0       |       |
| num       | int(11)             | NO   |     | 0       |       |
| value_min | double(16,4)        | NO   |     | 0.0000  |       |
| value_avg | double(16,4)        | NO   |     | 0.0000  |       |
| value_max | double(16,4)        | NO   |     | 0.0000  |       |
+-----------+---------------------+------+-----+---------+-------+

mysql> desc trends_uint;
+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| itemid    | bigint(20) unsigned | NO   | PRI | 0       |       |
| clock     | int(11)             | NO   | PRI | 0       |       |
| num       | int(11)             | NO   |     | 0       |       |
| value_min | bigint(20) unsigned | NO   |     | 0       |       |
| value_avg | bigint(20) unsigned | NO   |     | 0       |       |
| value_max | bigint(20) unsigned | NO   |     | 0       |       |
+-----------+---------------------+------+-----+---------+-------+

hosts

hosts 非常重要,保存了每个agent、proxy等的IP 、hostid、状态、IPMI等信息,
几乎是记录了一台设备的所有的信息。

当然hostid是当中非常非常重要的信息,其他的表一般都时关联hostid的。

mysql> desc hosts;
+--------------------+---------------------+------+-----+-----------+-------+
| Field              | Type                | Null | Key | Default   | Extra |
+--------------------+---------------------+------+-----+-----------+-------+
| hostid             | bigint(20) unsigned | NO   | PRI | 0         |       |
| proxy_hostid       | bigint(20) unsigned | NO   | MUL | 0         |       |
| host               | varchar(64)         | NO   | MUL |           |       |
| dns                | varchar(64)         | NO   |     |           |       |
| useip              | int(11)             | NO   |     | 1         |       |
| ip                 | varchar(39)         | NO   |     | 127.0.0.1 |       |
| port               | int(11)             | NO   |     | 10050     |       |
| 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         |       |
| inbytes            | bigint(20) unsigned | NO   |     | 0         |       |
| outbytes           | bigint(20) unsigned | NO   |     | 0         |       |
| useipmi            | int(11)             | NO   |     | 0         |       |
| ipmi_port          | int(11)             | NO   |     | 623       |       |
| 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 | NO   |     | 0         |       |
| maintenance_status | int(11)             | NO   |     | 0         |       |
| maintenance_type   | int(11)             | NO   |     | 0         |       |
| maintenance_from   | int(11)             | NO   |     | 0         |       |
| ipmi_ip            | varchar(64)         | NO   |     | 127.0.0.1 |       |
| ipmi_errors_from   | int(11)             | NO   |     | 0         |       |
| snmp_errors_from   | int(11)             | NO   |     | 0         |       |
| ipmi_error         | varchar(128)        | NO   |     |           |       |
| snmp_error         | varchar(128)        | NO   |     |           |       |
+--------------------+---------------------+------+-----+-----------+-------+
其实1.0的版本中,是没有这么多的字段的,好像只有hostid、host、status、disable_until
等几个字段,但1.8已经如此丰富了。

hosts_groups

hosts_groups 保存了host(主机)与host groups(主机组)的关联关系。

这部分信息可以在我们自己做一些批量查询,例如查询关联到某个主机组的所有
设备的IP 、存活状态等,进一步去查询该批量设备的load、IO、mem等统计信息。

我之前做的一个简单的报表就是例如了这部分的信息去查询某个业务线下所有设备
的一周统计信息,当然了是在同一个主机组或者模版组才可以的。

mysql> desc hosts_groups ;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| hostgroupid | bigint(20) unsigned | NO   | PRI | 0       |       |
| hostid      | bigint(20) unsigned | NO   | MUL | 0       |       |
| groupid     | bigint(20) unsigned | NO   | MUL | 0       |       |
+-------------+---------------------+------+-----+---------+-------+

items

items 表保存了采集项的信息。

mysql> desc items ;
+-----------------------+---------------------+------+-----+---------+-------+
| Field                 | Type                | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| itemid                | bigint(20) unsigned | NO   | PRI | 0       |       |
| type                  | int(11)             | NO   |     | 0       |       |
| snmp_community        | varchar(64)         | NO   |     |         |       |
| snmp_oid              | varchar(255)        | NO   |     |         |       |
| snmp_port             | int(11)             | NO   |     | 161     |       |
| hostid                | bigint(20) unsigned | NO   | MUL | 0       |       |
| description           | varchar(255)        | NO   |     |         |       |
| key_                  | varchar(255)        | NO   |     |         |       |
| delay                 | int(11)             | NO   |     | 0       |       |
| history               | int(11)             | NO   |     | 90      |       |
| trends                | int(11)             | NO   |     | 365     |       |
| lastvalue             | varchar(255)        | YES  |     | NULL    |       |
| lastclock             | int(11)             | YES  |     | NULL    |       |
| prevvalue             | varchar(255)        | YES  |     | NULL    |       |
| status                | int(11)             | NO   | MUL | 0       |       |
| value_type            | int(11)             | NO   |     | 0       |       |
| trapper_hosts         | varchar(255)        | NO   |     |         |       |
| units                 | varchar(10)         | NO   |     |         |       |
| multiplier            | int(11)             | NO   |     | 0       |       |
| delta                 | int(11)             | NO   |     | 0       |       |
| prevorgvalue          | varchar(255)        | YES  |     | NULL    |       |
| 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           | int(11)             | NO   |     | 0       |       |
| logtimefmt            | varchar(64)         | NO   |     |         |       |
| templateid            | bigint(20) unsigned | NO   | MUL | 0       |       |
| valuemapid            | bigint(20) unsigned | NO   |     | 0       |       |
| delay_flex            | varchar(255)        | NO   |     |         |       |
| params                | text                | NO   |     | NULL    |       |
| ipmi_sensor           | varchar(128)        | NO   |     |         |       |
| data_type             | int(11)             | NO   |     | 0       |       |
| authtype              | int(11)             | NO   |     | 0       |       |
| username              | varchar(64)         | NO   |     |         |       |
| password              | varchar(64)         | NO   |     |         |       |
| publickey             | varchar(64)         | NO   |     |         |       |
| privatekey            | varchar(64)         | NO   |     |         |       |
| mtime                 | int(11)             | NO   |     | 0       |       |
+-----------------------+---------------------+------+-----+---------+-------+

media

media 保存了某个用户的media配置项,即对应的告警方式。

mysql> desc media;
+-------------+---------------------+------+-----+-----------------+-------+
| Field       | Type                | Null | Key | Default         | Extra |
+-------------+---------------------+------+-----+-----------------+-------+
| mediaid     | bigint(20) unsigned | NO   | PRI | 0               |       |
| userid      | bigint(20) unsigned | NO   | MUL | 0               |       |
| mediatypeid | bigint(20) unsigned | NO   | MUL | 0               |       |
| sendto      | varchar(100)        | NO   |     |                 |       |
| active      | int(11)             | NO   |     | 0               |       |
| severity    | int(11)             | NO   |     | 63              |       |
| period      | varchar(100)        | NO   |     | 1-7,00:00-23:59 |       |
+-------------+---------------------+------+-----+-----------------+-------+

media_type

media_type 表与media 表不同的是media_type 记录了某个告警方式对应的脚步等的存放路径。

mysql> desc media_type;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| mediatypeid | bigint(20) unsigned | NO   | PRI | 0       |       |
| type        | int(11)             | NO   |     | 0       |       |
| description | varchar(100)        | NO   |     |         |       |
| smtp_server | varchar(255)        | NO   |     |         |       |
| smtp_helo   | varchar(255)        | NO   |     |         |       |
| smtp_email  | varchar(255)        | NO   |     |         |       |
| exec_path   | varchar(255)        | NO   |     |         |       |
| gsm_modem   | varchar(255)        | NO   |     |         |       |
| username    | varchar(255)        | NO   |     |         |       |
| passwd      | varchar(255)        | NO   |     |         |       |
+-------------+---------------------+------+-----+---------+-------+

media 与media_type 通过mediatypeid 键关联。

profiles

profiles 表保存了用户的一些配置项。

mysql> desc profiles ;
+-----------+---------------------+------+-----+---------+-------+
| Field     | Type                | Null | Key | Default | Extra |
+-----------+---------------------+------+-----+---------+-------+
| profileid | bigint(20) unsigned | NO   | PRI | 0       |       |
| userid    | bigint(20) unsigned | NO   | MUL | 0       |       |
| idx       | varchar(96)         | NO   |     |         |       |
| idx2      | bigint(20) unsigned | NO   |     | 0       |       |
| value_id  | bigint(20) unsigned | NO   |     | 0       |       |
| value_int | int(11)             | NO   |     | 0       |       |
| value_str | varchar(255)        | NO   |     |         |       |
| source    | varchar(96)         | NO   |     |         |       |
| type      | int(11)             | NO   |     | 0       |       |
+-----------+---------------------+------+-----+---------+-------+

rights

rights 表保存了用户组的权限信息,zabbix的权限一直也是我理不太清的地方,
其实这个表里面有详细的记录。

mysql> desc rights;
+------------+---------------------+------+-----+---------+-------+
| Field      | Type                | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+-------+
| rightid    | bigint(20) unsigned | NO   | PRI | 0       |       |
| groupid    | bigint(20) unsigned | NO   | MUL | 0       |       |
| permission | int(11)             | NO   |     | 0       |       |
| id         | bigint(20) unsigned | YES  | MUL | NULL    |       |
+------------+---------------------+------+-----+---------+-------+

screens

screens 表保存了用户定义的图片。

mysql> desc graphs;
+------------------+---------------------+------+-----+---------+-------+
| Field            | Type                | Null | Key | Default | Extra |
+------------------+---------------------+------+-----+---------+-------+
| graphid          | bigint(20) unsigned | NO   | PRI | 0       |       |
| name             | varchar(128)        | NO   | MUL |         |       |
| width            | int(11)             | NO   |     | 0       |       |
| height           | int(11)             | NO   |     | 0       |       |
| yaxismin         | double(16,4)        | NO   |     | 0.0000  |       |
| yaxismax         | double(16,4)        | NO   |     | 0.0000  |       |
| templateid       | bigint(20) unsigned | NO   |     | 0       |       |
| show_work_period | int(11)             | NO   |     | 1       |       |
| show_triggers    | int(11)             | NO   |     | 1       |       |
| graphtype        | int(11)             | NO   |     | 0       |       |
| show_legend      | int(11)             | NO   |     | 0       |       |
| show_3d          | int(11)             | NO   |     | 0       |       |
| percent_left     | double(16,4)        | NO   |     | 0.0000  |       |
| percent_right    | double(16,4)        | NO   |     | 0.0000  |       |
| ymin_type        | int(11)             | NO   |     | 0       |       |
| ymax_type        | int(11)             | NO   |     | 0       |       |
| ymin_itemid      | bigint(20) unsigned | NO   |     | 0       |       |
| ymax_itemid      | bigint(20) unsigned | NO   |     | 0       |       |
+------------------+---------------------+------+-----+---------+-------+

screens_items

同graphs_items。

mysql> desc screens_items;
+--------------+---------------------+------+-----+---------+-------+
| Field        | Type                | Null | Key | Default | Extra |
+--------------+---------------------+------+-----+---------+-------+
| screenitemid | bigint(20) unsigned | NO   | PRI | 0       |       |
| screenid     | bigint(20) unsigned | NO   |     | 0       |       |
| resourcetype | int(11)             | NO   |     | 0       |       |
| resourceid   | bigint(20) unsigned | NO   |     | 0       |       |
| width        | int(11)             | NO   |     | 320     |       |
| height       | int(11)             | NO   |     | 200     |       |
| x            | int(11)             | NO   |     | 0       |       |
| y            | int(11)             | NO   |     | 0       |       |
| colspan      | int(11)             | NO   |     | 0       |       |
| rowspan      | int(11)             | NO   |     | 0       |       |
| elements     | int(11)             | NO   |     | 25      |       |
| valign       | int(11)             | NO   |     | 0       |       |
| halign       | int(11)             | NO   |     | 0       |       |
| style        | int(11)             | NO   |     | 0       |       |
| url          | varchar(255)        | NO   |     |         |       |
| dynamic      | int(11)             | NO   |     | 0       |       |
+--------------+---------------------+------+-----+---------+-------+

sessions

sessions 表很重要,保存了每个用户的sessions,在登陆、注销的时候均会操作
该张表的。
做cas等统一认证时,需要了解下该表和相关的登陆、验证流程。有兴趣的看我
前面的文章吧。

mysql> desc sessions;
+------------+---------------------+------+-----+---------+-------+
| Field      | Type                | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+-------+
| sessionid  | varchar(32)         | NO   | PRI |         |       |
| userid     | bigint(20) unsigned | NO   | MUL | 0       |       |
| lastaccess | int(11)             | NO   |     | 0       |       |
| status     | int(11)             | NO   |     | 0       |       |
+------------+---------------------+------+-----+---------+-------+

triggers

triggers 顾名思义保存了trigger的所有信息。

mysql> desc triggers;
+-------------+---------------------+------+-----+---------+-------+
| Field       | Type                | Null | Key | Default | Extra |
+-------------+---------------------+------+-----+---------+-------+
| triggerid   | bigint(20) unsigned | NO   | PRI | 0       |       |
| expression  | varchar(255)        | NO   |     |         |       |
| description | varchar(255)        | NO   |     |         |       |
| url         | varchar(255)        | NO   |     |         |       |
| status      | int(11)             | NO   | MUL | 0       |       |
| value       | int(11)             | NO   | MUL | 0       |       |
| priority    | int(11)             | NO   |     | 0       |       |
| lastchange  | int(11)             | NO   |     | 0       |       |
| dep_level   | int(11)             | NO   |     | 0       |       |
| comments    | blob                | NO   |     | NULL    |       |
| error       | varchar(128)        | NO   |     |         |       |
| templateid  | bigint(20) unsigned | NO   |     | 0       |       |
| type        | int(11)             | NO   |     | 0       |       |
+-------------+---------------------+------+-----+---------+-------+

trigger_depends

trigger_depends 保存了trigger的依赖关系。

mysql> desc trigger_depends;
+----------------+---------------------+------+-----+---------+-------+
| Field          | Type                | Null | Key | Default | Extra |
+----------------+---------------------+------+-----+---------+-------+
| triggerdepid   | bigint(20) unsigned | NO   | PRI | 0       |       |
| triggerid_down | bigint(20) unsigned | NO   | MUL | 0       |       |
| triggerid_up   | bigint(20) unsigned | NO   | MUL | 0       |       |
+----------------+---------------------+------+-----+---------+-------+

users

不需要解释了,值的一提的部分用户配置会在该表中,例如auotlogin、autologout、
url、theme等信息。

mysql> desc users;
+----------------+---------------------+------+-----+-------------+-------+
| Field          | Type                | Null | Key | Default     | Extra |
+----------------+---------------------+------+-----+-------------+-------+
| userid         | bigint(20) unsigned | NO   | PRI | 0           |       |
| alias          | varchar(100)        | NO   | MUL |             |       |
| name           | varchar(100)        | NO   |     |             |       |
| surname        | varchar(100)        | NO   |     |             |       |
| passwd         | char(32)            | NO   |     |             |       |
| url            | varchar(255)        | NO   |     |             |       |
| autologin      | int(11)             | NO   |     | 0           |       |
| autologout     | int(11)             | NO   |     | 900         |       |
| lang           | varchar(5)          | NO   |     | en_gb       |       |
| refresh        | int(11)             | NO   |     | 30          |       |
| type           | int(11)             | NO   |     | 0           |       |
| theme          | varchar(128)        | NO   |     | default.css |       |
| attempt_failed | int(11)             | NO   |     | 0           |       |
| attempt_ip     | varchar(39)         | NO   |     |             |       |
| attempt_clock  | int(11)             | NO   |     | 0           |       |
| rows_per_page  | int(11)             | NO   |     | 50          |       |
+----------------+---------------------+------+-----+-------------+-------+

常见表查询

-- zabbix 查询剩余内存一直大于2G的主机
SELECT host
    ,name
FROM hosts
WHERE hostid IN (
        SELECT hostid
        FROM items
        WHERE itemid IN (
                SELECT itemid
                FROM trends_uint
                WHERE itemid IN (
                        SELECT itemid
                        FROM items
                        WHERE name = "Available memory"
                        )
                GROUP BY itemid
                HAVING min(value_min) > 2000000000
                )
        );

--出现10次以上,最大内存不足500MB的主机
SELECT host
    ,name
FROM hosts
WHERE hostid IN (
        SELECT hostid
        FROM items
        WHERE itemid IN (
                SELECT itemid
                FROM trends_uint
                WHERE itemid IN (
                        SELECT itemid
                        FROM items
                        WHERE name = "Available memory"
                        )
                    AND value_max < 500000000
                GROUP BY itemid
                HAVING count(*) > 10
                )
        );


-- 查询内存剩余大于xx G的服务器
SELECT host
    ,name
FROM hosts
WHERE hostid IN (
        SELECT hostid
        FROM items
        WHERE itemid IN (
                SELECT itemid
                FROM trends_uint
                WHERE itemid IN (
                        SELECT itemid
                        FROM items
                        WHERE name = "Available memory"     -- Linux
                            OR
                        name = "Free memory"          -- Windows
                        )
                GROUP BY itemid
                HAVING min(value_min) > 100 * 1073741824
                )
        );