2022 Zabbix中国峰会
2022 Zabbix中国峰会

4 用户自定义参数

概述

有时你可能想要运行一个代理检查,它不是用Zabbix预定义的,这时你会用到用户参数来帮忙。

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

用户参数具有以下语法:

UserParameter=<key>,<command>

如你看到的,用户参数还包含一个Key。 一个用户参数包含一个Key。输入你选择的Key,这将很容易引用(它在主机中必须是唯一的)。重新启动代理。

然后,当 配置一个监控项时, 输入要从执行的用户参数中引用该命令的Key。

用户参数是由Zabbix代理执行的命令。最多可以返回512KB的数据。 /bin/sh 在UNIX操作系统下用于命令行解释器。用户参数满足代理检查超时,如果达到超时,则分支用户参数进程终止。

请参考:

用户参数示例

简单的命令:

UserParameter=ping,echo 1

代理将始终使用'ping'键为一个监控项返回'1'。

一个更复杂的例子:

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

如果MySQL服务器是活动状态,代理将返回'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”。

<note important>使用$符号的位置引用仅由灵活的用户参数搜索并由Zabbix代理替代。对于简单的用户参数,跳过此类引用处理,因此任何$号引用都不是必需的。 :::

默认情况下,用户参数中不允许使用某些符号。请查阅 不安全的用户参数的完整列表文档。

示例 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]

命令结果

命令的返回值与标准错误一起按照标准输出。

<note important>在标准错误输出的情况下,文本(字符、日志或文本信息类型)监控项将被支持。 :::

返回文本(字符、日志、文本信息类型)的用户参数可以返回空格。 在无效结果的情况下,或执行退出代码不匹配0(零)的监控项将不被支持。