Rsyslog 记录到滚动日志而不是展开日志

Rsyslog 记录到滚动日志而不是展开日志

如果我说得含糊不清,请原谅我,但我会尽力保证其尽可能的安全。

我有一台 CentOS 服务器,设置为中央远程日志服务器。几个月来,服务器一直将日志发送到此服务器,没有出现任何问题。这些日志文件每月滚动一次,并且一直运行正常。然而,本月(据我所知,没有任何配置更改)rsyslog 决定将新日志文件发送到滚动日志文件 ( access_log-20150901),而不是未滚动文件 ( access_log)。

奇怪的是,我甚至将滚动日志(access_log-20150901)移动到了档案目录,而 rsyslog 仍然在向该文件发送更新。

我正在使用自定义过滤器,如下所示:

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

答案1

在我看来,这里您有两个基本选择。

1) 在 logrotate 节中添加“postrotate”子句,以向 rsyslog pid 发出 HUP

2)将此文件添加到rsyslog filespec文件中/etc/logrotate.d/rsyslog

问题是您在旋转后从未重新启动 rsyslog 守护进程,因此它仍然在内部保留旧的文件句柄。到目前为止,它可能运行良好,因为 rsyslog 文件的旋转比此文件的旋转花费的时间更长,这意味着 rsyslog 文件的 HUP 是在该文件旋转之后发生的。最近,此旋转花费的时间比 rsyslog 文件花费的时间更长,因此 HUP 发生在此日志文件关闭/旋转之前。HUP 之后,rsyslog仍然打开旧文件,并且旋转从未通知 rsyslog 更新其内部文件句柄。

相关内容