我在 EC2 上运行 Ubuntu 12.04.1 LTS。我有一堆应用程序服务器,它们配置为通过 rsyslog 将其日志转发到中央服务器。
自从在中央服务器上安装 Nagios 监控日志文件后,我一直收到警报,表明特定应用程序服务器无法将其日志转发到中央服务器。
登录机器并重新启动 rsyslog 服务可以解决问题。但是,rsyslog 随后会重新传输日志再次,导致收集器出现重复。为什么会这样?
答案1
该问题的日志传输冻结方面似乎是由于 rsyslog 在“buntu:”的开箱即用配置方式中存在错误造成的。https://bugs.launchpad.net/ubuntu/+source/rsyslog/+bug/940030
我还能够在expertsexchange上找到一篇有趣的帖子:www.expert-sex-change.com/OS/Linux/Administration/Q_27511414.html:
> 我最近遇到了一个问题,希望有人能帮我解决。我 > 运行 Ubuntu 10.04 和 rsyslog 5.8.1。我设置了 rsyslog 来监控一些文件并发送 > 将这些文件的任何更改发送给 Loggly(顺便说一句,服务很棒)。嗯,一切都正常 > 很好,除了每当我重新启动 rsyslog 时,它都会重新发送那些 > 它过去发送过的文件。现在,我的理解是 rsyslog 应该使用 > $WorkDirectory 并创建您为 $InputFileStateFile 设置的文件来保存 > 监控文件的状态,以便它不会发送重复的条目。 > > 以下是我正在使用的一个例子: > >$工作目录/var/log/rsyslog > ># 监控日志文件 > $输入文件名 /var/log/monit.log > $InputFileTag 监控 > $InputFileStateFile 监控状态 > $InputFileSeverity 信息 >$InputRunFileMonitor(输入运行文件监视器) > > 因此,根据我上面的描述,rsyslog 应该在 >“/var/log/rsyslog”将保存/var/log/monit.log文件的状态,因此没有 > 发送了重复项。对吗?如果是这样,那就不会发生这种情况! > > “/var/log/rsyslog” 的权限应该是什么?我是否必须触摸“monit-state” > “/var/log/rsyslog”(我已经尝试过了,什么也没发生)?
答案很有趣:
> 好的,我找到了这个网站(故障排除 Rsyslog)并进行了交互式调试 > 模式使用: > > rsyslogd -c5 -dn > 日志文件 > 1: > 全选 > 在新窗口中打开 > > > 我能够看到这实际上是一个权限问题。我打开了权限 > 777 作为我的 $WorkDirectory,只是为了测试,rsyslog 确实创建了状态文件和 > 一切都按计划进行。我将继续使用权限,以便 > 不是 777(显然),但我想让其他可能遇到此问题的人知道 > 我如何解决这个问题。
我已将 /var/spool/rsyslog 的权限调整为用户“syslog”所拥有。应用此更改后,我已测试了重复传输,似乎已解决问题。如果问题再次出现或我发现此方法无法解决问题,我将返回此处并更新答案。
解决方案:
$ sudo chown syslog /var/spool/rsyslog