/var/log/messages 不断重新填充

Posted

技术标签:

【中文标题】/var/log/messages 不断重新填充【英文标题】:/var/log/messages keeps on repopulating 【发布时间】:2015-01-27 14:05:52 【问题描述】:

我需要清除所有 rsyslog 日志,所以我停止 rsyslog 并删除 file.log 以及 /var/log/messages。但是,一旦我重新启动服务,所有日志就会再次开始弹出(400k 行)。我查找了更多信息,似乎 StateFile 没有保存在某处。我尝试创建具有 777 权限的 /var/spool/rsyslog 目录,但这也没有解决问题,并且 file.log 不断地重新填充,并且它不会停止,直到日志文件返回所有无意义的日志在里面。

我在 ../rsyslog.d 中有如下配置的日志文件 local0.* /home/user/file.log

我的操作系统是 Pidora,我正在运行 pidora rsyslogd: [origin software="rsyslogd" swVersion="7.4.2" x-pid="1150" x-info="http://www.rsyslog.com"]

如何彻底清除所有 rsyslog 并阻止 rsyslog 重新填充它????这几天一直被这个问题困扰。

杂项。信息:我还注意到 /var/log/messages 中的一大堆以下错误 11 月 28 日 12:26:51 pidora rsyslogd-2177:imjournal:由于速率限制而开始丢弃消息 11 月 28 日 12:36:07 pidora rsyslogd-2177:imjournal:由于速率限制而丢失了 334681 条消息

【问题讨论】:

【参考方案1】:

重新启动 rsyslog 后日志重新出现的原因是因为有一个进程不断记录这些消息,因此 rsyslog 限制了它们的速率。根据您提供的这两个日志打印之间的时间,它似乎正在打印 ~570 个日志/秒。我需要更多的日志输出来帮助你弄清楚发生了什么。

您有两种选择

    (推荐)找出有问题的进程为什么会发出这些消息并修复它,以便消息停止。会不会和this bug有关?

    (不推荐) 在模块部分之后添加一个过滤器到您的 rsyslog 配置中。这不是您想要长期使用的解决方案,因为它会从相关进程中删除所有消息,而不仅仅是您想要删除的消息。这可能意味着您可能会错过重要的错误消息。这样的事情会做到这一点:

    if $programname == '<processname>' then ~

解决问题很重要,而不仅仅是过滤它,因为在 Raspberry Pi 上,您将在基于闪存的内存上运行。如果一个进程持续记录大量消息并且您长时间运行它,您可能会更快地磨损 SD 卡。

【讨论】:

感谢您的回复鲍勃。喷出这些消息的过程实际上是我自己编写的,选择 rsyslog 是因为它可以处理快速日志记录。不幸的是,选项 2 也不起作用,因为我已经有一个将日志保存到本地文件的过滤器。我正在尝试在该文件上运行 logrotate 以确保大小不会因此而失控。问题是当 logrotate 执行时,我的日志文件从一开始就开始提取所有内容。这完全违背了对数旋转的目的。 我想要的是,我应该能够在没有 rsyslog 的情况下进行 logrorate,而无需每次 logrotates 从一开始就拉取所有内容。 我不明白你所说的“从一开始就拉扯一切”是什么意思。您不希望它在旋转后重新填充日志吗?通常,在执行 logrotate 后,会向 rsyslog 发送一个“HUP”,告诉它更新它的文件引用。 因此,例如,让我们以一天之内累积“A B C D .... Z\0”字符串的示例 file.log 为例。假设在早上 6 点开始,file.log 有条目“A B C”。此时,如果我对此 file.log 执行 logrotate,将创建一个备份文件 ,其内容为“A B C \0”。从这一点开始,file.log 应该从“DE F....”继续,但我实际上看到的是“ABCDEF”...这就是我的意思是它从一开始就将所有内容都拉入 file.log什么时候不应该。我能够解决这个问题的唯一方法是 rm /var/log/journal/* 我认为 rsyslog 应该为 file.log 创建一个状态文件,但该状态文件不知何故没有完成它的工作......我不知道我是否走在正确的轨道上...... . 感谢您调查此 Bob

以上是关于/var/log/messages 不断重新填充的主要内容,如果未能解决你的问题,请参考以下文章

监控一个持续刷新的日志文件/var/log/messages,命令是啥/var/log/messages

误删/var/log/messages的恢复方法

翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的

翻译自mos文章Linux的/var/log/messages是空的(0k),messages.0, messages.1也是空的

解决无/var/log/messages 问题

/var/log/messages