几周前,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 无法启动,现在也无法停止!
注意到更新创建了一个/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
这解决了上面提到的停止/重启问题,但是,它破坏了 Web 界面,现在显示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 暂时设置为宽容模式可以完全解决问题;但是,这不是解决方案。如何正确更新 SELinux 设置,同时保持 SELinux 处于强制模式?
答案1
所需的 SELinux 配置文件nagios-selinux
在 EPEL 上也可用。不幸的是,从 Nagios 3.5.1 切换到 Nagios 4.3.4 时,更新不会自动安装它,因此必须手动添加:
yum install nagios-selinux
当然,配置文件的更改(从.rpmnew
配置文件导入新路径)也是 Nagios 正常工作所必需的。