导入到 rsyslog 的日志在轮换时未发送到远程服务器

导入到 rsyslog 的日志在轮换时未发送到远程服务器

因此,现在我拥有一堆生产服务器,并且我通过 rsyslog 将远程日志记录到我们的暂存服务器。对于通过 rsyslog 实际记录的任何内容,它都可以正常工作(即使轮换也是如此),但由于一些原因,我们的 php5_errors 日志不通过 rsyslog 处理,包括我们自己有 php 写入它的实例(这是另一个开发人员的决定,我无法轻易更改)

无论如何,似乎简单的选择是导入我想要的日志文件(也可以使用 modsecurity 的日志文件执行此操作)

无论如何,每当日志文件轮换时,它都会停止向远程服务器发送新信息。到目前为止,我还没能弄清楚如何在不重新启动 rsyslog 的情况下修复它。

任何有关此事的帮助都将不胜感激

所有服务器都是 debian squeeze 服务器,运行 rsyslog 和 php 5.3

答案1

这里的问题是,您的旋转会将当前文件(例如mylog)移动到新名称(例如mylog.0),并打开一个具有相同名称的新文件。

但是,rsyslog 只会在第一次启动时打开文件。此后,它会继续从同一个文件读取数据 - 即使您在工作时重命名该文件。

解决方案是修复旋转脚本。它不应该移动文件并创建一个同名的新文件,而应该复制文件的内容然后将其清零。这样,rsyslog 就可以继续从同一个文件句柄读取。具体如何执行此操作取决于您使用什么来旋转日志 - 如果是 common logrotate,则只需添加选项

copytruncate

到日志条目。

相关内容