通过脚本进行 zabbix 检查总是会触发

通过脚本进行 zabbix 检查总是会触发

我在服务器上有一个脚本,它要么输出“OK - foobar buz foo”,要么输出“ERROR - blah blah foo”。在后一种情况下,我希望在 zabbix 中触发警报。

我目前所做的:

我在zabbix中配置了UserParameter如下:

# cat /etc/zabbix/zabbix_agentd.d/userparameter_check_reposync.conf
UserParameter=spacewalk.reposync[*],/usr/local/sbin/check_reposync.py $1

我重新加载了 zabbix 代理,并且以下检查按预期工作:

# zabbix_agentd -t spacewalk.reposync[centos7-x86_64.log]
spacewalk.reposync[centos7-x86_64.log]        [t|OK: All good for the repository "centos7-x86_64"]

现在我在 zabbix 3.2 web 界面中创建了一个项目,其类型为“字符”,并定义了一个触发器,如下所示

{somehost.acme.org:spacewalk.reposync[centos7-x86_64.log].str("ERROR")}=1

我的理解是,由于 zabbix_agentd 没有返回字符串“ERROR”,因此此触发器不应触发。但是,我已为该触发器设置了警报。

我配置错了什么?如果失败了,我该如何调试?

解决方案:

在我了解了调试的方法和最可能的原因(权限问题)之后,我更改了配置,如下所示:

为了确保 zabbix 不受权限限制,我通过 sudo 以 root 身份运行检查:

# cat /etc/zabbix/zabbix_agentd.d/userparameter_check_reposync.conf
UserParameter=spacewalk.reposync[*],sudo /usr/local/sbin/check_reposync.py $1

然后添加所需的 sudo 配置/etc/sudoers.d/10_zabbix

zabbix ALL=(root)  NOPASSWD:/usr/local/sbin/check_reposync.py *

另一种方法是提供允许检查的 acl。从安全角度来看,这可能更好。但是从操作角度来看,sudo 方法似乎更简单,也更容易调试和重建。

答案1

不要使用-t-p来测试项目。您运行它的方式是root使用用户的权限执行的。即使您以 Zabbix 用户身份运行它,环境和其他因素也会有所不同。请zabbix_get改用它针对正在运行的代理进行测试。http://www.zabbixbook.com/2017/08/22/debugging-zabbix-userparameters/更加详细。

在这种情况下,很可能是权限错误。

相关内容