在触发器上执行位于Zabbix服务器上的脚本

时间:2015-07-17 13:00:02

标签: zabbix

我们正在使用Zabbix 2.4监控我们的生产环境。新实例配置了Ansible,用于设置Zabbix代理。我们需要的是,如果主机已被终止,则从服务器中删除主机,以便我们只接收有关运行实例变为不可用的消息。

为此,我编写了一个Python脚本,可以将zabbix主机名作为参数,通过调用awscli检查该主机是否在运行实例列表中,如果主机不在&上,则删除主机#34;未终止"列表。

我将脚本放在/usr/bin/delete_host.py中并配置了一个操作,当一个"代理不可用时#34;触发器被激活。这是“操作”选项卡的外观link

这是行动日志link

我尝试了几种编写命令的方法,也将脚本放在ExternalScripts目录中。打开服务器的调试日志,但其中没有提到错误或任何内容。事实上,它只显示正在执行命令的消息,一切正常,但主机仍在那里。当我从Action Log复制命令并手动执行它时,一切正常。

此时我真的没有选择如何进一步解决这个问题。我禁用了selinux,并使用nopasswd将zabbix用户添加到sudoers文件中。我无法在任何日志中找到任何内容。是否甚至可以使用zabbix执行非消息传递脚本?

3 个答案:

答案 0 :(得分:0)

尝试以打印" OK"的方式编写脚本。如果运行正常则为0或错误消息或错误代码如果失败。使用Zabbix服务器主机上的活动zabbix代理项运行脚本(使用函数system.run)。通过这种方式,您将能够创建一个触发器,如果​​脚本无法运行,将触发错误。

您也可以使用其他工具(如Rundeck)安排它。

答案 1 :(得分:0)

脚本不必位于ExternalScripts目录中,只有类型为"外部检查"的项目才需要。您链接到的操作屏幕截图使用delete_host.py的相对路径,几乎可以保证不起作用。您的操作日志屏幕截图显示了一些/ usr / bin / prefixed的条目,这样更好。

至少在测试时,请务必指定所有内容的完整路径,包括python二进制文件,例如/full/path/to/python /full/path/to/delete_host.py

您还有一些条目将所有输出重定向到/tmp/中的文件,但您没有提到登录的内容。请使用该方法并检查潜在的错误消息。

答案 2 :(得分:0)

  • 使用密钥system.run [command,nowait]运行来自“Actions”的远程命令。无论命令结果如何,该“nowait”键返回1。
  • 尝试使用“wait”参数运行system.run,并查看“最新数据”下的实际错误。
  • 对我来说,错误是“sudo:抱歉,你必须有一个tty来运行sudo”,即使我在sudoers文件中有“Defaults:zabbix!requiretty”。我在/ etc / sudoers文件中注释掉了“#Defaults requiretty”行,但它确实有效。