我的日志文件包含以下 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
当日志文件中出现“邮件传递失败*[email protected]”条目时,我想向我发送一封电子邮件。
我怎样才能做到这一点?
也许 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
您正在使用
SingleWithThreshold
并希望 * 将匹配两行 - 它不会。试试Pair
。像(未经测试),
您尝试的任何操作都需要处理这样一个事实,即您有两行文本,由换行符分隔。许多文本处理工具将在单独的行上工作,而星号字符也无法通过查看下一行来解决这个问题。
据我了解,您想要匹配源自同一输入文件的两个连续行。如果是这种情况,最简单的解决方案是使用 RegExp2 模式。事实上,SEC 一直在多行模式下运行,没有任何特殊的命令行开关,任何模式匹配的行数都由“ptype”关键字设置。以下是可能对您有帮助的规则:
在此规则中,'RegExp2' 表示“匹配 2 个连续行的正则表达式”。默认情况下,这些行必须来自同一个文件,但 --jointbuf 命令行选项解除了该限制。但是,在正常情况下,您不会希望使用此选项,因为它将来自所有源的事件放入同一个输入缓冲区以进行多行匹配,但事件的顺序未确定。
在上面的示例规则中,还请注意正则表达式:
由于默认情况下 .* 不匹配换行符,因此表达式还利用 \n 来匹配换行符。
最后,我还想邀请您将有关 SEC 的更多问题发布到其邮件列表 ( https://sourceforge.net/p/simple-evcorr/mailman/simple-evcorr-users/ ),因为许多有经验的用户正在关注谁可以及时回答类似的问题。
亲切的问候,里斯托