【发布时间】:2018-04-25 21:21:10
【问题描述】:
我刚刚为我的 apache 日志设置了一个 ELK 堆栈。它工作得很好。现在我想添加邮件日志,但我无法使用 grok 解析日志。
我正在使用此站点进行调试: https://grokdebug.herokuapp.com/
这是一个示例邮件日志(sendmail)条目:
Apr 24 19:38:51 ip-10-0-1-204 sendmail[9489]: w3OJco1s009487: to=<username@domain.us>, delay=00:00:01, xdelay=00:00:01, mailer=smtp, pri=120318, relay=webmx.bglen.net. [10.0.3.231], dsn=2.0.0, stat=Sent (Ok: queued as E2DEF60724), w3OJco1s009487: to=<username@domain.us>, delay=00:00:01, xdelay=00:00:01, mailer=smtp, pri=120318, relay=webmx.[redacted].net. [10.0.3.231], dsn=2.0.0, stat=Sent (Ok: queued as E2DEF60724)
从上面的文字中,我想抽出文字to=<username@domain.us>。
到目前为止,我有一个 grok 模式:
(?<mail_sent_to>[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*)
它给了我username@domain.us> 的结果,这很好,但我希望它的前面也有to=。我只希望这个 grok 过滤器匹配前面有 to= 的电子邮件地址。
我试过这个,但结果是“不匹配”:
(?<mail_sent_to>"to="[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.(?:[0-9A-Za-z][0-9A-Za-z-]{0,62}))*)
【问题讨论】:
-
或者,如果您需要获取整个
to=<...>,请使用\b(?<mail_sent_to>to=<[a-zA-Z0-9_.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:\.[0-9A-Za-z][0-9A-Za-z-]{0,62})*>) -
@WiktorStribiżew 第二个成功了!它给了我带有“to=<...>”的整个地址,谢谢!请写为答案,我会将其标记为解决方案。
标签: regex logstash elastic-stack logstash-grok