5 用户自定义参数

概述

用户自定义参数可以用来帮助用户实现通过Zabbix agent执行非Zabbix原生的 agent check。

你可以编写一个命令来检索所需的数据,并将其包含在用户自定义参数agent配置文件中 ('UserParameter'参数配置)。

用户自定义参数配置语法如下:

UserParameter=<key>,<command>

如你所见,一条用户自定义参数除了命令部分,还包括一个key。这个key将在配置监控项时使用。输入你觉得容易引用的key(key在一台主机中必须是唯一的)。

重启agent或使用agent新的在线控制选项,例如:

zabbix_agentd -R userparameter_reload

然后, 在配置一个监控项时, 输入指定的key来找到需要执行的用户参数的命令行。

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

/bin/sh 作为在UNIX操作系统中的命令行解释器使用。用户自定义参数参照agent check超时;如果超时时间到了,那么执行用户自定义参数的子进程将会被中止。

参见:

用户自定义参数用例

一个简单的命令:

UserParameter=ping,echo 1

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

一个复杂的例子:

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

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

灵活的用户参数

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

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

UserParameter=key[*],command
参数 说明
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(包括会被截断的尾随空白字符);数据库限制 同样适用。

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