【问题标题】:Execute a script located on Zabbix server on trigger在触发器上执行位于 Zabbix 服务器上的脚本
【发布时间】:2015-07-17 13:00:01
【问题描述】:

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

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

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

这里是操作日志link

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

在这一点上,我真的没有办法进一步解决这个问题。我禁用了 selinux 并使用 nopasswd 将 zabbix 用户添加到 sudoers 文件。我在任何日志中都找不到任何东西。甚至可以用 zabbix 执行非消息脚本吗?

【问题讨论】:

    标签: zabbix


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:
        • “操作”中的远程命令使用 key system.run[command,nowait] 运行。无论命令结果如何,此“nowait”键都会返回 1。
        • 尝试使用“wait”参数运行 system.run,看看“最新数据”下的实际错误是什么。
        • 对我来说,错误是“sudo:抱歉,你必须有一个 tty 才能运行 sudo”,即使我在 sudoers 文件中有“Defaults:zabbix !requiretty”。我在 /etc/sudoers 文件中注释掉了“#Defaults requiretty”行,它起作用了。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-05-22
          • 1970-01-01
          • 2012-06-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-05-25
          • 2020-09-18
          相关资源
          最近更新 更多