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
ファイルが作成されたことに気付いた後、3.5.1RPMの元の構成ファイルでdiff
を実行して違いを確認し、それに応じて実際の構成ファイルを変更しました。変更は主に、実行時に使用されるいくつかのファイルの位置に関するものです(新しいバージョンの値は次のとおりです)。
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設定を適切に更新するにはどうすればよいですか?
必要なSELinuxプロファイルは、EPELでも利用可能なnagios-selinux
パッケージで利用できます。残念ながら、アップデートはNagios3.5.1からNagios4.3.4への切り替え中に自動的にインストールされないため、手動で追加する必要があります。
yum install nagios-selinux
もちろん、Nagiosが正しく機能するには、構成ファイルへの変更(.rpmnew
構成ファイルからの新しいパスのインポート)も必要です。