我在服务器上有一个脚本,它要么输出“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/更加详细。
在这种情况下,很可能是权限错误。