5 用户自定义参数

概述

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

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

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

  1. UserParameter=<key>,<command>

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

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

  1. zabbix_agentd -R userparameter_reload

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

用户自定义参数是由Zabbix agent来执行命令的。在监控项预处理步骤前,最多可以返回512KB的数据。但是,请注意,最终可以存储在数据库中的文本值,在MySQL上的限制为64KB(其他数据库的信息请参阅数据表)。

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

参见:

用户自定义参数用例

一个简单的命令:

  1. UserParameter=ping,echo 1

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

一个复杂一些的例子:

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

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

灵活的用户自定义参数

灵活的用户自定义参数可以从key中接受参数。这是一种使用一个用户自定义参数创建多个监控项的方式。

灵活的用户自定义参数的语法如下:

  1. UserParameter=key[*],command
参数描述
Key唯一的监控项key。 [*] 用于定义该key接受括号内的参数。
参数需在配置监控项时给出
Command命令在执行时,引用key中指定的值
只对灵活的用户参数有效:
你可以在命令中使用位置引用$1 … $9来引用监控项Key中的相应参数。
Zabbix解析监控项Key的[]中包含的参数,并相应地替换$1,…,$9。
$0会替换为完整的原始命令(在对$0,…,$9执行替换之前的命令)运行。
不管位置参数($0,…,$9)是用双引号( “ )还是单引号( ‘ )括起来,都会解析位置引用。
要使用位置引用解析,请指定双美元符号($) - 例如, ‘’ awk ‘{print $$2}’ ‘’ 。 在这种情况下,执行命令时, $$2 实际上会变成 $2

仅对灵活的用户自定义参数进行带有$符号的搜索,并由Zabbix agent解析替换。 对于简单的用户自定义参数,这种引用会被跳过,因此不需要任何$符号引用。

默认情况下,不允许用户在用户自定义参数中使用某些特殊符号。详情请移步 不安全的用户参数 ,查询相关的符号列表

示例1

先来一个简单的:

  1. UserParameter=ping[*],echo $1

我们可以定义无数个监控项来监控所有形如ping[something]格式的东西。

  • ping[0] - 将总是返回 ‘ 0 ’
  • ping[aaa] - 将总是返回 ‘aaa’
示例2

让我们更进一步!

  1. UserParameter=mysql.ping[*],mysqladmin -u$1 -p$2 ping | grep -c alive

这个用户自定义参数可以用来监控 MySQL 数据库的可用性状态。我们可以传入用户名和密码:

  1. mysql.ping[zabbix,our_password]
示例3

一个文件中有多少行匹配正则表达式?

  1. UserParameter=wc[*],grep -c "$2" $1

这个用户自定义参数能用来计算一个文件中有多少行匹配相应的表达式。就像下面一样:

  1. wc[/etc/passwd,root]
  2. wc[/etc/services,zabbix]

命令执行结果

命令的返回值是标准输出和标准错误。

标准错误情况下,不支持文本(字符、日志或是文本类型的信息)的监控项

返回文本的用户自定义参数(字符,日志,文本信息类型)可以返回空格。如果结果不可用,那么这个监控项会变为不支持状态。