首先感谢您阅读我的问题。 我在日志中有以下格式的电子邮件地址,
Apr 24 19:38:51 ip-10-0-1-204 sendmail[9489]: w3OJco1s009487: sendid:name@test.co.uk, 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)
我需要提取电子邮件以及单词sendid
输出应该如下所示,
{
"DATA": [
[
"sendid:name@test.co.uk"
]
]
}
我试过以下但它只提取我在这里测试的电子邮件,http://grokdebug.herokuapp.com/,
sendid:%{DATA},
如何在不创建新字段或定义新正则表达式的情况下将sendid:连接到电子邮件?有人可以帮忙吗?
我也试过这个,但它不起作用,
sendid:%{"sendid:"} %{DATA},
答案 0 :(得分:1)
您的sendid:%{DATA},
无法正常工作,因为您在grok模式之外提供的任何内容都会与周围环境相匹配,在您的情况下,sendid:
和,
之间的所有内容都会匹配,并且会给你,
{
"DATA": [
[
"name@test.co.uk"
]
]
}
您需要创建自定义模式并将其与解决方案的预定义模式相结合,因为您无法完全使用任何预定义模式。
Logstash允许您使用Oniguruma regex库为此类情况创建custom patterns。语法是,
(?<field_name>the pattern here)
在你的情况下,它将是,
\b(?<data>sendid:%{EMAILADDRESS})\b
<强>输出:强>
{
"data": [
[
"sendid:name@test.co.uk"
]
],
"EMAILADDRESS": [
[
"name@test.co.uk"
]
],
"EMAILLOCALPART": [
[
"name"
]
],
"HOSTNAME": [
[
"test.co.uk"
]
]
}