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 时更新不会自动安装它,因此必须手动添加:当然,对配置文件的更改(从配置文件中导入新路径
.rpmnew
)也是 Nagios 正常工作所必需的。