首先,简要说明:
使用 Zabbix 进行系统监控,我试图了解它是否/如何用于运行我需要报告 OK/PROBLEM 值的重要计划任务(即:通过电子邮件)。
我已经使用由 调用的自定义编写的脚本cron
来报告程序执行的错误。但是,这种方法很容易被快速重复但失败的计划任务“淹没”。我真正想要的是在“边缘变化”时收到通知 - 即:从正常(OK)到失败(PROBLEM)执行,反之亦然。
从这里开始,我有了尝试 Monit 的想法——而且效果很好。但是,已经部署了 Zabbix,如果我可以使用现有设置合理地完成我的目标,我想避免使用其他工具。
好的,回到主要问题:
根据我的研究/测试,基本方法是将要执行的任务视为重复检查/数据查询。存在两种可能性:
- 配置SSH 检查以执行命令;
- 使用要执行的特定命令扩展 Zabbix 代理。
第一种方法需要为每个命令执行登录,这往往会用不必要的条目“污染”日志,所以我倾向于第二种方法。也就是说,这两种方法都有一个重大问题:它们只捕获命令的输出,而不捕获命令的退出值
所以,我的问题是:
- 任何人都知道如何捕获命令退出值?注意:我想避免包装脚本。
- 有人使用类似的方法吗?如果是这样,您有什么反馈吗?
- 我应该简单地“辞职”使用Monit吗?
一般来说,Zabbix 不是任务调度程序——Rundeck、Ansible/AWX 或其他解决方案可能更适合。话虽如此,仍然可以为此使用 Zabbix,尤其是在它是一次性任务的情况下。
您对退出代码的关注的解决方案是使用包装脚本。使该脚本捕获输出、退出代码以及您需要的任何其他内容(可能是运行命令所花费的时间)。然后,此脚本可以将所有这些值发送到 Zabbix Trapper 项目,您可以在这些项目上发出警报。
请记住,长时间运行的任务不应直接作为 Zabbix 用户参数执行。如果您的命令可以运行超过几秒钟,请
atd
改为使用或类似方法执行它。默认超时为:
最大值是 30 秒,但你真的,真的不应该增加默认值。