如何将具有唯一 id 子字符串的内核消息重定向到单独的日志文件中(使用“rsyslog”)?

如何将具有唯一 id 子字符串的内核消息重定向到单独的日志文件中(使用“rsyslog”)?

我正在使用 的iptables日志记录功能来调试我的网络活动。我使用带有--log-prefix参数的特定前缀来唯一标识内核日志中属于iptables输出的消息,例如::IPT::LOG::.

如何配置rsyslog以将以此方式标记的消息重定向到单独的日志文件中?手册页对rsyslog我来说看起来太神秘了。

答案1

除了基于选择器的过滤之外,rsyslogd 还可以过滤日志消息属性中找到的模式。为了完成您想要做的事情,您可以创建一个基于属性的过滤器来匹配您在 iptables 规则中使用的字符串。如果您要--log-prefix "unique_prefix: "在 iptables 规则中使用,则需要将其添加到 rsyslog.conf 中:

:msg,startswith,"unique_prefix" /var/log/iptables

此规则将测试您的前缀的日志消息并将它们发送到 /var/log/iptables (除了 rsyslog 配置为发送它们的其他位置之外)。如果您需要将消息显示在 /var/log/iptables 中而不是其他地方,请将新规则放在其他规则之上,并在其后面添加包含& ~.完整示例:

:msg,startswith,"unique_prefix" /var/log/iptables
& ~
#
# The rest of my rules appear below
# ...
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

Rsyslog 规则可以有多个操作。后续操作在以与号 ( ) 开头的新行中定义&。在上面的示例中,第一条规则有两个操作:将输出发送到 /var/log/iptables,然后丢弃消息 ( ~)。看rsyslog 有关操作的文档过滤器有关此答案中的规则的更多信息

编辑是为了使用startswith而不是contains出于性能考虑。由于 iptables--log-prefix确实是一个前缀,因此将位于消息的开头。

答案2

根据我的经验,考虑到文件解析方式的性质rsyslog.conf,中的附加配置行/etc/rsyslog.conf必须位于所有其他配置行之前。如果添加到文件末尾,ip-tables 日志记录仍将附加到文件/var/log/messages并重定向到/var/log/iptables.log文件。

相关内容