我刚刚为我的apache日志设置了麋鹿堆栈。它运作良好。现在我想在混音中添加maillogs,并且我在用grok分析日志时遇到了麻烦。
我正在使用此网站进行调试:https://grokdebug.herokuapp.com/
这是一个示例maillog(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}))*)
您可以使用
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})*>)
或,因为[a-zA-Z0-9_]
与w
相同的字符匹配:
b(?<mail_sent_to>to=<[w.+=:-]+@[0-9A-Za-z][0-9A-Za-z-]{0,62}(?:.[0-9A-Za-z][0-9A-Za-z-]{0,62})*>)
请参阅正则演示。
详细信息
-
b
-单词边界 -
(?<mail_sent_to>
-" mail_sent_to"组:-
to=<
-字符串to=<
-
[w.+=:-]+
-1 字,.
,+
,=
,:
或-
chars -
@
-@
char -
[0-9A-Za-z]
-字母数字char -
[0-9A-Za-z-]{0,62}
-0至62个字母,数字或-
-
(?:.[0-9A-Za-z][0-9A-Za-z-]{0,62})*
-0 序列-
.
- dot -
[0-9A-Za-z]
-字母数字char -
[0-9A-Za-z-]{0,62}
-0至62个字母,数字或-
-
-
>
-a>
char
-
-
)
-组的结束。
这很简单,它创建了一个自定义模式以匹配 to=<
和 >
,并预定的电子邮件address匹配电子邮件地址。
b(?<mail_sent_to>to=<%{EMAILADDRESS}>)
这将输出,
{
"mail_sent_to": [
[
"to=<username@domain.us>"
]
],
"EMAILADDRESS": [
[
"username@domain.us"
]
],
"EMAILLOCALPART": [
[
"username"
]
],
"HOSTNAME": [
[
"domain.us"
]
]
}
编辑:
电子邮件模式是
EMAILLOCALPART [a-zA-Z][a-zA-Z0-9_.+-=:]+
EMAILADDRESS %{EMAILLOCALPART}@%{HOSTNAME}