内容简介

在很多情况下,我们需要更加复杂的监控方式、监控指标,这时候就需要自定义监控项。

本文件简单介绍了在Zabbix中有关监控项(Item)添加及监控项管理相关内容。

什么是监控项?

监控项是要获取的指标。由要获取的数据、获取频率、数据类型保存时间等等组成。检测周期影响了数据获取,可影响Zabbix Server的频率。

如何添加监控项?

监控项可以在「Host」中添加,也可以在「Template」中添加。在「Template」中添加的监控项可以复用。

# 第一步、添加监控项

这里演示在Template中添加。依次找到「Configuration - Templates - Items - Create Item」后,进入监控项的创建页面:

		**# Name** - 监控项的名称。
		**# Key **- 监控项的值。(1)可以自行选择,但是“自定义KEY”(后面介绍)需要手动填入。(2)然后,将''[<xxx>]''中的值修改为特定参数(参考「[[https://www.zabbix.com/documentation/4.2/manual/config/items/itemtypes|4.2/Item types]]」手册)。比如要统计内存总大小,在选择''vm.memory.size[<mode>]''之后,修改为''vm.memory.size[total]''既可(当然除了''total''还有其他的参数可选择)。

在页面中的其他输入框,如字面含义一样,详细可以参考「4.2/2 Items」文档。下面只简单列举一部分:

   
Name 监控项名称
Type 监控项的类型
Key 该监控项对应的KEY名
Type of information 所获取到的信息的类型
Update interval 数据的获取频率
Custom intervals 自定义频率,可以重定义Update interval的规则

关于「KEY」格式
(1)在页面中的KEY字段,它的值可以有KEY或者KEY[PARAM]两种格式,即“有参数”与“无参数”两种。
(2)其中KEY的合法命名使用正则表示为:[a-zA-z0-9-_.]
(3)其中PARAM为参数,格式可以是“引号字符串”,“非引号字符串”,“数组”这三种。“引号字符串”形如:vm.memory.size["total"];“非引号字符串”形如:vm.memory.size[total],如果有引号则要使用反斜线转义,不能使用逗号及方括号;“数组”形如:icmping[,,200,,500],多个参数之间使用逗号分隔,没有可不填写,表示采用默认值。

# 第二步、检查监控项

在配置结束之后,可以使用zabbix_get命令进行验证。这个验证是检查KEY配置是否正确。

执行zabbix_get --host 'agent_ip_addr' -k vm.memory.size[total]命令,如果由正常的返回值,则表示KEY的配置是正常的,也表示Zabbix Server能够访问Zabbix Agent来或者值。

注意,命令zabbix_get命只能用于验证TypeZabbix agent的监控项,不能用于Simple Check、JMX等等这些类型的监控项。

自定义监控项

由Zabbix自带的监控项可能并不能满足我们的需求,我们需要自定义监控项。

# 如何自定义监控项?

自定义的“监控项”目前只支持Zabbix agent类型,也就是说需要修改Zabbix Agent服务的/etc/zabbix/zabbix_agentd.conf配置文件(或者在/etc/zabbix/zabbix_agentd.d/中自定义配置,然后在zabbix_agentd.conf中引入该配置)。

配置文件格式如下:

# 不传递参数
UserParameter=key,command

# 传递参数
UserParameter=key[*],command $1 $2 $3...

# 例如,如下自定义监控项
UserParameter=redis.standalone.info[*],redis-cli -h $1 -p $2 -a $3 INFO

# 在使用该KEY时
redis.standalone.info[127.0.0.1,6379,123456]

# 监控项的注意事项

(1)自定义参数中的KEY必须是唯一的,否则在启动Zabbix Agent时会出现错误,在日志中会显示错误消息。
(2)传递给KEY的参数,会被依次传递给命令。第一个参数对应命令中的$1,第二个参数对应命令中的$2,以此类推。
(3)如果参数中需要使用某些特殊字符(例如*、&、"等等,这些符号会造成命令注入),需要开启UnsafeUserParameters=1设置。
(4)如果命令中要使用$符号,应该进行“双写”转义。例如:awk '{print $$1}'
(5)返回值类型可以是字符、文本等等,如果返回的是无效值,则会显示ZBX_NOTSUPPORTED消息。

# 检查新的监控项

依旧可以使用zabbix_get命令查看配置的KEY是否正确,或者使用zabbix_agentd -p命令查看所有支持的监控项。

监控项类型

# 不同的类型

在Zabbix中,它支持多种类型的监控项,比如Zabbix agent,Simple check等等,还可以对日志、数据库进行监控。

监控项类型不同代表着:数据收集方式不同、数据处理方式不同。

而在现实场景中,具体使用那种类型视情况而定。这里不再列举,详细参考「4.2/2 Item types」手册。

# 常用类型

下面列举了某些监控项类型及作用:

类型 作用
Zabbix internal 对自身进行检测,自身监控。
Zabbix agent 最常用的模式,被动获取数据。
Zabbix agent (active) 主动模式。日志的监控需要使用该模式。
Simple check 简单检查,在没有运行Zabbix Agent时,检查远程主机。
Zabbix aggregate 聚合操作,将一定时间内的数据进行聚合(有平均、最大、最小等等)。
Calculated 可以根据多个监控项进行计算,由Zabbix Server进行。并且可自定义KEY名,然后被其他监控项引用。
Dependent items 该类性的监控项,依赖于某个监控项,可以从其他监控项的结果中获取值。

这里不再一一列举,详细可以参考「4.2/2 Item types」手册。

关于「Dependent items」类型

-「zabbix UserParameter return 2 or more values」
该类型值得一提。可以创建一个监控项,该监控项一次请求获取很多值(比如REDIS INFO获取信息)。然后,其他多个监控项都依赖于该监控项,从前面的监控项的结果中过滤值。这样在数据量不变的情况下,可以减少网络压力,同时也降低了zabbix_agentd.conf配置文件的复杂度,但是可能增加了模板或者主机的配置。

维护时间

可以设置维护时间(Configuration - Maintance)。还要配置Action(Configuration - Actions - Action),在维护时间内不告警。

事件确认

事件发生后,可以手动进行确认。

数据导入与配置导出

配置文件可以从Zabbix中导出,也可以导入到Zabbix中。导入在页面右上角,导出在页面最下面。