CentOS 6.2、バインド9.7.3、rsyslog 4.6.2
最近サーバーをセットアップしましたが、ログがローテーションされた後、namedが/var/log/messages
へのロギングを停止したことに気付きました。すべてのロギングはrsyslog
を介して行われ、named
はログファイルに直接書き込まないため、これは奇妙だと思いました。
ゾーンファイルを更新した後にnamed
をHUPしたのに、まだログに記録されていなかったので、さらに奇妙でした。
名前付きを停止して再起動した後、ロギングが再開されました。
何が起きてる? Syslog PIDは変更されていません(/var/run/syslogd.pidはpsに示されているPIDと一致します)。 logrotateがログをローテーションしてHUPするときに、rsyslogは新しいソケットを開きますか?
/etc/logrotate.d/syslog:
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
そして、rsyslogd
はローテーション後もロギングを続行します。これは、rsyslogd
に正しく接続されていない名前(および場合によっては他のサービス)にすぎません。/var/log/messages-20120212は次のとおりです。
Feb 5 04:45:03 linus kernel: imklog 4.6.2, log source = /proc/kmsg started.
Feb 5 04:45:03 linus rsyslogd: [Origin software="rsyslogd" swVersion="4.6.2" x-pid="1178" x-info="http://www.rsyslog.com"] (re)start
Feb 9 16:16:29 linus yum[13028]: Installed: 2:vim-minimal-7.2.411-1.6.el6.i686
Feb 12 04:09:22 linus rsyslogd: [Origin software="rsyslogd" swVersion="4.6.2" x-pid="1178" x-info="http://www.rsyslog.com"] rsyslogd was HUPed, type 'restart'.
Feb 12 04:09:22 linus kernel: Kernel logging (proc) stopped.
そして、私はrsyslogdのみを実行しています(何らかの理由でそのPIDを/var/run/syslogd.pidに保存します):
root 1178 0.0 0.1 29496 1488 ? Sl Jan29 0:20 /sbin/rsyslogd -i /var/run/syslogd.pid -c 4
root 5960 0.0 0.0 2300 504 pts/0 S+ 17:45 0:00 grep syslog
Chrootedバインドを使用していると思います。この行をrsyslog.confに追加する必要があります。
$ AddUnixListenSocket/var/named/chroot/dev/log
システムのchrootされた開発者への正しいパスを使用していることを確認してください。
ラフ
ローテーションによってファイルのiノードが変更されたため、Rsyslogは古いiノードに追加しようとしていました。この問題を解決するには、logrotate構成を変更して現在のファイルをコピーし、ローテーション時にそれを切り捨てます。