LinuxのOSログといえば/var/log/messagesとなるが、このログファイルはroot権限がないと読み込みができないログファイルとなっている。
# ls -l /var/log/messages
-rw------- 1 root root 134324 3月 16 12:50 /var/log/messages
通常、Zabbix Agentのプロセスはzabbixユーザーの権限で動作するため、このログファイルが監視できず困る場面がある。回避策としては、Zabbix Agentをroot権限で動作させるようにすることが考えられる。Zabbix Agentをroot権限で動作させるためには、zabbix_agentd.confに以下の設定を加えればよい。
# vi /etc/zabbix/zabbix_agentd.conf
### Option: AllowRoot
AllowRoot=1 **=0から変更
しかし、上記方法は、Zabbix Agentがroot権限で動くことになり、セキュリティ面で推奨されない設定となる。そこで、今回はAllowRoot=1せずにログ監視できる方法を考えてみた。
SELinuxをどうしても利用したくない場合
どうしてもSELinuxを有効にしたくないのであれば、ファイルのパーミッションでzabbixユーザでも読めるようにすることでsyslogのファイルを監視できるようになります。
デフォルトの設定のファイルのパーミッションを確認する
# ls -l /var/log/messages
-rw------- 1 root root 223408 6月 4 15:10 /var/log/messages
このファイルのオーナーとパーミッションを以下のように変更します。
# chown root:zabbix /var/log/messages
# chmod 640 /var/log/messages
再度確認してみます。
# ls -l /var/log/messages
-rw-r----- 1 root zabbix 285204 6月 4 16:00 /var/log/messages
これで、Zabbixエージェントから/var/log/messagesにアクセスできるようになります。
logrotateの設定も忘れずに。
設定しておかないと、ログファイルのローテーション時に、ログファイルのオーナーとパーミッションをデフォルトの状態に戻されてしまいます。
logrotateの設定
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
create 0640 root zabbix ---追記する
}
「create 0640 root zabbix」を追加しておくことで、ログローテーションを実行する際、新しいファイルのパーミッションとオーナーを明示的に指定しておくわけです。