用户参数和 ZBX_NOTSUPPORTED
Posted
技术标签:
【中文标题】用户参数和 ZBX_NOTSUPPORTED【英文标题】:userparameters and ZBX_NOTSUPPORTED 【发布时间】:2016-01-24 14:19:09 【问题描述】:我想从我所有运行 zabbix 代理的服务器上 ping 一个外部 ip。
我搜索了一些关于zabbix用户参数的文章。
在/etc/zabbix/zabbix_agentd.conf.d/
中,我创建了一个名为userparameter_ping.conf
的文件,其内容如下:
UserParameter=checkip[*],ping -c4 8.8.8.8 && echo 0 || echo 1
我在 zabbix 服务器中创建了一个名为 checkip
的项目,带有一个图表,但没有得到任何数据。经过一番挖掘,我找到了zabbix_get
并测试了我的用户参数,但我得到了错误:ZBX_NOTSUPPORTED
# zabbix_get -s 172.20.4.43 -p 10050 -k checkip
我的 zabbix 版本:
Zabbix Agent (daemon) v2.4.5 (revision 53282) (21 April 2015)
有人知道我能做些什么来解决这个问题吗?
【问题讨论】:
【参考方案1】:经过一些更改并与邮件列表中的人交谈后,它终于奏效了,但是如何:
首先我创建了一个文件:
/etc/zabbix/zabbix_agentd.conf.d/
并添加这一行:
UserParameter=checkip[*],ping -W1 -c2 $1 >/dev/null 2>&1 && echo 0 || echo 1
并运行此命令:
./sbin/zabbix_agentd -t checkip["8.8.8.8"]
checkip[8.8.8.8] [t|0]
所以一切都完成了,但超时选项对我们来说非常重要:
在 /etc/zabbix/zabbix_agentd.conf 中添加超时
Timeout=30
超时默认是 3s 所以如果我们运行
time ping -W1 -c2 8.8.8.8
看看可能需要超过 3 秒,所以你得到了错误:
ZBX_NOTSUPPORTED
【讨论】:
【参考方案2】:它可以是任何东西。例如超时 - 默认超时为 3 秒,ping -c4 至少需要 3 秒,ping 的权限/路径,未重新启动代理,...
提高调试级别,重启代理并检查zabbix日志。你也可以直接测试zabbix_agentd:
zabbix_agentd -t checkip[]
[m|ZBX_NOTSUPPORTED] [执行 shell 脚本时超时。] => 超时问题。编辑 zabbix_agentd.conf 并增加 Timeout 设置。默认 3 秒对您的 ping 来说不是最好的,需要 3 秒以上。
【讨论】:
[m|ZBX_NOTSUPPORTED] [执行 shell 脚本时超时。] 我检查了超时/ ping 权限并再次重新启动代理,但错误仍然存在【参考方案3】:如果您需要超过 30 秒的执行时间,您可以使用 nohup (command..) &
组合来限制超时限制。
这样,如果你生成一些带有结果的文件,在下一次传递中,你可以读取文件并取回结果,而无需等待。
【讨论】:
【参考方案4】:对于那些可能遇到相同错误消息的其他问题的人。
使用-c
参数运行zabbix_agentd很重要:
./sbin/zabbix_agentd -c zabbix_agentd.conf --test checkip["8.8.8.8"]
否则 zabbix 可能不会接受该命令,因此会产生 ZBX_NOTSUPPORTED
。
它还有助于将命令隔离到一个脚本文件中,因为 Zabbix 将在UserParameter=
中处理内联命令,这比您预期的要多得多。
【讨论】:
【参考方案5】:我为 samba DC 之间的同步检查定义了两个这样的用户参数。
/etc/zabbix/zabbix_agentd.d/userparameter_samba.conf:
UserParameter=syncma, sudo samba-tool drs replicate smb1 smb2 cn=schema,cn=configuration,dc=domain,dc=com
UserParameter=syncam, sudo samba-tool drs replicate smb2 smb1 cn=schema,cn=configuration,dc=domain,dc=com
还为 Zabbix 用户提供了 sudoer 访问权限来执行命令。 /etc/sudoers.d/zabbix:
Defaults:zabbix !syslog
Defaults:zabbix !requiretty
zabbix ALL=(ALL) NOPASSWD: /usr/bin/samba-tool
zabbix ALL=(ALL) NOPASSWD: /usr/bin/systemctl
并且在我的 zabbix_aganetd.conf 上启用了“EnableRemoteCommands”,有时当我运行时
zabbix_get -s CLIENT_IP -p10050 -k syncma
或
zabbix_get -s CLIENT_IP -p10050 -k syncam
我收到错误ZBX_NOTSUPPORTED: Timeout while executing a shell script.
但是在客户端执行/sbin/zabbix_agentd -t syncam
后,Zabbix服务器正常响应。
Replicate from smb2 to smb1 was successful.
当它出现问题时,我的 zabbix.log 出现以下错误
failed to kill [ sudo samba-tool drs replicate smb1 smb2 cn=schema,cn=configuration,dc=domain,dc=com]: [1] Operation not permitted
好像是权限错误!但它只是在执行/sbin/zabbix_agentd -t syncam
后解决,但我不确定该错误是否永久消失或将在下一个 Zabbix 项目检查间隔发生。
【讨论】:
对于 "ZBX_NOTSUPPORTED: Timeout while execution a shell script" 你应该检查 /etc/zabbix/zabbix_agentd.conf 中的 Timeout 指令,也许你的命令需要更长的时间来执行。我认为这就是为什么有时它可以,有时你会看到错误以上是关于用户参数和 ZBX_NOTSUPPORTED的主要内容,如果未能解决你的问题,请参考以下文章