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检查超时设置;若达到超时时间,派生的用户参数进程将被终止。
另请参阅:
- 关于利用用户参数的Step-by-step tutorial说明
- Command execution
简单用户参数示例
一个简单的命令:
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(包含尾随空格,超出部分会被截断);同时也适用 文本数据限制 的限制。
返回文本(字符、日志或文本类型的信息)的用户参数也可以返回空格。
如果结果无效,则该 监控项 将变为不支持状态。