Logstash 使用预定义的grok筛选器将单词连接到电子邮件

Logstash 使用预定义的grok筛选器将单词连接到电子邮件,logstash,logstash-grok,Logstash,Logstash Grok,首先感谢你阅读我的问题。 我有一个以下格式的日志中的电子邮件地址 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

首先感谢你阅读我的问题。 我有一个以下格式的日志中的电子邮件地址

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:连接到电子邮件?有人能帮忙吗

我也试过了,但没用

sendid:%{"sendid:"} %{DATA},

您的
sendid:%{DATA},
将不起作用,因为您在grok模式之外提供的任何内容都将作为环境匹配,在您的情况下,
sendid:
之间的所有内容都将匹配,
将为您提供

{
  "DATA": [
    [
      "name@test.co.uk"
    ]
  ]
}
您需要创建一个自定义模式,并将其与解决方案的预定义模式相结合,因为您不能完全使用任何预定义模式

Logstash允许您使用Oniguruma regex库为此类情况创建日志。语法是

(?<field_name>the pattern here)
{
  "DATA": [
    [
      "name@test.co.uk"
    ]
  ]
}
(?<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"
    ]
  ]
}