有没有办法抑制 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
与使用实际文件相比,这样做的优点是文件系统被垃圾填满的风险较小。
除非有详尽的记录,否则这两种解决方案都可能会给接管这些系统的新人带来很多麻烦。