我的日志文件包含以下 3 个日志条目:
2017-11-16 15:50:45 1eFLV7-0003so-Cd <= <> R=1eFLV7-0003sZ-4v U=Debian-exim P=local S=1853 T="Mail delivery failed: returning message to sender" from <>
2017-11-16 15:50:45 1eFLV7-0003so-Cd => [email protected] R=dnslookup T=remote_smtp H=smtp-51.xxx.com [xxx.xx.xx.xx] X=TLS1.2:DHE_RSA_AES_128_CBC_SHA1:128
2017-11-16 15:50:45 1eFLV7-0003so-Cd Completed
当出现“邮件发送失败*”时,我想要向我发送一封电子邮件[电子邮件受保护]” 出现在日志文件中。
我怎样才能实现这个目标?
也许 SEC - 简单事件相关器可以帮助我?
但下面的配置(模式)对我不起作用。
type=SingleWithThreshold
ptype=RegExp
pattern=Mail delivery failed: returning message to sender*[email protected]
desc=Problem with mail [email protected]
action=pipe '%s' /usr/bin/mail -s 'ERROR SEND MAIL' [email protected]
window=1
thresh=1
答案1
您正在使用SingleWithThreshold
并希望 * 能够匹配两行 - 但它不会。尝试Pair
。
像(未经测试)的东西,
type=Pair
ptype=RegExp
pattern=Mail delivery failed: returning message to sender
ptype2=RegExp
[email protected]
desc2=Problem with mail [email protected]
action2=pipe '%s' /usr/bin/mail -s 'ERROR SEND MAIL' [email protected]
window=1
您尝试的任何操作都需要处理这样的事实:您有两行文本,由换行符分隔。许多文本处理工具都可以在单独的行上工作,而星号字符也无法通过查看下一行来解决这个问题。
答案2
据我了解,您想要匹配源自同一输入文件的两个连续行。如果是这种情况,最简单的解决方案是使用 RegExp2 模式。事实上,SEC 始终以多行模式运行,无需任何特殊的命令行开关,并且任何模式匹配的行数都是通过“ptype”关键字设置的。以下是可能对您有帮助的规则:
type=Single
ptype=RegExp2
pattern=Mail delivery failed: returning message to sender.*\n.*admins@xxx\.com
desc=Problem with mail [email protected]
action=pipe '%s' /usr/bin/mail -s 'ERROR SEND MAIL' [email protected]
在此规则中,“RegExp2”表示“与连续 2 行匹配的正则表达式”。默认情况下,这些行必须来自相同的文件,但 --jointbuf 命令行选项解除了该限制。然而,在正常情况下你会不是想要使用此选项,因为它将来自所有源的事件放入同一输入缓冲区中以进行多行匹配,但事件的顺序不确定。
在上面的示例规则中,还请注意正则表达式:
Mail delivery failed: returning message to sender.*\n.*admins@xxx\.com
由于默认情况下 .* 不匹配换行符,因此表达式还利用 \n 来匹配换行符。
最后,我还想邀请您将有关 SEC 的更多问题发布到其邮件列表(https://sourceforge.net/p/simple-evcorr/mailman/simple-evcorr-users/),因为许多有经验的用户正在关注它,他们可以及时回答类似的问题。
亲切的问候,里斯托