Zabbix

如何在給定觸發器已經為“真”的主機上執行操作?

  • April 10, 2015

設置:Zabbix 2.4 | RHEL 6.4

我正在配置一種方法,以允許 Zabbix Agentd 服務在引發觸發器時自動更新自己的二進製文件(使用 Git 作為容器)。有兩個觸發器:

  1. 觸發器 1:“Git repo 不存在” - 確保有一個 git 儲存庫用於儲存 Zabbix Agentd 的二進製文件。

一種。{Template App Zabbix Agent:vfs.file.exists[/opt/zabbix/.git/config].last()}=0 2. 觸發器 2:“Zabbix Agent 版本不正確。” - 如果代理不是預期的編譯版本,則觸發。這被設置為使用者宏。

一種。{Template App Zabbix Agent:vfs.file.cksum[/opt/zabbix/sbin/zabbix_agentd].last()}<>{$LATESTAGENT}

灣。$LATESTAGENTcksum()編譯後的 zabbix_agentd 二進製文件的值。

C。取決於觸發器 1

觸發器 1 只是確保如果觸發器 2 觸發,代理將能夠執行遠端命令來執行 git pull 並獲取最新的二進製文件。


現在的情況

觸發器執行良好,並向我的系統顯示代理版本不一致的地方。從那時起,我已經配置了幾個動作來與他們一起做這些骯髒的工作。

  1. 觸發器 1 >git init在 Zabbix Agentd 安裝路徑中執行。
  2. 觸發器 2 > 執行git pull origin master以獲取最新的垃圾箱。

這些只是我創建的全域腳本,因此我可以通過點擊任何主機並為主機選擇適當的腳本來手動測試它們是否工作。


問題

由於我首先創建了觸發器,因此它們已經“觸發”了;但是,既然我有與這些觸發器一起使用的操作,我希望這些觸發器能夠“重新觸發”(或重新初始化或重新觸發或其他任何方式)以允許這些操作執行其操作。不幸的是,我真的找不到辦法做到這一點。專注於觸發器 1(存在 git repo),我嘗試清除該vfs.file.cksum[/opt/zabbix/sbin/zabbix_agentd]鍵上的歷史記錄,但這並沒有影響觸發器的狀態。我見過一些人提到一些 SQL 或 API 工作來手動修改觸發器狀態,但感覺應該有比這更簡單的東西!


概括

  • 創建觸發器以部署更新的 Zabbix Agentd 二進製文件。
  • 創建了與觸發器一起使用的操作。
  • 無法在已經為“真”的觸發器上執行操作

任何人都知道如何讓我的觸發器“再次觸發”以讓動作完成他們的事情?感謝您對此的任何幫助!

注意事項

  • 系統 CM 工具(例如 Puppet)不是一個選項。我需要在 Zabbix 和 Git 中執行此操作。
  • Cron 解決方案已經出來了。大量伺服器在執行,因此管理這些 cron 作業和更改(同樣,沒有 sysCM 工具)將是手動的噩夢。

作為一種解決方法,您可以暫時將觸發器更改為“生成多個問題事件”,等到您需要的所有操作都執行完畢,然後再切換回來。

引用自:https://serverfault.com/questions/681650