![如何在给定触发器已经为“真”的主机上运行操作?](https://linux22.com/image/655785/%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BB%99%E5%AE%9A%E8%A7%A6%E5%8F%91%E5%99%A8%E5%B7%B2%E7%BB%8F%E4%B8%BA%E2%80%9C%E7%9C%9F%E2%80%9D%E7%9A%84%E4%B8%BB%E6%9C%BA%E4%B8%8A%E8%BF%90%E8%A1%8C%E6%93%8D%E4%BD%9C%EF%BC%9F.png)
设置:Zabbix 2.4 | RHEL 6.4
我正在配置一种方法,以允许 Zabbix Agentd 服务在触发时自动更新其自己的二进制文件(使用 Git 作为容器)。有两个触发器:
- 触发器 1:“Git repo 不存在” - 确保在存储 Zabbix Agentd 二进制文件的位置有一个 git 存储库。a
.{Template App Zabbix Agent:vfs.file.exists[/opt/zabbix/.git/config].last()}=0
- 触发器 2:“Zabbix 代理版本不正确。” - 如果代理不是预期的编译版本,则触发。这设置为用户宏。a
.{Template App Zabbix Agent:vfs.file.cksum[/opt/zabbix/sbin/zabbix_agentd].last()}<>{$LATESTAGENT}
b.$LATESTAGENT
是cksum()
编译的 zabbix_agentd 二进制文件的值。c
. 取决于触发器 1
触发器 1 仅确保如果触发器 2 触发,代理将能够运行远程命令来执行 git pull 并获取最新的二进制文件。
现在的情况
触发器运行良好,并向我的系统显示代理版本不一致的地方。从那时起,我配置了一些操作来配合它们完成脏活。
- 触发器 1 >
git init
在 Zabbix Agentd 安装路径中运行。 - 触发器 2 > 运行
git pull origin master
以获取最新的 bin。
这些只是我创建的全局脚本,因此我可以通过单击任何主机并为该主机选择适当的脚本来手动测试它们是否有效。
问题
由于我首先创建了触发器,因此它们已经“触发”;但是,既然我有与这些触发器配合的操作,我希望这些触发器“重新触发”(或重新初始化或重新触发或其他方式)以允许操作执行。不幸的是,我真的找不到这样做的方法。专注于触发器 1(git repo 存在),我尝试清除该vfs.file.cksum[/opt/zabbix/sbin/zabbix_agentd]
键的历史记录,但这并没有影响触发器的状态。我见过一些人提到一些 SQL 或 API 工作来手动修改触发器状态,但感觉应该有比这更简单的东西!
概括
- 创建触发器来部署更新的 Zabbix Agentd 二进制文件。
- 创建与触发器配合的动作。
- 无法让操作在已经为“True”的触发器上运行
有人知道我该如何让触发器“再次触发”以便让操作发挥作用吗?谢谢大家的帮助!
注意事项
- 系统 CM 工具(例如 Puppet)不是一种选择。我需要在 Zabbix 和 Git 中执行此操作。
- Cron 解决方案已经出局。大量服务器都在运行,因此管理这些 cron 作业和变更(再次强调,没有 sysCM 工具)将是一场手动噩梦。
答案1
作为一种解决方法,您可以暂时将触发器更改为“多个问题事件生成”,等到您需要的所有操作都执行完后再切换回来。