用户参数和 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 syncmazabbix_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的主要内容,如果未能解决你的问题,请参考以下文章

异常中的用户定义和内置参数

Android文件存储--采用SharedPreferences保存用户偏好设置参数和读取设置参数

JMeter之参数化

JMeter--参数化

Jmeter参数化

jmeter参数化