ZABBIX相关文档……
1 篇帖子 分页: 1 / 1
帖子oulin_hl » 2013年 12月 11日 11:47 星期三
概述

由于Zabbix前端效率极低,大批量更新会造成oracle tx锁,所以对于这种大批量的更新,一般都用数据库语句直接update。想过通过patch php代码的方法来解决这个问题(Zabbix 本身的类似问题就是这样解决的),但是php一个是不会,一个是太长。而且,数据update快。这样就需要对Zabbix数据库的数据结构有清晰的了解。

另一方面,Zabbix收集了大量的裸数据,其他人可以通过这些数据来进行分析,同样,也需要了解数据库的结构。

在使用过程中,我们也是摸石头过河,一边摸索一边使用。这里会对Zabbix数据库的表结构和常用的操作做一些说明。

注意:

Zabbix数据库中的表的名称都是复数,比如存放Host信息的表的名字是Hosts等。
数据库操作有风险,一旦出问题会造成Zabbix crash。需要谨慎操作。
普通的查询可以在备库上进行。两边数据是实时同步的。

Hosts表
表结构解析

“Host”就是指一台被监控的机器。我们先看Hosts表结构,如下:

代码: 全选
SQL> desc hosts;
Name               Type           Nullable Default     Comments
------------------ -------------- -------- ----------- --------
HOSTID             NUMBER(20)              '0'                 
PROXY_HOSTID       NUMBER(20)              '0'                 
HOST               NVARCHAR2(64)  Y        ''                 
DNS                NVARCHAR2(64)  Y        ''                 
USEIP              NUMBER(10)              '1'                 
IP                 NVARCHAR2(39)  Y        '127.0.0.1'         
PORT               NUMBER(10)              '10050'             
STATUS             NUMBER(10)              '0'                 
DISABLE_UNTIL      NUMBER(10)              '0'                 
ERROR              NVARCHAR2(128) Y        ''                 
AVAILABLE          NUMBER(10)              '0'                 
ERRORS_FROM        NUMBER(10)              '0'                 
LASTACCESS         NUMBER(10)              '0'                 
INBYTES            NUMBER(20)              '0'                 
OUTBYTES           NUMBER(20)              '0'                 
USEIPMI            NUMBER(10)              '0'                 
IPMI_PORT          NUMBER(10)              '623'               
IPMI_AUTHTYPE      NUMBER(10)              '0'                 
IPMI_PRIVILEGE     NUMBER(10)              '2'                 
IPMI_USERNAME      NVARCHAR2(16)  Y        ''                 
IPMI_PASSWORD      NVARCHAR2(20)  Y        ''                 
IPMI_DISABLE_UNTIL NUMBER(10)              '0'                 
IPMI_AVAILABLE     NUMBER(10)              '0'                 
SNMP_DISABLE_UNTIL NUMBER(10)              '0'                 
SNMP_AVAILABLE     NUMBER(10)              '0'                 
MAINTENANCEID      NUMBER(20)              '0'                 
MAINTENANCE_STATUS NUMBER(10)              '0'                 
MAINTENANCE_TYPE   NUMBER(10)              '0'                 
MAINTENANCE_FROM   NUMBER(10)              '0'                 
IPMI_IP            NVARCHAR2(64)  Y        '127.0.0.1'         
IPMI_ERRORS_FROM   NUMBER(10)              '0'                 
SNMP_ERRORS_FROM   NUMBER(10)              '0'                 
IPMI_ERROR         NVARCHAR2(128) Y        ''                 
SNMP_ERROR         NVARCHAR2(128) Y        ''


    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';
代码: 全选
ZABBIX中文论坛
欢迎热爱zabbix的网友们,在此我们可以一起探讨、交流、沟通zabbix的所有操作与问题!
1 篇帖子 分页: 1 / 1

登录

在线用户

正在浏览此版面的用户:没有注册用户 和 22 位游客