我在服务器上有一个脚本,它要么输出"OK - foobar buz foo",要么输出"ERROR - blah blah foo“。在后一种情况下,我希望在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"]现在,我在zabbix3.2web接口中创建了一个条目,它的类型为“字符”,并定义了一个触发器,如
{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然后在/etc/sudoers.d/10_zabbix中添加所需的sudo配置:
zabbix ALL=(root) NOPASSWD:/usr/local/sbin/check_reposync.py *另一种选择是提供允许检查的acls。从安全的角度来看,这可能更好。然而,从操作系统的角度来看,sudo方法似乎更简单,更易于调试和重建。
发布于 2018-01-18 14:57:20
不要使用-t或-p测试项。运行它的方式是使用root用户的权限执行它。即使您以Zabbix用户的身份运行它,环境和其他因素也会有所不同。使用zabbix_get对运行中的代理进行测试。http://www.zabbixbook.com/2017/08/22/debugging-zabbix-userparameters/将更详细地介绍。
在这种情况下,这很可能是权限错误。
https://serverfault.com/questions/892860
复制相似问题