RHEL 6(EPEL 包)上的 Nagios 在更新後停止工作
RedHat Enterprise Linux 6 上 Nagios 的 EPEL 軟體包已在幾週前從 3.4 版更新到 4.3 版。更新是通過一個簡單的
yum update
命令完成的,沒有任何跡象表明版本發生了重大變化。儘管更新後 Nagios 看起來工作正常(所有服務都在 Web 界面中正確可見),但實際上並沒有多少工作:沒有執行服務檢查,也沒有發送郵件。數十條錯誤消息可見於
/var/log/messages
:Jan 26 15:58:55 srv1 nagios: Unable to send check for host 'srv3' to worker (ret=-2) Jan 26 15:58:58 srv1 nagios: Unable to run check for service 'Total Processes' on host 'srv4' Jan 26 15:59:05 srv1 nagios: Unable to run check for service 'Lab Home Partition' on host 'srv1'
此外,嘗試重新啟動 nagios 最終會出現更新之前不存在的錯誤:
No usable PID found in /var/run/nagios/nagios.pid
. 這部分問題似乎在這裡有一個解決方案:Nagios Woudn’t Start, now won’t Stop!在註意到更新創建了一個
/etc/nagios/nagios.cfg.rpmnew
文件後,我diff
使用 3.5.1 RPM 中的原始配置文件執行了一個以查看差異是什麼,並相應地更改了實際的配置文件。更改主要涉及執行時使用的一些文件的位置(這裡是新版本的值):object_cache_file=/var/spool/nagios/objects.cache precached_object_file=/var/spool/nagios/objects.precache lock_file=/var/run/nagios/nagios.pid temp_file=/var/spool/nagios/nagios.tmp check_result_path=/var/spool/nagios/checkresults
這解決了上面提到的停止/重啟問題,但是,它破壞了現在顯示
Error: Could not read object configuration data!
. 並且服務檢查仍然沒有執行。中也出現錯誤消息
/var/log/audit/audit.log
,表明問題可能與 SELinux 相關(系統執行在強制模式下):type=AVC msg=audit(1516991640.421:263116): avc: denied { getattr } for pid=29_exec_t:s0 tclass=file type=SYSCALL msg=audit(1516991640.421:263116): arch=c000003e syscall=4 success=n fsgid=494 tty=(none) ses=4000 comm="check_procs" exe="/usr/lib64/nagios/plugins
事實上,暫時將 SELinux 設置為 permissive 模式可以完全解決問題;但是,這不是解決方案。如何在將 SELinux 保持在強制模式的同時正確更新 SELinux 設置?
所需的 SELinux 配置文件
nagios-selinux
可在 EPEL 上的軟體包中找到。不幸的是,從 Nagios 3.5.1 切換到 Nagios 4.3.4 時更新不會自動安裝,因此必須手動添加:yum install nagios-selinux
當然,對配置文件的更改(從配置文件中導入新路徑
.rpmnew
)也是 Nagios 正常工作所必需的。