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

对于具有“ping”键的监控项,agent将始终返回“1”。

一个更复杂的示例:

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

如果MySQL服务器处于运行状态,agent 将返回 '1',否则返回 '0'。

灵活用户参数

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

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

UserParameter=key[*],command
Parameter Description
Key 唯一的监控项 key。\[\*\] 表示此 key 接受方括号内的参数。
在配置监控项时提供这些参数。
Command 用于计算 key 值的要执行命令。
仅适用于灵活用户参数
您可以在命令中使用位置引用 $1…$9 来引用监控项 key 中相应的参数。
Zabbix 会解析监控项 key 中 [ ] 包含的参数,并相应地在命令中替换 $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(包含尾随空格,超出部分会被截断);同时也适用 文本数据限制 的限制。

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