5 用户自定义参数

概述

有时你可能希望运行一个 Zabbix 中未预定义的 agent 检查。这时,用户参数就派上用场了。

你可以编写一个用于获取所需数据的命令,并将其包含在 agent 配置文件 中的用户参数里(UserParameter 配置参数)。

用户参数具有以下语法:

UserParameter=<key>,<command>

如你所见,用户参数也包含一个 key。在配置监控项时,这个 key 是必需的。请输入一个你选择的、便于引用的 key(它在同一主机内必须唯一)。

重启 agent,或使用 agent 的 运行时控制 选项来加载新参数,例如:

zabbix_agentd -R userparameter_reload

然后,在配置监控项时,输入该 key,以引用你希望执行的用户参数中的命令。

用户参数是由 Zabbix agent 执行的命令。 请注意,在 监控项值预处理 步骤之前,最多可以返回 16MB 的数据。

在 UNIX 操作系统下,/bin/sh 用作命令行解释器。 用户参数遵循 agent 检查超时;如果达到超时时间,已 fork 的用户参数进程将被终止。

另请参见:

用户自定义参数用例

一个简单的命令:

UserParameter=ping,echo 1

agent 将始终为使用“ping”为key的监控项返回“1”。

一个复杂的例子:

UserParameter=mysql.ping,mysqladmin -uroot ping | grep -c alive

如果Mysql服务器是活动状态,agent将返回“1”,否则会返回“0”。

灵活用户参数

灵活用户参数接受带有键的参数。这样,灵活用户参数就可以作为创建多个监控项的基础。

灵活用户参数具有以下语法:

UserParameter=key[*],command
Parameter Description
Key 唯一的监控项键。\[\*\] 定义了此键接受方括号内的参数。
在配置监控项时提供这些参数。
Command 用于计算该键值的要执行命令。
仅适用于灵活用户参数
您可以在命令中使用位置引用 $1…$9 来引用监控项键中的相应参数。
Zabbix 会解析监控项键中 [ ] 包含的参数,并相应地在命令中替换 $1,...,$9
$0 将被替换为要运行的原始命令(在展开 $0,...,$9 之前)。
无论位置引用是否用双引号 (") 或单引号 (') 括起来,都会被解释。
若要原样使用位置引用,请指定双美元符号,例如 awk '{print $$2}'。在这种情况下,$$2 在执行命令时实际上会变成 $2

带有 $ 符号的位置引用仅由 Zabbix agent 在灵活用户参数中进行搜索和替换。对于简单用户参数,会跳过此类引用处理,因此不需要对任何 $ 符号进行转义。

默认情况下,用户参数中不允许某些字符。完整字符列表请参见 UnsafeUserParameters

示例1

先来一个简单的:

UserParameter=ping[*],echo $1

我们可以定义无数个监控项来监控所有形如ping[something]格式的东西。

  • ping[0] - 将总是返回 ‘ 0 ’
  • ping[aaa] - 将总是返回 ‘aaa’
示例2

让我们更进一步!

UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping | grep -c alive

这个用户自定义参数可以用来监控 MySQL 数据库的可用性状态。我们可以传入用户名和密码:

mysql.ping[zabbix,our_password]
示例3

一个文件中有多少行匹配正则表达式?

UserParameter=wc[*],grep -c "$2" $1

这个用户自定义参数能用来计算一个文件中有多少行匹配相应的表达式。就像下面一样:

wc[/etc/passwd,root]
wc[/etc/services,zabbix]

命令结果

命令的返回值为命令产生的标准输出以及标准错误。

返回文本(字符、日志或文本类型信息)的监控项在出现标准错误输出时,不会变为不支持。

返回值限制为 16MB(包括会被截断的尾随空白字符);数据库限制 同样适用。

返回文本(字符、日志或文本类型信息)的用户参数也可以返回空白字符。 如果结果无效,监控项将变为不支持。