Zabbix

zabbix 通過腳本檢查總是觸發

  • January 19, 2018

我在伺服器上有一個腳本,它要麼輸出“OK - foobar buz foo”,要麼輸出“ERROR - blah blah foo”。在後一種情況下,我希望在 zabbix 中觸發警報。

到目前為止我做了什麼:

我在zabbix中配置了UserParameter如下:

# cat /etc/zabbix/zabbix_agentd.d/userparameter_check_reposync.conf
UserParameter=spacewalk.reposync[*],/usr/local/sbin/check_reposync.py $1

我重新載入了 zabbix 代理,以下檢查按預期工作:

# zabbix_agentd -t spacewalk.reposync[centos7-x86_64.log]
spacewalk.reposync[centos7-x86_64.log]        [t|OK: All good for the repository "centos7-x86_64"]

現在我在zabbix 3.2 web界面中創建了一個“字元”類型的項目,並定義了一個觸發器,如

{somehost.acme.org:spacewalk.reposync[centos7-x86_64.log].str("ERROR")}=1

我的理解是,由於 zabbix_agentd 沒有返回字元串“ERROR”,所以這個觸發器不應該觸發。但是我有這個觸發器的警報。

我配置錯了什麼?如果做不到這一點,我該如何調試呢?

解決方案:

在了解了調試方法和最可能的原因(權限問題)後,我將配置更改如下:

為了確保 zabbix 不受權限的阻礙,我通過 sudo 以 root 身份執行檢查:

# cat /etc/zabbix/zabbix_agentd.d/userparameter_check_reposync.conf
UserParameter=spacewalk.reposync[*],sudo /usr/local/sbin/check_reposync.py $1

然後在中添加所需的 sudo 配置/etc/sudoers.d/10_zabbix

zabbix ALL=(root)  NOPASSWD:/usr/local/sbin/check_reposync.py *

另一種方法是提供允許檢查的 acl。從安全的角度來看,這可能更好。然而,從操作的角度來看,sudo 方法似乎更簡單,更容易調試和重建。

不要使用-t-p測試項目。你執行它的方式,它是在root使用者的權限下執行的。即使您以 Zabbix 使用者身份執行它,環境和其他因素也會有所不同。用於zabbix_get針對正在執行的代理進行測試。http://www.zabbixbook.com/2017/08/22/debugging-zabbix-userparameters/更詳細。

在這種情況下,很可能是權限錯誤。

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