![CentOS:無法讀取遠端伺服器上的 nrpe/snmp 代理程式的輸出,但它可以在本地工作,我做錯了什麼?](https://rvso.com/image/617262/CentOS%EF%BC%9A%E7%84%A1%E6%B3%95%E8%AE%80%E5%8F%96%E9%81%A0%E7%AB%AF%E4%BC%BA%E6%9C%8D%E5%99%A8%E4%B8%8A%E7%9A%84%20nrpe%2Fsnmp%20%E4%BB%A3%E7%90%86%E7%A8%8B%E5%BC%8F%E7%9A%84%E8%BC%B8%E5%87%BA%EF%BC%8C%E4%BD%86%E5%AE%83%E5%8F%AF%E4%BB%A5%E5%9C%A8%E6%9C%AC%E5%9C%B0%E5%B7%A5%E4%BD%9C%EF%BC%8C%E6%88%91%E5%81%9A%E9%8C%AF%E4%BA%86%E4%BB%80%E9%BA%BC%EF%BC%9F.png)
我在某些伺服器上安裝了 NRPE 和 SNMP,因為我想使用 Nagios 監控該伺服器。我有一些檢查已經正常運行,並且我得到了預期的輸出。今天,我安裝了check_ifstatus
Nagios 指令來監視一台mysql
伺服器上網路介面卡的狀態。check_ifstatus
在伺服器本地運行時,我正確地獲取了相關資訊:
[root@dbr4 nagios]# /usr/lib64/nagios/plugins/check_ifstatus -H localhost
OK: host 'localhost', interfaces up: 4, down: 0, dormant: 0, excluded: 0, unused: 0 |up=4,down=0,dormant=0,excluded=0,unused=0
[root@dbr4 nagios]#
但是當我從 Nagios 伺服器執行命令時,出現以下錯誤:
[root@monitorvm ~]# /usr/lib64/nagios/plugins/check_ifstatus -H amadbr4
CRITICAL: No response from remote host 'dbr4' for 1.3.6.1.2.1.2.2.1.8 with snmp version 1
[root@monitorvm ~]#
這是否意味著我必須在要檢查的伺服器上啟用 snmp?有沒有辦法使用 NRPE 來執行此檢查? SELINUX 在所有機器上都被停用。
答案1
為什麼使用 NRPE 透過 SNMP 檢查內容?您可以直接從 Nagios 方塊中檢查這些內容,假設 snmp 正在偵聽外部介面(您似乎想要,根據 netstat 註解判斷,儘管尋找錯誤的連接埠)。
除非您編譯的 NRPE 不支援 SSL,否則不應使用 -n。
(此外,您不需要指定-p 5666,因為這是預設值。與相同-t 10.)
- 確保 Nagios 機器的 IP 在 allowed_hosts 清單中。
- 看看是否可以透過執行不含更多參數的「check_nrpe -H dbr4」來與 NRPE 守護程式對話。您應該取回 NRPE 版本號
- 檢查 nrpe.cfg 中的「command[check_ifstatus]」行是否與您的手動測試相符。
答案2
Keith的答案是最正確的;您不需要使用 NRPE 進行 SNMP 檢查,這會增加不必要的複雜性。
也就是說,這裡最有可能直接出現的問題是 SELinux,除非您知道您已將其關閉。getenforce
在NRPE主機上運作;如果顯示“Enforcing”,則表示 SELinux 已啟用。如果啟用了 SELinux,請check_nrpe
從 Nagios 主機執行命令,然後檢查/var/log/audit/audit.log
NRPE 主機。如果其中有一些帶有“type=AVC”的行表示“avc:被拒絕”,則您可能遇到了 SELinux 限制。
避免這種情況的簡單方法是透過編輯/etc/selinux/config
和設定SELINUX
來關閉 SELinux permissive
(如果您打算在某個時候在此系統上重新啟用 SELinux)或disabled
(如果您確定不想再次在此系統上執行 SELinux) 。當然,如果您這樣做,您顯然會失去 SELinux 的好處。
您也許可以透過更改check_ifstatus
外掛程式的 SELinux 上下文來解決此問題。您可以使用 檢查其上下文ls -Z
。在我的系統上(使用標準目標策略),它具有上下文“system_u:object_r:nagios_system_plugin_exec_t:s0”,其中“nagios_system_plugin_exec_t”是重要部分。如果將其設為“nagios_system_plugin_exec_t”(使用chcon -t nagios_system_plugin_exec_t check_ifstatus
)不起作用,請嘗試使用“nagios_unconfined_plugin_exec_t”。如果這些變更中的任何一個有效,您就必須將它們永久化semanage fcontext -a -t nagios_system_plugin_exec_t '/usr/lib(64)?/nagios/plugins/check_ifstatus'
。
如果這些都不起作用,您可能會遇到使用環回位址的進程的一些限制,並且您必須查看 AVC 訊息並製定自己的 SELinux 策略。我在這方面做得還不夠,無法提供建議(除了「直接從 Nagios 主機檢查 SNMP;這就是 SNMP 的用途」),但網路上有一些關於這樣做的參考資料。您可能想要查看audit2allow
,這有助於適應 SELinux 策略的過程。