Zabbix 的 UserParameter 返回两个值,但没有一个是正确的

Zabbix 的 UserParameter 返回两个值,但没有一个是正确的

我已经创建了用户参数测量 iscsi lun 上的写入速度,如下所示:

UserParameter=write.perf.mon[*], mytime="$(time -p  (dd if=/dev/zero of=$1 oflag=direct bs=4k count=1000) 2>&1 1>/dev/null )"; echo "$mytime" | grep real | awk '{print $$2}'

如果使用正确的值从 shell 运行,它会产生以下输出:

2.78

当它由 zabbix 代理执行时,我可以在日志中看到正确的命令,但它显示以下内容:

7770:20150921:123734.823 Run remote command [ mytime="$(time -p  (dd if=/dev/zero of=path_to_file oflag=direct bs=4k count=1000) 2>&1 1>/dev/null )"; echo "$mytime" | grep real | awk '{print $2}'] Result [4] [0.00]...

并且 zabbix 收集零。

请帮忙提供任何线索,说明为什么会这样,以及如何修复

谢谢,

德米特里

答案1

检查哪个用户运行 zabbix_agent。
默认情况下,这是用户zabbix。检查以他的权限运行的命令链是否显示正确的值。很可能您没有足够的权限。

答案2

  1. 尝试以 zabbix 用户运行你的脚本

    su zabbix && mytime="$(time -p (dd if=/dev/zero of=path_to_file oflag=direct bs=4k count=1000) 2>&1 1>/dev/null )"; echo "$mytime" | grep real | awk'{print $2}'

  2. 如果一切正常,请尝试使用 $$ 而不是 $ (mytime="$$...)

  3. 检查您的 zabbix 代理机器上的 UnsafeUserParameters 是否设置为“on”。您的 path_to_file 变量似乎包含“/”。请参阅用户手册:

除非启用了 UnsafeUserParameters 代理守护进程配置选项,否则不允许传递包含以下符号的灵活参数:\ ' “ ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @。此外,也不允许使用换行符。

相关内容