第六章 监控项配置与管理

Zabbix系统中监控项(Items)的定义和管理非常重要,所有的监控指标都是通过定义不同的监控项收集数据。Zabbix通过主机作为一个逻辑单元组织和管理监控项,所有的监控项都必须属于某个主机,且在同一主机中只能有一个唯一的监控项存在。

6.1监控数据

Zabbix 不同于与大多数其他监控解决方案的一个重要特征是Zabbix通过监控项从被监控对象收集的数据是原始数据,而不是告警或状态的更新数据。大多数监控方案中,不管是通过agent或其他方法收集到监控数据后,会对该数据进行逻辑处理,然后将该数据的状态发送到服务器中保存,并进一步进行处理。数据的处理流程如下图6-1所示。

wKiom1kZJCvDkUksAABO3hDfe_8124.jpg

6-1

Zabbix中处理数据的流程会稍有不同,通过agent或其他方法收集到监控数据后,会直接发送到服务器中进行保存,然后触发器逻辑会判断数据的变化情况,进行下一步处理。在Zabbix中收集的数据和特定的触发器的条件(如通过、失败、正常、警告、错误等)没有任何的关联,在服务器的数据库中保留原始的监控数据,并对数值类型的监控项数据,可以保留不同期间内的汇总和趋势,像最小值、最大值和平均值等。如下图6-2所示。

wKiom1kZJDjwtqrgAABRFOnCn98898.jpg

6-2

Zabbix采取数据和决策逻辑分离的方式有两个优势:

首先,Zabbix中收集到的监控数据和触发器逻辑、告警没有直接的关联,这样我们可以把Zabbix作为一个纯粹的数据收集器,并将这些数据通过图形等可视化的方式展现出来,这在实际环境中是非常有用的。举个例子,我们需要监控交换机每个端口的流量,目的只是收集数据建立基准线,评估可能的瓶颈,为扩展网络基础架构的规划提供依据。类似的情况还有很多,比如说CPU的使用率、存储的容量、特定应用的用户并发率等等。

其次,所有收集到的原始数据统一保存在数据库中,而不是某一次的监控数据或某一监控项的一部分监控数据。对于触发器和决策逻辑你可能需要完整的数据来确切的定义你想要监控和告警的事件种类,这时你可以关联到监控项的所有历史数据。

Zabbix 中监控项本质上可以理解为一个关联到主机的某种数据类型的标识符(或指标)。而这个标识符通常是一个名称和关联的监控项key,用来区分在整个监控环境中定义的成千上万的监控项中关联到主机中的监控项。监控项的数据类型也非常重要,Zabbix通过数据类型指定怎样保存数据,怎样可视化数据(数值类型的监控项能自动生成简单的图形,字符类型不能生成图形),在触发器中可以指定哪些函数能够应用到监控项进行处理。

近日完成《深入浅出 zabbix 4.0》视频教程的录制并正式发布,该教程基于 zabbix 4.2 ,对Zabbix进行全面讲解。欢迎大家围观。课程链接:https://edu.51cto.com/sd/ce000 

6.2 监控项的类型

Zabbix中监控项根据连接的方式划分出多种类型,也就是我们在第三章中介绍过的监控方式,它们之间依据不同的监控目标可以互相替换使用,但也有不能替换的监控方式,为完成监控目标只能使用某种类型,例如Zabbix aggregate监控方式。监控项收集监控数据时,根据数据流的方向不同,我们可以归为两类:Passive(被动式)Active(主动式)Passive意味着由Zabbix server发起初始化连接,Active意味着初始化连接是由被监控端发起。如下表6-1所示。

6-1

Item type

方向

可替换为

Zabbix agent

Passive(被动式)

Zabbix agentactive

Zabbix agentactive

Active(主动式)

Zabbix agent

Simple checks

Passive(被动式)

Zabbix trapper

SNMP agent

Passive(被动式)

Zabbix trapper

SNMP trap

Active(主动式)


Zabbix internal

Server监控自身收集数据


Zabbix trapper

Active(主动式)

取决于监控数据的性质

Zabbix aggregate

使用数据库中已有的数据


External checks

Passive(被动式)

Zabbix trapper

Database monitor

Passive(被动式)

Zabbix trapper

IPMI agent

Passive(被动式)

Zabbix trapper

SSH agent

Passive(被动式)

Zabbix trapper

TELNET agent

Passive(被动式)

Zabbix trapper

JMX agent

Passive(被动式)

Zabbix trapper

Calculate

使用数据库中已有的数据


 

6.3 监控项的Key

定义监控项的Key时,要遵从Zabbix中定义的监控项Key的格式,如下图6-3所示。

wKioL1kZJGSj7DH9AABCrP2dCwI325.jpg


6-3

其中Key为名称,在Key名称后面可以带参数,也可以不带参数。

Key名称在同一主机中必须是唯一的,不能有相同的名称存在。命名时使用的字符是有限制的,只允许使用下列的字符:

  • 所有的数字(0-9

  • 所有的小写字母(a-z

  • 所有的大写字母(A-Z

  • 下划线 _

  • 短划线 -

  • .

如下图6-4所示。

wKiom1kZJHTTMDSSAAAxORJoi5k421.jpg

6-4

例如:

  • vfs.fs.size[/]

  • vfs.fs.size[/opt]

Key可以传递多个参数,这些参数必须用逗号分隔。如下图6-5所示。

wKioL1kZJH6xbJY6AAA3YIEqjh4401.jpg

6-5

其中每个parameter(参数)可以是带引号的字符串或者是不带引号的字符串,也可以是一个数组。如下图6-6所示。

wKioL1kZJIiyWtw4AABVk3kwyOU700.jpg

6-6

想使用默认值时,参数也可以留空,但是必须要用逗号分隔,例如:icmpping[,,200,,500]中指定了ping的间隔时间为200毫秒,超时为500毫秒,其他的参数留空表示使用默认值。

如果参数是带引号的字符串,使用的双引号必须用反斜杠(\)进行转义,双引号中间可以使用任意Unicode字符。

如果参数是不带引号的字符串,除了逗号和右方括号外任意的Unicode字符都可以使用。

如果参数是一个数组,需要使用方括号括起来,多个参数间用逗号分隔。

6.4 监控项的单位

Zabbix中支持多种单位(Units)符号的使用,如果设置了单位符号,Zabbix将在接收数据后增加后置处理,并按照设置的单位显示。

系统默认的,如果原始值超过1000,它会除以1000并相应的显示。例如:设置单位是bps,如果接收数据的值是881764,将会显示881.76Kbps。当使在用单位Bbyte)、Bpsbytes per second)时,它会除以1024,因此在Zabbix中会显示:11B/1Bps10241KB/1KBps15361.5KB/1.5KBps

和时间相关的单位的处理包括:

  • Unixtime:将接收数据的值转换为yyyy.mm.dd hh:mm:ss。为了转换成功,监控项数据必须是一个Numericunsigned)数值类型。

  • 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个主要的单位,像1m 15d 5h 2h 4m 46s。如果没有day,只显示 1m 5h(不会显示分钟、秒或微秒)。如果接收的值小于0.001,将会显示为 < 1ms

Zabbix中也保留了一些单位字符如:msrpmRPM%

6.5 自定义intervals

Zabbix中每个监控项收集数据的时间间隔可以通过设置 Updateintervalin sec)来实现,例如你可以设置为30,意味着每隔30秒就收集一次监控项的值,这种设置简单,不够灵活。因此Zabbix中提供了Flexible intervalsscheduling intervals两种方式可以灵活的设置监控项收集数据的时间。

6.5.1 Flexible intervals

Flexible intervals允许为特定的时间段重新定义默认更新的时间间隔,一个flexible intervalsIntervalPeriod来定义。

Interval是特定时间段中更新的时间间隔。

Period是使用flexible interval的时间段。用来定义Period的格式为d-d,hh:mm-hh:mmd为星期几,1代表星期一,2代表星期二,3代表星期三,… 7代表星期日。hh为小时,00 – 23mm为分钟,00 – 59。例如,1-5,09:00-18:0的意思是星期一到星期五的上午9点到下午18点。也可以指定多个用分号分隔的时间段,如d-d,hh:mm-hh:mm;d-d,hh:mm-hh:mm...。例如,1-5,09:00-18:00;6-7,10:00-16:00的意思是周一到周五的上午9点到下午18点,周六和周日上午10点到下午16点。

最多可以设置7flexible intervals,如果多个flexible intervals重叠时,将使用重叠时间段内最小的Interval值。需要注意的是如果重叠的flexible Intervals的最小值是0,这时候对监控项的数据不再进行收集。在flexible intervals定义的时间段外,使用Updateintervalin sec)中设置的时间间隔收集数据。

如果定义的interval正好等于时间段的长度,监控项只收集一次数据。如果interval大于时间段,监控项可能会收集一次数据或一次都没有,因此不建议这种配置。如果interval小于时间段,那这个监控项最少会收集一次数据。

如果interval设置为0,那这个监控项在设置的时间段内不会收集数据。在设置的时间段结束时按照Update intervalin sec)中的时间间隔恢复对数据的收集。例如下表6-2所示。

6-2

Interval

Period

说明

10

1-5,09:00-18:00

在工作时间内每10秒钟收集一次监控项数据

0

1-7,00:00-7:00

晚上0点到7点停止收集监控项数据

0

7-7,00:00-24:00

星期日停止收集监控项数据

60

1-7,12:00-12:01

每天12点收集一次监控项数据

 

6.5.2 Scheduling intervals

Scheduling intervals用来在特定的时间收集监控项数据。flexibleintervals旨在重新定义默认收集监控项数据的时间间隔,而Schedulingintervals用于指定一个独立的收集监控项数据的时间表,它们是并行执行的。

一个Scheduling interval的定义格式是:md<filter>wd<filter>h<filter>m<filter>s<filter>mdmonth dayswdweek dayshhoursmminutessseconds<filter>是用来指定特定前缀(例如dayshoursminutesseconds)的值,它有自己的书写格式:[<from>[-<to>]][/<step>][,<filter>]。格式中各参数的含义如下:

  • <from> <to> 定义了匹配值的范围。如果<to> 被省略时filter会匹配一个<from> <from> 的范围,如果<from> 也被忽略了,那filter匹配所有可能的值。

  • <step> 定义了一个步长,默认的步长值是1,意味着在定义的范围内匹配所有的值。

  • filter是一个可选项,可用来定义多个匹配值。Scheduling interval中至少要定义一个filter,这个filter必须定义一个范围或步长。

有效的<from> <to> 的值如下表6-3所示。

6-3

前缀

说明

<from>

<to>

md

Month days

1 - 31

1 - 31

Wd

Week days

1 - 7

1 - 7

H

Hours

0 - 23

0 - 23

M

Minutes

0 - 59

0 - 59

s

Seconds

0 - 59

0 - 59

<from> 的值必须小于或等于 <to>的值,<step> 的值必须大于或等于1,也可以小于或等于 <to> - <from>的值。

单数字的month dayshoursminutesseconds的值前面可以加0,例如 md01-31h/02等是有效的定义,但像md01-031 wd01-07week days不能加0)就是无效的定义。

Zabbix Web前端页面中,需要使用多个Schedulingintervals时可以设置添加多行intervals。在Zabbix API中可以写成一行,每个Schedulingintervals之间需要用分号分隔。执行时如果同时和多个intervals中定义的时间都匹配,那也仅执行一次,例如wd1h9;h9只在周一早上9点执行一次,不会因定义了2h9而执行两次。

为了更好的理解Scheduling intervals的定义,下面我们举些例子一起来看看。

  • m0-59 :每分钟执行

  • h9-17/2 :从9:0017:002个小时执行(9:00, 11:00 …

  • m0,30 m/30 :在每小时的hh:00hh:30执行

  • m0,5,10,15,20,25,30,35,40,45,50,55 m/5 :每5分钟执行

  • wd1-5h9 :每周一到周五9:00执行

  • wd1-5h9-18 :每周一到周五的9:0010:0018:00执行

  • h9,10,11 h9-11 :每天的9:0010:0011:00执行

  • md1h9m30 :每个月的第一天的9:30执行

  • md1wd1h9m30 :每个月的第一天并且是周一的9:30执行

  • h9m/30 :在9:009:30执行

  • h9m0-59/30 :在9:009:30执行

  • h9,10m/30 :在9:009:3010:0010:30执行

  • h9-10m30 :在9:3010:30执行

  • h9m10-40/30 :在9:109:40执行

  • h9,10m10-40/30 :在9:109:4010:1010:40执行

  • h9-10m10-40/30 :在9:109:4010:1010:40执行

  • h9m10-40 :在9:109:119:12 … 9:40执行

  • h9m10-40/1 :在9:109:119:12 … 9:40执行

  • h9-12,15 :在9:0010:0011:0012:0015:00执行

  • h9-12,15m0 :在9:0010:0011:0012:0015:00执行

  • h9-12,15m0s30 :在9:00:3010:00:3011:00:3012:00:3015:00:30执行

  • h9-12s30 :在9:00:3010:00:3011:00:3012:00:30执行

  • h9m/30;h10 :在9:009:3010:00执行

  • 6.6 创建监控项

监控项可以在模板或主机中创建,建议在模板中创建,这样只需要创建一次,就可以连接到多个主机中使用。需要调整监控项的配置参数时,只需要修改一次,即可在连接该模板的主机中直接生效,降低日常维护的工作量,由此可见在模板中创建监控项的好处。

Configuration --> Templates 页面中找到需要创建监控项的模板,点击该模板的items链接,或者在Configuration--> Hosts 页面中找到需要创建监控项的主机,点击该主机的items链接,进入items页面,点击右上角的Create item按钮。

下面通过在模板中创建监控项的方式来介绍创建监控项的步骤:

1、   进入items页面,点击Create item按钮。

2、   item配置页面,填写相关信息。

3、   点击Add按钮保存。

4、   把模板连接到主机上。

 

监控项配置页面如下图6-7所示。

wKiom1kZJKPRu5naAAD6Joke_Ng354.jpg

6-7

监控项配置页面中各参数的含义如下:

  • Name:监控项的名称。可以使用宏变量,也可以从Key中引用$1$2 … $9参数,例如:设置监控项名称为Freedisk space on $1,如果监控项Key vfs.fs.size[/,free],那监控项名称将变为Freedisk space on /$1/,$2free)。

  • Type:监控项的类型。详见第三章中介绍的监控方式。

  • Key:监控项的Key。请参考前面6.3节的内容,如果监控项类型选择Zabbix agentZabbix agentactive)、Simple checkSNMP trapZabbix internalZabbix aggregateDatabasemonitor时,Key的值必须能被Zabbix serverZabbix agent支持。这个Key在同一主机中必须是唯一的。

  • Type of information:完成转换后保存到数据库中的数据类型。

  • Numericunsigned):64位无符号整数。

  • Numericfloat):浮点数,MySQL中允许的范围是-999999999999.9999 999999999999.9999 (double(16,4)),也支持科学记数法,例如1e+70,1e-70

  • Character:字符或字符串,MysqlPostgresqlOracle中限制为 255 个字节。

  • Loglog日志文件。Mysql中允许65536个字节,PostgresqlOracle中限制为65536个字符。

  • Text:文本。Mysql中允许65536个字节,PostgresqlOracle中限制为65536个字符。

  • Data type:当Type of information中选择Numericunsigned)时用来指定不同的数据类型。

  • Boolean:文字转换成01保存。TRUE存储为1FALSE存储为0,所有的值都匹配不区分大小写的方式。Truetyesyon uprunningenabledavailable都识别为TRUEfalsefnonoffdownunuseddisabledunavailable都识别为FALSE。另外,任意非零的数值都认为是TRUE0被认为是FALSE

  • Octal:八进制数据。

  • Decimal:十进制数据。

  • Hexadecimal:十六进制数据。

Zabbix将自动完成文字到数值的转换,即便一个主机是由Zabbix proxy监控的,转换也是由Zabbixserver完成的。

  • Units设置单位符号,详见本章6.4节。

  • Use custom multiplier:如果启用该选项,所有接收到的值将会乘以设置的整数或浮点数。使用这个选项可以把KBMBps等转换为BBps。否则Zabbix中无法正确设置前缀(KMG等)。从Zabbix 2.2版本开始也支持科学计数法,如 1e+70

  • Update intervalin sec):监控项每次收集数据的间隔时间,单位是秒。如果设置为0,监控项将停止收集数据,如果在Customintervals中(无论是flexible还是scheduling)设置了非0的值,监控项将按照该值收集数据。

  • Custom intervals:自定义监控项收集数据的时间,详见本章6.5节。

  • History storage periodin days):数据库中保留详细历史数据的天数。超出保留时间的旧数据会由housekeeper删除。该参数中定义的值可以覆盖在Administration --> General --> Housekeeper中设置的值。如果在Housekeeper中设置了全局的值,在设置该参数时将会显示一个警告信息。建议设置一个比较小的值以减少history在数据库中的大小。如果想保存比较长的历史记录,可以设置比较长的trends的保存时间。

  • Trend storage periodin days):在数据库中保存历史的趋势数据(每小时的minmaxavgcount)。超出保留时间的旧数据会由housekeeper删除。该参数中定义的值可以覆盖在Administration--> General --> Housekeeper中设置的值。如果在Housekeeper中设置了全局的值,在设置该参数时将会显示一个警告信息。需要注意的是只有Numeric类型的数据可以保存为趋势数据,像characterlogtext都不能保存为趋势数据。

  • Store value:监控值的保存方式。有以下几种:

  • As is:不做任何处理,保持原值。

  • Deltaspeed per second):通过公式(value-prev_value)/(time-prev_time)计算,其中value是当前的值,prev_value是上一次的值,time是当前的时间,prev_time是上一次的时间。这个设置对收集不断增长的每秒的速率是非常有用的。需要注意的是,如果当前的值小于上一次的值,Zabbix会丢弃计算的差值不做保存,等待下一次收集的值进行计算。例如通过SNMP监控交换机等设备端口流量时会设置这种方式。

  • Deltasimple change):通过公式(value-prev-value)计算,其中value是当前的值,prev-value是上一次的值。

  • Show value:对收集到的监控项数据进行映射。值映射后不会改变原值,仅仅是界面显示变化了。只支持整数类型的监控项。不需要进行值映射时选择As is保持原值。

  • Log time format:只有在Type选择Log时会出现,支持下列占位符:

  • yYear1970-2038

  • MMonth01-12

  • dDay01-31

  • hHour00-23

  • mMinute00-59

  • sSecond00-59

如果timestamp为空值将不做解析处理。

例如,在Zabbix agent日志文件中有这样一行:23480:20100328:154718.045 Zabbix agent started. Zabbix 1.8.2(revision 11211)。其中开头的6个字符是PID,接下来是日期、时间和其他内容,那这行Log的时间格式为pppppp:yyyyMMdd:hhmmss。在这里p和:只是一个占位符,除了yMdhms外可以是其他任意格式。

  • New application:设置新的监控项组名称。创建监控项时可以同时创建监控项组。

  • Application:连接监控项到一个或多个已经存在的监控项组。

  • Populates host inventory field:当主机中Host inventory设置为Automatic时,该监控项的值会自动推送给选择的inventroy字段。

  • Description:监控项的描述信息。

  • Enabled:勾选为启用该监控项。

  • 更新监控项

Items页面(Configuration--> Hosts --> Items或者Configuration --> Templates --> Items)列表中,点击Name列中想要更新配置的监控项名称,进入监控项配置界面修改配置参数,然后点击页面下方的Update按钮保存。

如果需要对多个监控项进行更新,Zabbix给我们提供了一个批量更新的功能,当你从列表中选中多个监控项后,点击页面左下方的Mass update按钮可以进行批量更新,完成更新后点击Update按钮保存。

6.8 克隆监控项

在主机中配置监控项时,有时候添加监控项时,每个监控项的配置基本相同,但数量比较多,这时候我们可以先创建后一个监控项,然后克隆这个监控项。

需要克隆监控项时,首先要打开监控项的配置页面,在页面左下方你会看到Clone按钮,点击Clone按钮后会出现一个新的监控项的配置页面,这个配置页面中的各个参数都是原来监控项中已经配置好的。你至少要修改监控项Key的配置,在主机中,监控项的名称可以相同,但是Key必须是唯一的。修改完成后点击Add按钮添加监控项。

6.9 复制监控项

一个主机中的监控项可以复制到另一个主机、模板或主机组。在主机的监控项列表中选择需要复制的监控项,然后点击Copy按钮,根据你的需要选择相应的目标类型(主机组、主机或模板)和目标,点击Copy按钮完成监控项的复制。如下图6-8所示。

wKioL1kZJLij_VfnAABRixhC3cQ097.jpg

6-8

复制的监控项配置是完全一样的,在复制过程中你没有修改配置的机会,和克隆不一样,克隆的过程中你可以修改配置。

6.10 清除监控项历史数据

当你想清除某些监控项的历史和趋势数据时,可以在主机的监控项列表中选择相应的监控项,然后点击Clear history按钮,页面中会弹出是否删除历史数据的确认,点击确定按钮,完成删除。如下图6-9所示。wKiom1kZJPXzcAZ_AAAWRz91mbo668.jpg

6-9

6.11 过滤监控项

   在实际环境中,一些主机上会有很多监控项,在主机的监控项列表中对某个监控项进行操作时,可以通过Filter进行过滤,快速的定位。在设置过滤条件时可以使用主机、组、监控项名称、监控项Key、类型、状态等进行组合条件的过滤。如下图6-10所示。

wKiom1kZJQCwQohTAACHY_-T9l8901.jpg

6-10

6.12 删除监控项

   在主机的监控项列表中选择需要删除的监控项,点击Delete按钮就可以删除选中的监控项及其历史数据。在实际操作时,建议先将监控项设置为禁用状态,不要直接删除。

 


za-me.jpg

本文出自 http://ustogether.blog.51cto.com/8236854/1925780,如需转载请与作者联系。