Rsysloglogging到滚动的日志而不是展开的日志

如果我含糊不清,请原谅我,但我想尽可能保持这种安全。

我有一个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来更新它的内部文件句柄。