如何抑制 syslogd 1.4.1 中的特定消息

如何抑制 syslogd 1.4.1 中的特定消息

有没有办法抑制 syslogd 中的特定消息?我有几台 Linux Oracle 5.10 服务器,其中安装了 syslogd 1.4.1。由于我的所有服务器都是生产服务器,因此我无法将 syslogd 升级到 rsyslogd(可以过滤消息)。有没有什么办法可以实现?

答案1

正如您已经发现的,旧版 syslogd 本身不具备这种过滤能力。这意味着,如果您想过滤掉这些消息,您需要使用一些外部程序来帮您过滤。

如果您处于任何大型环境中,我首先建议您设置一个单独的 syslog 服务器,并将日志重定向到该服务器。在该服务器上,您可以使用具有过滤功能的更现代的 syslog 应用程序。

但是,如果您想要或需要将内核日志保留在本地机器上,则可以通过一些技巧来解决这个问题。

最简单的方法是让 syslog 将日志写入非标准日志文件,例如

kern.err          /var/tmp/kernel-unfiltered

然后,您只需一个脚本来监视 /var/tmp/kernel-unfiltered,对于任何与您想要过滤的内容不匹配的行,使用logger另一个工具或日志级别重新注入它,或者直接写入您想要的日志文件。

另一种方法是使用管道。Syslogd 无法直接写入程序(否则管道将grep -v THEMESSAGE > /var/log/kernel.log是显而易见的解决方案),但它记录到命名管道 - 然后您可以让一个单独的程序从该管道读取并过滤出您想要的消息,然后重新注入消息或将其直接写入日志文件。您可以使用例如创建管道

mkfifo /var/tmp/logfifo

配置如下:

kern.err          |/var/tmp/logfifo

与使用实际文件相比,这样做的优点是文件系统被垃圾填满的风险较小。

除非有详尽的记录,否则这两种解决方案都可能会给接管这些系统的新人带来很多麻烦。

相关内容