转 zabbix 优化方法 以及 后台数据库查询方法 两则

############sample 1

https://blog.51cto.com/sfzhang88/1558254

如何从Zabbix数据库中获取监控数据

    做过Zabbix的同学都知道,Zabbix通过专用的Agent或者SNMP收集相关的监控数据,然后存储到数据库里面实时在前台展示。Zabbix监控数据主要分为以下两类:

    历史数据:history相关表,从history_uint表里面可以查询到设备监控项目的最大,最小和平均值,即存储监控数据的原始数据。

    趋势数据:trends相关表,趋势数据是经过Zabbix计算的数据,数据是从history_uint里面汇总的,从trends_uint可以查看到监控数据每小时最大,最小和平均值,即存储监控数据的汇总数据。

    Zabbix可以通过两种方式获取历史数据:

1.通过Zabbix前台获取历史数据

    通过Zabbix前台查看历史数据非常简单,可以通过Monitoring->Lastest data的方式查看。也可以点击右上角的As plain test按钮保存成文本文件。

wKioL1QkDOCjpLoTAAOm77_P1z4367.jpg

2.通过前台获取的数据进行处理和二次查询有很多限制,因此可以通过SQL语句直接从后台DB查询数据。    

    首先大家应该熟悉SQL语句Select 常用用法:

SELECT [ALL | DISTINCT] Select_List [INTO [New_Table_name]
FROM { Table_name | View_name} [ [,{table2_name | view2_name}
     [,...] ]
[ WHERE Serch_conditions ]
[ GROUP BY Group_by_list ]
[ HAVING Serch_conditions ]
[ ORDER BY Order_list [ASC| DEsC] ]
 

    说明:

1)SELECT子句指定要查询的特定表中的列,它可以是*,表达式,列表等。

2)INTO子句指定要生成新的表。

3)FROM子句指定要查询的表或者视图。

4)WHERE子句用来限定查询的范围和条件。

5)GROUP BY子句指定分组查询子句。

6)HAVING子句用于指定分组子句的条件。

7)ORDER BY可以根据一个或者多个列来排序查询结果,在该子句中,既可以使用列名,也可以使用相对列号,ASC表示升序,DESC表示降序。

8)mysql聚合函数:sum(),count(),avg(),max(),avg()等都是聚合函数,当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算。运算完后就要用到Having子句进行判断了,例如聚合函数的值是否大于某一个值等等。

从Zabbix数据库中查询监控项目方法,这里已查询主机的网卡流量为例子:

1)通过hosts表查找host的ID。

mysql> select host,hostid from hosts where host="WWW05";
+-------+--------+
| host  | hostid |
+-------+--------+
| WWW05 |  10534 |
+-------+--------+
1 row in set (0.00 sec)
 

2)通过items表查找主的监控项和key以及itemid。

mysql> select itemid,name,key_ from items where hostid=10534 and key_="net.if.out[eth0]";
+--------+-----------------+------------------+
| itemid | name            | key_             |
+--------+-----------------+------------------+
|  58860 | 发送流量:      | net.if.out[eth0] |
+--------+-----------------+------------------+
1 row in set (0.00 sec)
 

3)通过itemid查询主机的监控项目(history_uint或者trends_uint),单位为M。

   主机流入流量:

mysql> select from_unixtime(clock) as DateTime,round(value/1024/1024,2) as Traffic_in from history_uint where itemid="58855" and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' limit 20;
+---------------------+------------+
| DateTime            | Traffic_in |
+---------------------+------------+
| 2014-09-20 00:00:55 |       0.10 |
| 2014-09-20 00:01:55 |       0.09 |
| 2014-09-20 00:02:55 |       0.07 |
| 2014-09-20 00:03:55 |       0.05 |
| 2014-09-20 00:04:55 |       0.03 |
| 2014-09-20 00:05:55 |       0.06 |
| 2014-09-20 00:06:55 |       0.12 |
| 2014-09-20 00:07:55 |       0.05 |
| 2014-09-20 00:08:55 |       0.10 |
| 2014-09-20 00:09:55 |       0.10 |
| 2014-09-20 00:10:55 |       0.12 |
| 2014-09-20 00:11:55 |       0.12 |
| 2014-09-20 00:12:55 |       0.13 |
| 2014-09-20 00:13:55 |       3.16 |
| 2014-09-20 00:14:55 |       0.23 |
| 2014-09-20 00:15:55 |       0.24 |
| 2014-09-20 00:16:55 |       0.26 |
| 2014-09-20 00:17:55 |       0.23 |
| 2014-09-20 00:18:55 |       0.14 |
| 2014-09-20 00:19:55 |       0.16 |
+---------------------+------------+
20 rows in set (0.82 sec)
 

    主机流出流量:

mysql> select from_unixtime(clock) as DateTime,round(value/1024/1024,2) as Traffic_out from history_uint where itemid="58860" and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' limit 20;
+---------------------+-------------+
| DateTime            | Traffic_out |
+---------------------+-------------+
| 2014-09-20 00:00:00 |        4.13 |
| 2014-09-20 00:01:00 |        3.21 |
| 2014-09-20 00:02:00 |        2.18 |
| 2014-09-20 00:03:01 |        1.61 |
| 2014-09-20 00:04:00 |        1.07 |
| 2014-09-20 00:05:00 |        0.92 |
| 2014-09-20 00:06:00 |        1.23 |
| 2014-09-20 00:07:00 |        2.76 |
| 2014-09-20 00:08:00 |        1.35 |
| 2014-09-20 00:09:00 |        3.11 |
| 2014-09-20 00:10:00 |        2.99 |
| 2014-09-20 00:11:00 |        2.68 |
| 2014-09-20 00:12:00 |        2.55 |
| 2014-09-20 00:13:00 |        2.89 |
| 2014-09-20 00:14:00 |        4.98 |
| 2014-09-20 00:15:00 |        6.56 |
| 2014-09-20 00:16:00 |        7.34 |
| 2014-09-20 00:17:00 |        6.81 |
| 2014-09-20 00:18:00 |        7.67 |
| 2014-09-20 00:19:00 |        4.11 |
+---------------------+-------------+
20 rows in set (0.74 sec)
 

4)如果是两台设备,汇总流量,假如公司出口有两台设备,可以用下面的SQL语句汇总每天的流量。下面SQL语句是汇总上面主机网卡的进出流量的。

mysql> select from_unixtime(clock,"%Y-%m-%d %H:%i") as DateTime,sum(round(value/1024/1024,2)) as Traffic_total from history_uint where itemid in (58855,58860)  and from_unixtime(clock)>='2014-09-20'and from_unixtime(clock)<'2014-09-21' group by from_unixtime(clock,"%Y-%m-%d %H:%i") limit 20;
+------------------+---------------+
| DateTime         | Traffic_total |
+------------------+---------------+
| 2014-09-20 00:00 |          4.23 |
| 2014-09-20 00:01 |          3.30 |
| 2014-09-20 00:02 |          2.25 |
| 2014-09-20 00:03 |          1.66 |
| 2014-09-20 00:04 |          1.10 |
| 2014-09-20 00:05 |          0.98 |
| 2014-09-20 00:06 |          1.35 |
| 2014-09-20 00:07 |          2.81 |
| 2014-09-20 00:08 |          1.45 |
| 2014-09-20 00:09 |          3.21 |
| 2014-09-20 00:10 |          3.11 |
| 2014-09-20 00:11 |          2.80 |
| 2014-09-20 00:12 |          2.68 |
| 2014-09-20 00:13 |          6.05 |
| 2014-09-20 00:14 |          5.21 |
| 2014-09-20 00:15 |          6.80 |
| 2014-09-20 00:16 |          7.60 |
| 2014-09-20 00:17 |          7.04 |
| 2014-09-20 00:18 |          7.81 |
| 2014-09-20 00:19 |          4.27 |
+------------------+---------------+
20 rows in set (1.52 sec)
 

5)查询一天中主机流量的最大值,最小值和平均值。

mysql> select date as DateTime,round(min(traffic)/2014/1024,2) as TotalMinIN,round(avg(traffic)/1024/1024,2) as TotalAvgIN,round(max(traffic)/1024/1024,2)  as TotalMaxIN from (select from_unixtime(clock,"%Y-%m-%d") as date,sum(value) as traffic from history_uint where itemid in (58855,58860)  and from_unixtime(clock)>='2014-09-20' and from_unixtime(clock)<'2014-09-21' group by from_unixtime(clock,"%Y-%m-%d %H:%i") ) tmp;
+------------+------------+------------+------------+
| DateTime   | TotalMinIN | TotalAvgIN | TotalMaxIN |
+------------+------------+------------+------------+
| 2014-09-20 |       0.01 |       4.63 |     191.30 |
+------------+------------+------------+------------+
1 row in set (1.74 sec)
 

6)查询主机组里面所有主机CPU Idle平均值(原始值)。

mysql> select from_unixtime(hi.clock,"%Y-%m-%d %H:%i") as DateTime,g.name as Group_Name,h.host as Host, hi.value as Cpu_Avg_Idle from hosts_groups as hg join groups g on g.groupid = hg.groupid join items i on hg.hostid = i.hostid join hosts h on h.hostid=i.hostid join history hi on  i.itemid = hi.itemid where g.name='上海机房--项目测试' and i.key_='system.cpu.util[,idle]' and  from_unixtime(clock)>='2014-09-24' and from_unixtime(clock)<'2014-09-25' group by h.host,from_unixtime(hi.clock,"%Y-%m-%d %H:%i") limit 10;
+------------------+----------------------------+----------+--------------+
| DateTime         | Group_Name                 | Host     | Cpu_Avg_Idle |
+------------------+----------------------------+----------+--------------+
| 2014-09-24 00:02 | 上海机房--项目测试         | testwb01 |      94.3960 |
| 2014-09-24 00:07 | 上海机房--项目测试         | testwb01 |      95.2086 |
| 2014-09-24 00:12 | 上海机房--项目测试         | testwb01 |      95.4308 |
| 2014-09-24 00:17 | 上海机房--项目测试         | testwe01 |      95.4580 |
| 2014-09-24 00:22 | 上海机房--项目测试         | testwb01 |      95.4611 |
| 2014-09-24 00:27 | 上海机房--项目测试         | testwb01 |      95.2939 |
| 2014-09-24 00:32 | 上海机房--项目测试         | testwb01 |      96.0896 |
| 2014-09-24 00:37 | 上海机房--项目测试         | testwb01 |      96.5286 |
| 2014-09-24 00:42 | 上海机房--项目测试         | testwb01 |      96.8086 |
| 2014-09-24 00:47 | 上海机房--项目测试         | testwb01 |      96.6854 |
+------------------+----------------------------+----------+--------------+
10 rows in set (0.75 sec)
 

7)查询主机组里面所有主机CPU Idle平均值(汇总值)。

mysql> select from_unixtime(hi.clock,"%Y-%m-%d %H:%i") as Date,g.name as Group_Name,h.host as Host, hi.value_avg as Cpu_Avg_Idle   from hosts_groups as hg join groups g on g.groupid = hg.groupid join items i on hg.hostid = i.hostid join hosts h on h.hostid=i.hostid join trends hi on  i.itemid = hi.itemid     where g.name='上海机房--项目测试' and i.key_='system.cpu.util[,idle]' and  from_unixtime(clock)>='2014-09-10' and from_unixtime(clock)<'2014-09-11' group by h.host,from_unixtime(hi.clock,"%Y-%m-%d %H:%i") limit 10;
+------------------+----------------------------+----------+--------------+
| Date             | Group_Name                 | Host     | Cpu_Avg_Idle |
+------------------+----------------------------+----------+--------------+
| 2014-09-10 00:00 | 上海机房--项目测试         | testwb01 |      99.9826 |
| 2014-09-10 01:00 | 上海机房--项目测试         | testwb01 |      99.9826 |
| 2014-09-10 02:00 | 上海机房--项目测试         | testwb01 |      99.9825 |
| 2014-09-10 03:00 | 上海机房--项目测试         | testwb01 |      99.9751 |
| 2014-09-10 04:00 | 上海机房--项目测试         | testwb01 |      99.9843 |
| 2014-09-10 05:00 | 上海机房--项目测试         | testwb01 |      99.9831 |
| 2014-09-10 06:00 | 上海机房--项目测试         | testwb01 |      99.9829 |
| 2014-09-10 07:00 | 上海机房--项目测试         | testwb01 |      99.9843 |
| 2014-09-10 08:00 | 上海机房--项目测试         | testwb01 |      99.9849 |
| 2014-09-10 09:00 | 上海机房--项目测试         | testwb01 |      99.9849 |
+------------------+----------------------------+----------+--------------+
10 rows in set (0.01 sec)
 

8)其它与Zabbix相关的SQL语句。

    查询主机已经添加但没有开启监控主机:

select host from hosts where status=1;
 

    查询NVPS的值:

mysql> SELECT round(SUM(1.0/i.delay),2) AS qps FROM items i,hosts h WHERE i.status='0' AND i.hostid=h.hostid AND h.status='0' AND i.delay<>0; 
+--------+
| qps    |
+--------+
| 503.40 |
+--------+
1 row in set (0.11 sec)
 

    查询IDC机房的资产信息:

mysql> select name,os,tag,hardware from host_inventory where hostid in (select hostid from  hosts_groups  where groupid=69) limit 2;
+-------+----------------------------+------+-------------------+
| name  | os                         | tag  | hardware          |
+-------+----------------------------+------+-------------------+
| SHDBM | CentOS release 5.2 (Final) | i686 | ProLiant DL360 G5 |
| SHDBS | CentOS release 5.2 (Final) | i686 | ProLiant DL360 G5 |
+-------+----------------------------+------+-------------------+
2 rows in set (0.00 sec)
 

    查询Zabbix interval分布情况:

mysql> select delay,count(*),concat(round(count(*) / (select count(*) from items where status=0)*100,2),"%") as percent from items where status=0 group by delay order by 2 desc;
+-------+----------+---------+
| delay | count(*) | percent |
+-------+----------+---------+
|  3600 |    41168 | 38.92%  |
|   300 |    35443 | 33.51%  |
|   600 |    16035 | 15.16%  |
|    60 |    12178 | 11.51%  |
|     0 |      902 | 0.85%   |
| 36000 |       46 | 0.04%   |
|    30 |        1 | 0.00%   |
+-------+----------+---------+
7 rows in set (0.68 sec)
 

    总结:通过SQL语句可以查询出任何监控项目的数据,并且在SQL语句的末尾通过into outfile '/tmp/zabbix_result.txt'直接把查询的结果保存到系统上面,在通过脚本发送查询结果到指定的用户,实现自动化查询的过程,网上很少有介绍Zabbix数据库查询的文章,希望对大家有所帮助。

   

 ##################sample 2 (重要)

https://www.cnblogs.com/wumingxiaoyao/p/7412312.html

ZABBIX数据库表结构解析

 

 下面开始介绍:

1.添加监控表结构详解

(1)hosts,存储被监控的机器的信息,表结构如下:

 

(2)items

(3)hosts_templates,存储机器和模版或者模版和模版之间的关系

由于模版和机器都存储在hosts表中,所以hosts_templates和hosts 之间可以hostid关联也可以通过templateid关联。

 (4)interface,存储了所有设备的ip和端口的数据。(由于hosts表中不仅保存了设备信息还保存了模版信息,所以统计实际监控的设备,此表更加准确)

 

 2.数据存储表结构详解

 

将clock 转化为人性化时间:

3.报警相关表结构详解

 

(1)triggers

 

 

 

附 functions 表结构:

 (2)events

例子:

1. 找出某台主机的所有items ,含有某个key_的item , 统计items 总个数
SELECT * FROM HOSTS WHERE hostid=10157;
SELECT * FROM items WHERE hostid=10157 AND key_ LIKE '%agent%';
SELECT COUNT(*) FROM items;

2. 找出触发trigger次数最多的事件,并按trigger 降序排列。
SELECT a.description, COUNT(*) cnt FROM TRIGGERS a , EVENTS b 
WHERE a.triggerid=b.objectid ORDER BY cnt DESC ;
3. 从item记录各找出一个value类型为整形,浮点型的key_。
统计这两个key_ 存储在history或者history_uint 某一个时间段(比如2017/06/12)
的最大值,最小值,平均值,然后与 trends 或者 trends_unint 中相应时间段做对比

整型
SELECT * FROM items WHERE value_type=3 AND hostid=10157 LIMIT 1;
SELECT * FROM history_uint a,trends_uint b WHERE a.clock=b.clock AND a.itemid=b.itemid LIMIT 1;

浮点型
SELECT * FROM items WHERE value_type=0 AND hostid=10157 LIMIT 1;
SELECT * FROM history a,trends b WHERE a.clock=b.clock AND a.itemid=b.itemid LIMIT 1;

4.统计Zabbix Dashboard中triggers总数的来源。

SELECT  count(*)
  FROM TRIGGERS
WHERE triggerid IN
       (SELECT triggerid
          FROM functions
         WHERE itemid IN (SELECT itemid
                            FROM items
                           WHERE hostid IN (SELECT hostid FROM interface)
                             AND key_ NOT LIKE '%#%'
                             AND key_ NOT LIKE '%discovery%'
                             AND STATUS != 1));
 
说明:
通过之前对zabbix表结构的学习,我们知道,表triggers和functions相关联,而functions和items相关联,那么,要对triggers做统计,就需要从这三张表下手。
关键就是对items表中的数据做出筛选,key_中带“#”和“discovery”的和status=1(不可用状态)都要排除,这样就统计出来了。
 
 
####sample 3
https://www.cnblogs.com/shhnwangjian/p/5484352.html

想理解zabbix的前端代码、做深入的二次开发,甚至的调优,那就不能不了解数据库的表结构了。

我们这里采用的zabbix1.8、mysql,所以简单的说下我们mysql这边的表结构,其他环境不保证正确。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
mysql> show tables;
+-----------------------+
| Tables_in_zabbix      |
+-----------------------+
| acknowledges          |
| actions               |
| alerts                |
| application_template  |
| applications          |
| auditlog              |
| auditlog_details      |
| autoreg_host          |
| conditions            |
| config                |
| dbversion             |
| dchecks               |
| dhosts                |
| drules                |
| dservices             |
| escalations           |
| events                |
| expressions           |
| functions             |
| globalmacro           |
| globalvars            |
| graph_discovery       |
| graph_theme           |
| graphs                |
| graphs_items          |
| group_discovery       |
| group_prototype       |
groups                |
history               |
| history_log           |
| history_str           |
| history_text          |
| history_uint          |
| host_discovery        |
| host_inventory        |
| hostmacro             |
| hosts                 |
| hosts_groups          |
| hosts_templates       |
| housekeeper           |
| httpstep              |
| httpstepitem          |
| httptest              |
| httptestitem          |
| icon_map              |
| icon_mapping          |
| ids                   |
| images                |
| interface             |
| interface_discovery   |
| item_condition        |
| item_discovery        |
| items                 |
| items_applications    |
| maintenances          |
| maintenances_groups   |
| maintenances_hosts    |
| maintenances_windows  |
| mappings              |
| media                 |
| media_type            |
| opcommand             |
| opcommand_grp         |
| opcommand_hst         |
| opconditions          |
| operations            |
| opgroup               |
| opmessage             |
| opmessage_grp         |
| opmessage_usr         |
| optemplate            |
| profiles              |
| proxy_autoreg_host    |
| proxy_dhistory        |
| proxy_history         |
| regexps               |
| rights                |
| screens               |
| screens_items         |
| scripts               |
| service_alarms        |
| services              |
| services_links        |
| services_times        |
| sessions              |
| slides                |
| slideshows            |
| sysmap_element_url    |
| sysmap_url            |
| sysmaps               |
| sysmaps_elements      |
| sysmaps_link_triggers |
| sysmaps_links         |
| timeperiods           |
| trends                |
| trends_uint           |
| trigger_depends       |
| trigger_discovery     |
| triggers              |
| user_history          |
users                 |
| 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、history_log 、history_uint_sync等

这部分表都差不多,唯一不同的是保存的数据类型,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、trends_uint

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          |       |
+----------------+---------------------+------+-----+-------------+-------+

转载:http://www.furion.info/623.html

使用python获取表中TCP连接数,生成Execl文件

############sample 4

https://blog.csdn.net/IREwyz/article/details/50374500

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/IREwyz/article/details/50374500
zabbix是一个强大的网管工具,其功能和用途也随之多变,但万变不离其宗,对于庞大的监控系统性能优化、方案优化是不可缺少的。

以下是我阅读zabbix官方文档,结合两个项目的心得。

一、拓扑优化

zabbix再带proxy功能,因本公司自主研发私有云平台,故可以在个别项目上用虚拟机来作proxy服务器,在确保vm正常运作的前提下,减少了server端的负荷。

二、方案优化

那么有的同学说了,如果硬件条件有限且同一批次中标业务么有私有云,那么建议在agent端采取active checks模式,根据官网定义,虽然agent端有更复杂的流程,且有举例

1. Agent opens a TCP connection
2. Agent asks for the list of checks
3. Server responds with a list of items (item key, delay)4. Agent parses the response
5. TCP connection is closed
6. Agent starts periodical collection of data 

但是相对于被动agent,对于server的压力会大大减小,避免server端宕机,被动agent在此不做赘述,网上有很多部署方法。
若采用active checks模式,首先针对zabbix_agentd.conf文件修改

a)在ServerActive=xxx 填server端ip、

b)Hostname=xx 填agent的hostname 、

c)StartAgents=0 

()

注:如果此处值为0,那么passive checks 将被disable,同学们可以根据实际业务大小来分配主动、被动agent个数)


d)针对模板变更,

1.以任何一个现有模板为例,clone并重命名,假如重命名模板为TEST

2.将模板TEST里所有items和discovery rules里的items都变更type为atvice agent

3.将创建的host关联重命名的模板TEST,注意创建的时候,ip和port都填0,否则会因模式冲突看到一个红色的Z,让人觉得很不舒服,不是么


至此active-checks模式的agent部署完毕,可以在overview中查看模板中的监控项。


三 数据库优化(此部分转载,因时间关系,未能亲自验证,待有时间会把此部分自己试验结果奉上)

分享一个zabbix数据库的优化脚本,适合2.0版本。

对history,hostory_uint按日分区,trends,trends_uint按月分区;

关闭Houserkeeper:

vim zabbix_server.conf

DisableHousekeeper=1

对history,hostory_uint每日建立第二天的分区并删除45天前的分区
对trends,trends_uint每月20号建立下一个月的分区,并删除12个月前的分区

时间可以自己修改

由于events表的大小对仪表盘的展示速度影响很大,2.0以后的版本又对该表做过修改,具有主键约束,不能以clock做分区表优化,所以我每日都清理该表,只保留了3天的数据(根据自己的环境和需求而定,可以自己修改),很简单的一个定期维护脚本,希望能帮到大家

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59
#!/usr/bin/env python
# coding: utf-8
import MySQLdb
import datetime
now_time = datetime.datetime.now()
error_time = now_time.strftime('%Y-%m-%d %H:%M:%S')
theday = (now_time + datetime.timedelta(days=+1)).strftime('%Y%m%d')
next_day = (now_time + datetime.timedelta(days=+2)).strftime('%Y-%m-%d')
themonth = datetime.datetime(now_time.year,(now_time.month+1),now_time.day).strftime('%Y%m')
next_month = datetime.datetime(now_time.year,(now_time.month+2),1).strftime('%Y-%m-%d')
last_time = (now_time - datetime.timedelta(days=30)).strftime('%Y%m%d')
last_time_month = datetime.datetime((now_time.year-1),now_time.month,now_time.day).strftime('%Y%m')
events_time = (now_time - datetime.timedelta(days=1)).strftime('%Y-%m-%d')
history_time = (now_time - datetime.timedelta(days=45)).strftime('%Y%m%d')
trends_time = datetime.datetime((now_time.year-1),now_time.month,now_time.day).strftime('%Y%m')
table_day=['history', 'history_uint']
table_month=['trends', 'trends_uint']
conn=MySQLdb.connect(host='localhost',user='zabbix',passwd='zabbix',db='zabbix',port=3306)
cur=conn.cursor()
for name_d in table_day:
   try:
   ####新增分区#######
      cur.execute('ALTER TABLE `%s` ADD PARTITION (PARTITION p%s VALUES LESS THAN (UNIX_TIMESTAMP("%s 00:00:00")))' % (name_d, theday, next_day))
                                                                                                                                                 
   except MySQLdb.Error,e:
       print "[%s] Mysql Error %d: %s" % (error_time, e.args[0], e.args[1])
       pass
for name_m in table_month:
   try:
      ####新增分区#######
      if now_time.day == 20:
         cur.execute('ALTER TABLE `%s` ADD PARTITION (PARTITION p%s VALUES LESS THAN (UNIX_TIMESTAMP("%s 00:00:00")))' % (name_m, themonth, next_month))
   except MySQLdb.Error,e:
       print "[%s] Mysql Error %d: %s" % (error_time, e.args[0], e.args[1])
       pass
######清除events表1天前的数据######
try:
   cur.execute('DELETE FROM `events` where `clock` < UNIX_TIMESTAMP("%s 00:00:00")'% events_time)
   cur.execute('optimize table events;')
except MySQLdb.Error,e:
   print "[%s] Mysql Error %d: %s" % (error_time, e.args[0], e.args[1])
   pass
######清除history,histroy_uint表45天前的数据######
for name_d in table_day:
    try:
       cur.execute('ALTER TABLE `%s` DROP PARTITION p%s;' % (name_d, history_time))
    except MySQLdb.Error,e:
       print "[%s] Mysql Error %d: %s" % (error_time, e.args[0], e.args[1])
       pass
######清除trends,trends_uint表一年前的数据######
for name_m in table_month:
    try:
       cur.execute('ALTER TABLE `%s` DROP PARTITION p%s;' % (name_m, trends_time))
    except MySQLdb.Error,e:
       print "[%s] Mysql Error %d: %s" % (error_time, e.args[0], e.args[1])
       pass
conn.commit()
cur.close()
conn
---------------------
版权声明:本文为CSDN博主「IRE王一喆」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/IREwyz/article/details/50374500

####sample 5

http://blog.chinaunix.net/uid-26660567-id-4419434.html

https://www.cnblogs.com/gqdw/archive/2013/01/01/2841221.html

https://blog.csdn.net/ubggze6t/article/details/39119219

https://blog.csdn.net/shuxiang1990/article/details/53416090

 

分类: 系统运维

2014-08-15 15:15:39

 
首先理解housekeeper 是什么,看zabbix_server.conf配置文件

点击(此处)折叠或打开

  1. ### Option: HousekeepingFrequency
  2. # How often Zabbix will perform housekeeping procedure (in hours).
  3. # Housekeeping is removing unnecessary information from history, alert, and alarms tables.
  4. #
  5. # Mandatory: no
  6. # Range: 1-24
  7. # Default:
  8. # HousekeepingFrequency=1
  9. ### Option: MaxHousekeeperDelete
  10. # The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
  11. # [housekeeperid], [tablename], [field], [value].
  12. # No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
  13. # will be deleted per one task in one housekeeping cycle.
  14. # SQLite3 does not use this parameter, deletes all corresponding rows without a limit.
  15. # If set to 0 then no limit is used at all. In this case you must know what you are doing!
  16. #
  17. # Mandatory: no
  18. # Range: 0-1000000
  19. # Default:
  20. # MaxHousekeeperDelete=500
大意就是housekeeper就是清理数据库里过期的历史数据神马的。然后MaxHousekeeperDelete就是一个阀值,每次轮询housekeeper这个任务的时候,超过这个阀值的行都会被清理。

怎么查看housekeeper的执行情况?看日志:

点击(此处)折叠或打开

  1. grep housekeeper /var/log/zabbix/zabbix_server.log 
  2.   4850:20140809:175626.071 executing housekeeper
  3.   4850:20140809:181408.036 housekeeper [deleted 279622 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 1061.962644 sec, idle 1 hour(s)]
  4.   4850:20140809:191408.037 executing housekeeper
  5.   4850:20140809:192611.432 housekeeper [deleted 287033 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 723.394480 sec, idle 1 hour(s)]
  6.   4850:20140809:202611.433 executing housekeeper
  7.   4850:20140809:203638.243 housekeeper [deleted 266125 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 626.808964 sec, idle 1 hour(s)]
  8.   4850:20140809:213638.244 executing housekeeper
  9.   4850:20140809:215445.003 housekeeper [deleted 258097 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 1086.756768 sec, idle 1 hour(s)]
  10.   4850:20140809:225445.004 executing housekeeper
  11.   4850:20140809:230601.581 housekeeper [deleted 286602 hist/trends, 0 items, 0 events, 0 sessions, 0 alarms, 0 audit items in 676.576122 sec, idle 1 hour(s)]
  12. ....
  13. ....
关于housekeeper的执行过程,摘抄了zabbix论坛上的:

点击(此处)折叠或打开

  1. That is fine.
  2. Zabbix server housekeeper is doing all deletes in few stages:
  3. - in first is deleting from history* and trends* tables using clock key and it deletes ALL data from items older than specified in "Keep history" param,
  4. - in second stage is deleting rows of items of deleted items and deleted hosts (zabbix does not deletes all these data just when you click on delete but it adds all these items ids to 'housekeeper' table).
  5. - at the end it deletes items from events, acknowledgements, alarms tables
另外,在Monitor-Dashboard-Graphs里面也可以查看到Zabbix server的一些性能情况。
比如Zabbix internal process busy % 

到zabbix server上查看系统性能情况,发现io很高:

点击(此处)折叠或打开

  1. [root@zabbix ~]# iostat -xm 1
  2. Linux 2.6.32-431.5.1.el6.x86_64 (zabbix)     08/14/2014     _x86_64_    (2 CPU)
  3. avg-cpu: %user %nice %system %iowait %steal %idle
  4.            8.57 0.00 4.23 11.05 0.13 76.02
  5. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
  6. xvda 0.00 588.40 0.56 275.92 0.01 3.38 25.11 0.19 0.69 0.84 23.15
  7. xvdb 0.00 76.12 0.29 59.23 0.01 0.53 18.46 1.12 18.87 1.88 11.17
  8. dm-0 0.00 0.00 0.86 999.67 0.02 3.90 8.04 0.86 0.86 0.26 26.15
  9. dm-1 0.00 0.00 0.00 0.00 0.00 0.00 8.00 0.00 67.83 6.77 0.00
  10. avg-cpu: %user %nice %system %iowait %steal %idle
  11.           23.98 0.00 11.73 42.35 0.51 21.43
  12. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
  13. xvda 0.00 2964.00 20.00 1292.00 0.31 16.39 26.07 13.19 9.43 0.60 78.90
  14. xvdb 0.00 37.00 0.00 36.00 0.00 0.14 8.00 4.02 59.64 6.64 23.90
  15. dm-0 0.00 0.00 22.00 4385.00 0.42 17.13 8.16 57.78 11.69 0.18 81.30
  16. dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
  17. avg-cpu: %user %nice %system %iowait %steal %idle
  18.           18.46 0.00 6.67 34.36 0.00 40.51
  19. Device: rrqm/s wrqm/s r/s w/s rMB/s wMB/s avgrq-sz avgqu-sz await svctm %util
  20. xvda 0.00 1849.00 4.00 826.00 0.14 10.69 26.72 11.90 15.43 1.01 83.90
  21. xvdb 0.00 0.00 0.00 83.00 0.00 0.47 11.57 6.01 94.92 3.66 30.40
  22. dm-0 0.00 0.00 1.00 2700.00 0.02 10.55 8.01 57.89 23.79 0.32 87.10
  23. dm-1 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00
感谢linux群友提供的实际经验:

点击(此处)折叠或打开

  1. “建议你照着群上的那个文档去优化,基本10w的items不会有太大问题”
  2. 广州-小王 15:44:26
  3. 做分区表,直接删分区就好了
  4. 广州-小王 15:44:43
  5. 文档上有说,很简单,用脚本定时去删
  6. 广州-小王 15:45:09
  7. history开头的都能做分区,events表貌似2.0后就不能直接做了,有外键约束
  8. 广州-小王 15:48:53
  9. housekeeper有点废,当你量到达一定程度的时候删的速度没你增加的快..
  10. 广州-Samma 15:38:33
  11. 看housekeeper具体做了什么事。如果写对象是小一些的表,可以放到内存。
  12. 广州-Samma 15:39:21
  13. 或者把housekeeper的频度调大一些。 间隔N小时才执行一次
先写到这里吧,搞优化去了
优化参考:
先配置独立数据库,使用独立表空间
http://junqili.com/zabbix/zabbix-performance-tunning/
然后按照官网的这个文档对mysql 做分区
https://www.zabbix.org/wiki/Docs/howto/mysql_partition

参考资料:https://www.zabbix.com/forum/showthread.php?t=43311
https://www.zabbix.com/forum/showthread.php?t=43311&page=2
 
 
 
####sample 3
 

zabbix配置详解(三)

 监控报警  靠谱运维  2年前 (2017-11-30)  5684℃  0评论
一、zabbix-server对数据的存储其他的监控系统是将数据存储在rrd数据库里面,不存在数据库越来越大的情况,这跟数据库的环形存储特性有关系。zabbix不管是采用分布式架构还是传统的服务端与客户端直接相连的模式,最终都是将数据存储在mysql里面。

1.1 zabbix对数据存储

数据存储的大小与每秒处理的数据量有关,所以数据存储取决于两个因素:更新的数据量和删除的数据量(Housekeeper)。

zabbix-server将采集到的数据主要存储在History和Trends表中,其表结构中的数据类型如下:

图片.png

另外,acknowledges、alerts、auditlog、events和service_alarms表的数据也较大。

在History表中,主要存储数据到的历史数据,而Trends主要存储经过计算的历史数据(如每小时数据的最小值、最大值和平均值)。其实主要还是history表占的最大,trends表只是相对于其他表大而已。

在Trends表中,主要存储的是趋势数据,Trends 基本上是收集到的按小时合并的数据(仅仅是数值类型)。Zabbix 服务器按小时把所有的值从 history 表中提取出来,并按每小时计算最小值,平均值和最大值。

历史图:

图片.png

#由上图可以看出,一分钟一个格(我们一般都是60秒采集一次),这种的话就是历史数据,就是数据之间的时间相差不大,数据是以分钟为单位存储的,如果300台主机每个是10个监控项,一分钟就是3000条数据。所以一般历史数据的保存时间一般都不会设置太久,比如7天半个月之类的,虽然默认的是90天的历史保留时间。

#当然有的除外,比如我这里有个zabbix是专门用来存储各机房交换机出口的流量,因为cacti趋势的比较狠,所以我这里的历史保留时间和趋势保留时间都比较久。但是一般的都不应该保留这么久。

趋势图:

图片.png

#当前时间减7天,就是7月14日16点,然后看图是3小时一个格,这明显图的颗粒变得很粗,这就是趋势,1小时一条数据,24*7可比1*60*24*7,这个数据量级要少太多了。所以历史数据保存时间短一点,数据库空间增长会少很多。

图片.png

#再拉大呢,我拉倒所有,这就跨年了,可以看到是7天一格,真的就是看一个大概趋势了。这个日期是从上往下念,我图中也有标准了。那么我这数据起始位置只有月日,没有年啊,可以通过下面的图来查看。

图片.png

#看标红的地方就能看出下面的趋势图从什么时间开始到什么时间结束,左边那什么1h、2h、12h,7d等等,都是可以点的,就是你想看哪个时间跨度的图。

图片.png

Housekeeper

上面展示的history和Trends都存储在mysql中,直到 Zabbix 服务器的 Housekeeper 基于 Keep history 和 Keep trends 配置删除它们:

图片.png

#看上图,就是items里面的设置,首先采集时间是60秒,也就是一分钟去采集一次,也就是说此条item一分钟会往mysql的history表里面插入一条数据。历史数据是保留7天的,然后这个item在history表里面保存的总条数为:1(分钟)*60*24*7=10080行记录,一般来说一条记录需要占用50个字节,也就是说这一个监控项所占用的history表在实际物理空间上面的实际使用量为:504000字节=500KB左右。

#趋势数据设置的是365天,趋势数据是一小时计算一次,一般趋势数据可以存放的时间长一点,比如5年10年的,也是看什么数据有没有必要存那么长时间。它保存的是每小时收集到数据的最小值,最大值和平均值以及每小时收集到值的总数,也就是一小时一条数据。我们先按1年的时间来算,1*24(小时)*365=8760(条数据),如果换算成占用物理空间大小呢:趋势数据一条记录大概占用128字节,就是:8760*128=1095KB约等于1MB。

#而Housekeeper就是根据上图定义的历史数据在mysql表里面的保存时间和趋势数据的保存时间,去通过查询数据的时间戳去删除超过时限的老数据。

#当然还有个事件(alerts)也会占用点磁盘空间:报警、警告、恢复等等事情,一个事件大概占用130个字节,这个就是按条算了,一般也占用不了太大的空间,一般也不会老报警啥的。

注:

如果是很大型的监控系统,一般都会禁止Housekeeper,因为数据库里面数据太多了,每次去数据库里面搜索并删除消耗和耗时太大,一般都会采用优化数据库表结构、分库等其他的方法来搞。

默认历史保存时间是90天,趋势保存时间是365天,如果你想将历史保存时间变短或者变长的话,不去改全局的话,那么创建的每个items都要去修改,这工作量就大了,如何全局修改呢?

图片.png

图片.png

再添加items会看到:

图片.png

#这是一种方式,不用每次添加Items都手工修改一下,但是更好的方式还是尽量用模板的形式,这样能大大的减少工作量,那么多主机和items肯定不能一个个来加,除非自定义的。

二、相关配置

2.1 配置流程

zabbix完整的监控配置流程可以简单描述为:

Host groups(主机组)-》Hosts(主机)->Applications(监控项组)->Items(监控项)->Triggers(触发器)->Event(事件)->Actions(处理动作)->User groups(用户组)->Users(用户)->Medias(告警方式)->Audit(日志审计)。

实际使用的时候Items、Trigger、Graph通常采用模板进行监控配置,模板的特点就是可以对相同需求的监控项重复使用,无须对每台主机进行逐个设置。

对于zabbix来说,配置Graph不是必须的,因为没有配置图形,数据获取也不影响,数据获取是Items的功能,我们只需要对比较关心的Items设置Graph进行数据可视化。

对于zabbix来说,配置Trigger不是必须的,但是对于特别关注的数据,需要对取到的值进行条件判断,这时配置触发器是必须的。

2.2 制作模板

图片.png

图片.png

2.3 给模板添加Applications:

图片.png

#上图是Template OS Linux的监控项组模板,这就是相当于我们的例子,我们就照着它来创建一些application,当然有些我们可能用不到的就去掉了。

图片.png

#也可以通过去查看items去看看这个application下面都有哪些items供我们参考

#点击右上角的Create application

图片.png

下面是搞完之后的applications截图:

图片.png

2.4 给模板添加items并关联applications:

#这个就是照着Template OS Linux模板里面的items,想加哪个items就加哪个。如下面:

图片.png

注(Name中的$1..$9):

名称:CPU $2 time  #这个$2代表下面键值中[]中第二个参数,[]里面就是传进来的参数嘛,$1就是以第一个参数,以此类推,所以它的显示因该是CPU system time。

键值:system.cpu.util[,system]

内置了哪些键呢:https://www.zabbix.com/documentation/3.2/manual/config/items/itemtypes/zabbix_agent

下面是主机items显示的效果:

图片.png

好了下图我们定义了13个items:

图片.png

#注意关于Units(单位的注意):

Bash
默认情况下,如果原始值超过1000,那么他会先除以1000并且显示出来例如,设置了单位为bps并且收到的值为11102,将会显示为11.1Kbps 如果单位被指定为 B (byte), Bps (bytes per second) ,那么它会除以1024然后再显示数据。所以大家在监控流量和文件大小的时候不要用错单位,否则会出现数据不一致的情况。
如下为时间单位:
unixtime – 转为 “yyyy.mm.dd hh:mm:ss”. 只能使用正数。
uptime – 转为“hh:mm:ss” 或者“N days, hh:mm:ss”
例如,收到的值为881764秒,他将会显示为“10 days, 04:56:04”
s – 转为“yyy mmm ddd hhh mmm sss ms”;
例如,收到的值为881764(单位秒),他将会被显示为10d 4h 56m”,只会显示3个单元。有时候只会显示2个单元,例如”1m 5h”(不包含分,秒,毫秒),如果返回的值小于0.001,他只会显示”<1 ms”禁用单位:ms、rpm、RPM、%

2.5 给模板添加trigger(触发器):

还是触发器的右上角点击创建触发器:

直接表达式添加触发器:

图片.png

#{HOST.NAME}是一个内置宏。这里是官网内置宏的列表:https://www.zabbix.com/documentation/3.2/manual/appendix/macros/supported_by_location

#主要是表达式,这里才是核心,如:{zabbix_linux_base:vm.memory.size[available].last(0)}<20M

表达式语法格式:

Bash
{<server>:<key>.<function>(<parameter>)}<operator><constant>

用上面的例子拆分举例就是:

Bash
<server>    :模板名称,即zabbix_linux_base,等谁引用这个模板,那这里就是引用模板对应的主机了
<key>       :即监控模板里的项目items,这里就是内存剩items的键:vm.memory.size[available]
<function>  :就是我们触发器里面的功能项也就是函数,这里last就是表示last函数,即last()
<parameter> :就是上面方法所使用的参数,这里即0,last(0)也就是表示倒数第0个值,也就是最新的值
<operator>  :可使用的操作符,这里<是小于的意思,操作符有:/ * - + < > #(不等于) = &(逻辑与) |(逻辑或)
<constant>  : 常量,在这里即是20M

模板中trigger效果图:

图片.png

192.168.1.106主机添加完模板之后trigger效果图:

图片.png

function都有哪些啊,官网地址:https://www.zabbix.com/documentation/3.2/manual/appendix/triggers/functions

大概来说就是:

abschange   #作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同

Bash
举例:
change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n

avg                #返回一段时间的平均值

Bash
举例:
avg(5):最后5秒的平均值
avg(#5):表示最近5次得到值的平均值
avg(3600,86400):表示一天前的一个小时的平均值
如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,
#n表示最近n次的值

band             #

change          #最后的区别和之前的值

count             #返回时间间隔内数值的统计

Bash
举例:
count(600)最近10分钟得到值的个数
count(600,12)最近10分钟得到值的个数等于12
count(600,12,"gt")最近10分钟得到值的个数大于12
count(#10,12,"gt")最近10个值中,值大于12的个数
count(600,12,"gt",86400)24小时之前的10分钟内值大于12的个数
count(600,6/7,"band")-thenumberofvaluesforlast10minuteshaving'110'(inbinary)inthe3leastsignificantbits.
count(600,,,86400)24小时之前的10分钟数据值的个数
第一个参数:指定时间段
第二个参数:样本数据
第三个参数:操作参数
第四个参数:漂移参数
#支持的操作类型
eq: 相等
ne: 不相等
gt: 大于
ge: 大于等于
lt: 小于
le: 小于等于
like: 内容匹配

date               #时间,返回当前的时间,格式YYYYMMDD

dayofmonth  #返回当前是本月的第几天

dayofweek     #返回当前是本周的第几天

delta               #返回时间间隔内的最大值与最小值的差值

diff                  #返回值为1表示最近的值与之前的值不同,0为其他情况

forecast           #预测未来的值

fuzzytime        #返回值为1表示监控项值的时间戳与ZabbixServer的时间多N秒,0为其他.常使用system.localtime来检查本地时间是否与Zabbixserver时间相同.
iregexp            #不区分大小写

last                   #最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的

Bash
last(0)等价于last(#1)last(#3)表示最近第3个值(并不是最近的三个值)
本函数也支持第二个参数time_shift,例如last(0,86400)返回一天前的最近的值
如果在history中同一秒中有多个值存在,Zabbix不保证值的精确顺序
#num从Zabbix1.6.2起开始支持,timeshift从1.8.2其开始支持,可以查询avg()函数获取它的使用方法

logeventid      #

logseverity      #

logsource       #

max                #返回指定时间间隔的最大值.

min                 #返回指定时间间隔的最小值.

nodata            #检查收到的任何数据。

now                 #返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数

percentile       #百分比

prev                 #返回之前的值,类似于last(#2)

regexp            #第一个参数为string,第二个参数为秒或#num。检查最近的值是否匹配正则表达式,参数的正则表达式为POSIX扩展样式,第二个参数为秒数或收集值的数目,将会处理多个值.本函数区分大小写。当返回值为1时表示找到,0为其他.

str                    #第一个参数为string,第二个参数为秒或#num。查找最近值中的字符串。第一个参数指定查找的字符串,大小写敏感。第二个可选的参数指定秒数或收集值的数目,将会处理多个值。当返回值为1时表示找到,0为其他.
strlen               #指定最近值的字符串长度(并非字节),参数值类似于last函数.例如strlen(0)等价于strlen(#1),strlen(#3)表示最近的第三个值,strlen(0,86400)表示一天前的最近的值.

sum                 #返回指定时间间隔中收集到的值的总和.时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法

Bash
sum(600):表示在600秒之内接收到所有值的和
sum(#5):表示最后5个值的和

time                 #返回当前的时间,HHMMSS格式的当前时间。

timeleft            #一个项目达到所需的时间间隔,以秒为单位指定的阈值。

表达式语法举例:

官网的一些举例:https://www.zabbix.com/documentation/3.2/manual/config/triggers/expression

示例1:

Bash
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5
#www.zabbix.com这个主机的监控项,最新的CPU负载值如果大于5,那么表达式会返回true,这样一来触发器状态就改变为“problem”了。

示例2:

Bash
{www.zabbix.com:system.cpu.load[all,avg1].last()}>5 or {www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2 
#当前cpu负载大于5或者最近10分内的cpu负载大于2,那么表达式将会返回true.

示例3:

Bash
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff()}=1
#/etc/passwd最新的checksum与上一次获取到的checksum不同,表达式将会返回true.

示例4:

Bash
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K
#当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true

示例5:

Bash
{smtp1.zabbix.com:net.tcp.service[smtp].last()}=0 and {smtp2.zabbix.com:net.tcp.service[smtp].last()}=0
#当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.

示例6:

Bash
{zabbix.zabbix.com:agent.version.str("beta8")}=1
#如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.

示例7:

Bash
{zabbix.zabbix.com:icmpping.count(30m,0)}>5
#最近30分钟zabbix.zabbix.com这个主机超过5次不可到达返回true

示例8:

Bash
{zabbix.zabbix.com:tick.nodata(3m)}=1
#tick为Zabbix trapper类型,首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。

示例9:

Bash
{zabbix:system.cpu.load[all,avg1].min(5m)}>2 and {zabbix:system.cpu.load[all,avg1].time()}>000000 and {zabbix:system.cpu.load[all,avg1].time()}<060000
#只有在凌晨0点到6点整,最近5分钟内cpu负载大于2,表达式返回true,触发器的状态变更为“problem”

示例10:

Bash
{MySQL_DB:system.localtime.fuzzytime(10)}=0
#主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem”

示例11:

Bash
{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2
#最新一小时的平均负载峰值超过昨天同时段指标两次进行报警

Hysteresis(滞后性):

触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。有时候我们需要一个时间间隔一个好的状态和问题,而不是一个简单的阈值。 例如,我们想定义一个触发器,变成了问题当服务器机房温度高于20 c和我们想要呆在这个状态,直到温度低于15度。为了做到这一点,我们首先定义触发器事件的表达式问题。 然后选择“恢复表达”好的事件代和输入一个恢复好事件的表达式。
注意,复苏将计算表达式的值只有当事件是先解决的问题。 复苏是不可能解决问题,如果问题表达条件仍然存在。
示例1:

Bash
问题表现:
{server:temp.last()}>20
恢复表达式:
{server:temp.last()}<=15

图片.png

示例2:

Bash
问题表达式:
{server:vfs.fs.size[/,free].max(5m)}<10G   #最近5分钟内剩余磁盘空间小于10GB
恢复表达式:
{server:vfs.fs.size[/,free].min(10m)}>40G   #最近5分钟内磁盘空间大于40GB

通过表达式构造器添加触发器:

如果说表达式什么的那么多我记不住,我就知道个大概意思就可以了,那就可以通过表达式构造器来添加触发器的表达式。

#通过点击表达式那栏右边的添加按钮或者下方的表达式构造器,都可以进入到表达式添加栏。

图片.png

Bash
{zabbix_linux_base:vfs.fs.size[/,pfree].last()}<10 or {zabbix_linux_base:vfs.fs.size[/,free].last()}=10    #像这种多条表达式如果根分区磁盘空间百分比低于10%或者根分区磁盘空间小于10B(如果你不加单位就是以你Utils来换算,当然怎么也得写个1G啥的啊),就报警

图片.png

图片.png

#然后上图下面还有个图片.png点击这个就是保存设置了。

#说到这个Test,当你测试的时候,不能直接输入单位啥的,需要输入整数,比如你内存设置的是1M,那你就得把1M换算成字节的是多少数,然后输入上去测试一下看返回的是True还是False。

改变严重性显示的颜色:

图片.png

触发器支持的单位:

#触发器支持的单位官网链接:https://www.zabbix.com/documentation/3.2/manual/config/triggers/suffixes

#触发器如果不支持单位的话,那么比如你设置一个磁盘空间的触发器设置,因为它的单位是B,所以你要设置小于1G报警的话,你就要1*1024*1024*1024=1073741824(字节),你的数字就要设置成1073741824

#从上面的例子可以看出,设置成支持的单位就是让程序去算,我们就不用自己算了,因为zabbix采集的时候比如磁盘空间内存剩余空间都是字节的形式,你当然可以设置成字节跟采集上来的字节去比较,如果你设置了单位,它就会将采集上来的数换算成你设置的单位来比较,你再设置的触发器的时候是方便的,不用你自己算了。

Bash
时间可以使用:s(秒)、m(分钟)、h(小时)、d(天)、w(周)
内存大小可以使用:K(千字节)、M(兆字节)、G(千兆字节)、T(太字节)
单位符号可以使用:K,M,G,T
当B,Bps中的项目值显示在前端时,应用基准2(1K = 1024)。 否则使用10的基数(1K = 1000)。
另外还支持:P(peta)、E(exa)、Z(zetta)、Y(yotta)

2.6 给模板添加graphs(图形)配置

大部分数据是不需要出图了,一般CPU和网络还有程序的进程,cache的占用等一些需要图形来直观的查看和分析。

官网链接:https://www.zabbix.com/documentation/3.2/manual/config/visualisation/graphs/custom

这里我们以cpu的负载来举例:

图片.png

#可以点击图形右边的预览,看看有没有问题没,没问题就点击图中最下面的添加就可以了。

图形的属性:

Bash
Name(名称):Graph唯一的名字
Width(宽度): 图像在屏幕中的宽度(仅对饼行图/分解图有效)
Height(高度):图像在屏幕中的高度
Graph type(图形类别): Normal:常规图标,值用线条表示。Stacked:叠图就像cacti的流量图。Pie:饼形图。Exploded:分解饼形图。
Show legend(查看图例):勾选会显示图标中的说明
Show working time(查看工作时间):如果被选中,非工作时间用灰色背景显示,不能用于饼形图或分解图中
Show triggers(查看触发器):如果被选中,触发达到阀值会用红色的线条显示,不能用饼形图或是分解图表示,注意,只有部分触发器才支持在此处显示,如min、max函数可支持在图像中显示触发器的值。
Percentile line(left)(百分比线(左)):左边的Y轴用来显示百分比,例如,给定95%,线条就会在95%的数值处,仅对常规图表适用。
Percentile line(right)(百分比线(右)):右边的Y轴用来显示百分比,例如,给定95%,线条就会在95%的数值处,仅对常规图表使用
Y axis MIN value(纵轴Y最小值MIN) :Y轴表示的最小值,Calculated-Y(可计算的)轴表示自动计算值的最小值,Fixed-Y(固定的)轴表示修正最小值不能用于饼形图或是分解饼形图,Item(监控项)表示选择的items最后一次获取的数值将作为最小值
Y axis MAX value(纵轴最大值):Y轴表示的最大值

监控项里面的的参数:

Bash
Sort order(0->100):画图时应该从0的顺序开始,可以被用来画线条或区域在另一个之后(或之前),可以在开始的线条箭头处拖放项目,以设定分类顺序或绝对将哪一个项目放在另一个项目的前面
Name(名称):Item的名称显示的数据
Type:类型(仅对饼形图或是分解图饼形图使用),Simple:单一(简单),Graph sum:图表总数。这里上面的图因为选的不是饼形图,所以这里不显示这两个选项。
Function(功能):当一个Item存在不止一个值时,决定显示哪一个数据,all:全部(最小值、平均值和最大值),min:仅最小值,avg:仅平均值,max:仅最大值
Draw style(绘图风格):仅对常规图表使用,对叠图填充区域使用。Line线条:画线条,Filled region(填满的区域),Bold line(粗线),Dot(圆点),Dashed Line(画虚线),Gradient line(梯度线)
Y axis side(纵轴Y轴):Y轴的一侧是从左边开始还是右边开始,视图习惯一般从左边开始
Colour(颜色):在十六进制中引用RGB(红、绿、蓝)法。

2.7 添加主机关联模板

主机的添加上面已经介绍过了,下面主机添加完后关联下模板

图片.png

模板也关联了,zabbix_agentd也显示启动连接上了,我们看看是否能采集到新数据了吧:

图片.png

#上面关于items添加的时候utils那里已经说过了,设置的单位很重要,我们磁盘大小那里单位设置的是B,所以zabbix会自动的将收到的值除以1024换算下去,从Byte换算成了GB.内存那里也是一样的。

#去查看唯一的图形,load图形也出来了。就不截图了。

#这个图最后边还有个图形,这里没有截图,就算我们没有事先定义图形,在这里点击图形,也可以查看这个主机这个数据的绘图,如查看一个内存选项的图形:

图片.png

图片.png

2.8 模板关联

你说我不想自创模板太麻烦了,图省事那就关联模板白。

图片.png

#你关联了模板,监控项 触发器什么的不是可以启用和禁用吗,那你就把不想用的禁用掉吧,但是你禁用的是你所关联模板里面的选项,所以如果不想监控那么多项还是自创模板吧灵活一点。

#注意:上图中有个取消链接和取消链接并清理,这个要注意一下,取消链接的话模板会去掉但是应用级什么都会留下,而要什么都不留下的话就要选择取消链接并清理。

2.9 宏(Macros)定义

宏介绍:

宏是一种抽象(Abstraction),它根据一系列预定义的规则替换一定的文本模式,而解释器或编译器在遇到宏时会自动进行这一模式替换。(其实就是变量)类似地,zabbix基于宏保存预设文本模式,并且在调用时将其替换为其中的文本宏的命名规范:大写字母、0-9、下划线,只能大写字母开头。zabbix有很多内置宏前面已经提到了,宏可以应用在item keys和descriptions、trigger名称和表达 式、主机接口IP/DNS及端口、discovery机制的SNMP协议 的相关信息中等。

宏的优先级:

zabbix有全局宏,模板宏,主机宏。
优先级别:
主机宏(checked first)
主机模板定义的宏,如果有多个模板,那么按照模板(ID)越靠前那么宏的优先级越高
全局宏(checked last)

定义全局宏:

管理(Administration)=》一般(General)=》宏(Macrps)(右上角下拉框)

图片.png

定义模板宏:

图片.png

图片.png

#上面两个全局宏并非单纯的引用,我箭头标注了可以更改,你点击更改,然后这个宏就非全局宏了,就变成模板自己的宏了,你把这个宏删除了,就又变回全局宏了,这就是优先级的问题了。

# 不管是全局宏还是模板宏,最后还是要被其他的地方引用才有它的价值,我来举例,比如我大部分的虚拟机都是2核CPU4G内存,那么他们的cpu负载值一般设置成2啊,然后内存一般剩余多少MB就该触发器了,触发器一般定义在模板里面,那么这时候有个4核8G的虚拟机,那么他们的cpu负载就非2就应该是4了,那么你主机如果是自定义的触发器当然你可以改这个值了,但是一般触发器都是从模板继承的,你不能改,只能在模板的触发器里面改,但是模板里面的触发器把触发值改成了4,哪些2核CPU的就又不适用了。宏的价值就体现出来了。触发器来引用这个宏,如果个别主机有特殊情况,自己设置个宏就OK了。下面让我们来看例子:

图片.png

图片.png

图片.png

#从上面两张数据库中可以看到触发器引用的宏已经生效了。

主机宏:

比如现在我有一台新机器了是4C8G的,我也继承了我现在定义的linux客户端基本监控模板,那么一开始我的触发器里面的CPU负载肯定是2内存负载肯定是100M,这个可以自行查看一下。那么我要更改了。

图片.png

#直接在继承宏那里将这两个值改变一下。

图片.png

#然后就变成我们自己主机的宏了,当然主机宏的添加就照着上图这个来就行了。

图片.png

转载请注明:靠谱运维 » zabbix配置详解(三)

喜欢 (3)or分享 (0)
  
原文地址:https://www.cnblogs.com/feiyun8616/p/11353528.html