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

问题描述 投票:0回答:3

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

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

我将脚本放在 /usr/bin/delete_host.py 中,并配置了一个操作,以便在激活“代理不可用”触发器时调用它。这就是“操作”选项卡的样子 link

这是操作日志link

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

此时我真的不知道如何进一步解决此问题。我禁用了 selinux 并使用 nopasswd 将 zabbix 用户添加到 sudoers 文件中。我在任何日志中都找不到任何内容。是否可以使用 zabbix 执行非消息传递脚本?

zabbix
3个回答
0
投票

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

您也可以使用不同的工具(例如 Rundeck)来安排它。


0
投票

脚本不必位于ExternalScripts 目录中,只有“外部检查”类型的项目才需要该目录。您链接到的操作屏幕截图使用

delete_host.py
的相对路径,这几乎肯定不起作用。您的操作日志屏幕截图显示了一些带有 /usr/bin/ 前缀的条目,这更好。

至少对于测试而言,请确保指定所有内容的完整路径,包括

python
二进制文件,例如
/full/path/to/python /full/path/to/delete_host.py

您还有一些条目将所有输出重定向到

/tmp/
中的文件,但您没有提及在那里登录的内容。请使用该方法并检查潜在的错误消息。


0
投票
  • “操作”中的远程命令使用 key system.run[command,nowait] 运行。无论命令结果如何,“nowait”键都会返回 1。
  • 尝试使用“wait”参数运行system.run,看看“最新数据”下的实际错误是什么。
  • 对我来说,错误是“sudo:抱歉,你必须有一个 tty 才能运行 sudo”,即使我在 sudoers 文件中有“默认:zabbix!requiretty”。我注释掉了 /etc/sudoers 文件中的“#Defaults requiretty”行,它起作用了。
© www.soinside.com 2019 - 2024. All rights reserved.