假设我有以下来自iptables
to 的日志条目syslog
:
Nov 3 12:04:12 mypc kernel: [ 296.274134] Packet: IN=enp0s9 OUT=enp0s8 MAC=08:00:27:2f:77:23:08:00:27:86:42:0e:08:00 SRC=192.168.2.20 DST=192.168.1.11 LEN=284 TOS=0x00 PREC=0x00 TTL=63 ID=61089 DF PROTO=TCP SPT=80 DPT=1335 WINDOW=32160 RES=0x00 ACK PSH URGP=0
其中“ Packet:
”是我定义为规则的自定义日志前缀iptables
:... -j LOG --log-prefix "Packet: "
问题:(IN=enp0s9 <...> ACK PSH URGP=0
我的意思是整个字符串)可以修改吗?或者它是整个“消息”,无法被解构?
简而言之,我希望条目看起来像:
Nov 3 12:04:12 Packet: SRC=192.168.2.20 DST=192.168.1.11 LEN=284
没有其他信息。我想将其作为系统日志的自定义模板。是否可以?不幸的是,目前尚不清楚系统日志文档
答案1
您可以使用财产替代者。
将您的rsyslog.conf
或类似的行定义为新消息所需格式的模板,并在匹配输入行时在操作中使用它。例如,
$template myedit,"Packet: %msg:R,ERE,1,FIELD:Packet: .*?(SRC=.*LEN=[0-9]+).*--end%\n"
if ($msg contains "Packet: ") then {
action(type="omfile" file="/var/log/myedit.log" template="myedit")
}
模板表示模板变量myedit
是包含由正则表达式 (R) 匹配、扩展 (ERE)、组捕获 1 (1) 替换的属性的字符串msg
(如果不匹配,则保留原始字段)。实际的正则表达式是这Packet: .*?(SRC=.*LEN=[0-9]+).*
部分。这--end
是序列的强制性部分%...:R,...--end%
。添加最后一个换行符,因为我们将用此模板替换整个消息。
以下几行是您要编辑的行的常见 Rainer Script 测试以及结果的放置位置。