我已经创建了用户参数测量 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
尝试以 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}'
如果一切正常,请尝试使用 $$ 而不是 $ (mytime="$$...)
- 检查您的 zabbix 代理机器上的 UnsafeUserParameters 是否设置为“on”。您的 path_to_file 变量似乎包含“/”。请参阅用户手册:
除非启用了 UnsafeUserParameters 代理守护进程配置选项,否则不允许传递包含以下符号的灵活参数:\ ' “ ` * ? [ ] { } ~ $ ! & ; ( ) < > | # @。此外,也不允许使用换行符。