如果我含糊不清,请原谅我,但我想尽可能保持这种安全。
我有一个CentOS服务器设置作为中央远程日志logging服务器。 现在服务器已经把日志发送到这台服务器几个月了,没有问题。 这些日志文件是每月滚动的,并一直在正常工作。 然而,这个月(没有任何configuration变化,我知道)rsyslog决定将新的日志文件发送到滚动的日志文件( access_log-20150901 ),而不是展开的文件( access_log )。
奇怪的是,我甚至将滚动的日志( access_log-20150901 )移动到一个归档目录中,而rsyslog仍在向该文件发送更新。
我正在使用自定义filter,如下所示:
if $programname contains 'access_log' then /var/log/remotelog/access_log
但是它正在更新文件:
/var/log/remotelog/archive/access_log-20150901
任何人都知道这里发生了什么?
仅供参考。 所有这些文件和文件夹的权限都是相同的。
编辑:固定logrotate,用postrotate方法来重新启动rsyslog后,日志已经旋转
/var/log/remotelog/access_log { missingok notifempty monthly create 0660 <user> <group> rotate 12 postrotate /sbin/service rsyslog reload > /dev/null 2>/dev/null || true endscript }
rsyslog版本:rsyslogd 8.9.0.ad1
恕我直言,你有两个基本的select。
1)在logrotate节中添加一个“postrotate”子句来向rsyslog pid发出一个HUP
2)将此文件添加到/etc/logrotate.d/rsyslog文件中的rsyslog filespec。
问题在于你在转动之后从来没有重新启动rsyslog守护进程,所以它仍然在内部保留旧的文件句柄。 直到现在,它可能工作得很好,因为rsyslog文件的旋转花费的时间比这个文件的旋转时间要长,这意味着rsyslog文件上的HUP出现在这个文件被旋转后。 最近,这个循环花了比rsyslog文件更长的时间,所以在这个日志文件被closures/旋转之前发生了HUP。 在HUP之后, rsyslog仍然打开了旧文件,并且从不通知rsyslog来更新它的内部文件句柄。