我们正在寻找将我们的 PMDF 日志转储到 Splunk 中,并且我正在尝试解析 PMDF SMTP 日志,特别是消息,并且我遇到了一个问题,即命名捕获组 (dst_channel) 可能有也可能没有值。到目前为止,这是我的正则表达式:
\d{2}\-\w{3}\-\d{4}\s\d{2}\:\d{2}\:\d{2}\.\d{2}\s(?P<src_channel>\w+)\s+(?P<dst_channel>\w+)\s(?P<code>\w+)\s(?P<bytes>\d+)\s(?P<from>\w.+)\srfc822
我能够匹配以下消息,其中 tcp_msx_out_2 是 dst_channel
02-Feb-2017 08:00:19.60 tcp_exempt tcp_msx_out_2 E 2 mailman-bounces@list.xyz.com rfc822;user@xyz.com user@xyz.com <mailman.157.1486040414.29131.xxx@xxx.xyz.com> pmdf list.xyz.com ([x.x.x.x])
但是,我不匹配以下不包含 dst_channel 值的日志:
02-Feb-2017 09:00:01.59 tcp_imap_int Q 12 xxx@xyz.com rfc822;user@imap-internal.xyz.com user@imap.xyz.com <6940401380880269855036@PT-D69> pmdf user@imap.xyz.com: smtp;452 4.2.2 Over quota
我拥有的下一个命名捕获组是第一个消息示例中的代码 E 和第二个消息示例中的 Q),当 dst_channel 不存在时,正则表达式不会捕获所有代码。
如何修改条件语句的正则表达式,以便如果 dst_channel 存在,它会获取值,但如果没有,正则表达式会继续并能够始终如一地获取我拥有的其他命名捕获组的值?