5 用户参数

概述

有时您可能需要run一个Zabbix未预定义的agent检查项,这正是用户参数发挥作用之处。

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

用户参数的语法如下:

UserParameter=<键值>,<命令>

如您所见,用户参数还包含一个键值。在配置监控项时需要使用该键值。请设置一个便于引用的自定义键值(该键值在一个主机中必须唯一)。

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

zabbix_agentd -R userparameter_reload

随后,当configuring an item时,输入键值即可引用您希望执行的用户参数中的命令。

用户参数是由Zabbix agent执行的命令。请注意,在item value preprocessing介入前最多可返回16MB数据。

在UNIX操作系统中,使用/bin/sh作为命令行解释器。用户参数遵循agent检查的超时设置;若达到超时时间,派生的用户参数进程将被终止。

另请参阅:

简单用户参数示例

一个简单的命令:

UserParameter=ping,echo 1

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

一个更复杂的示例:

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

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

灵活的监控项参数

灵活的用户参数接受带有键的参数。通过这种方式,一个灵活的用户参数可以作为创建多个 监控项 的基础。

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

UserParameter=key[*],command
参数 描述
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(包含尾随空格,超出部分会被截断);同时也适用 文本数据限制 的限制。

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