Объединить слово в электронное письмо, используя предопределенный фильтр grok - PullRequest
0 голосов
/ 17 мая 2018

прежде всего спасибо, что прочитали мой вопрос. у меня есть адрес электронной почты в журнале в следующем формате,

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},

1 Ответ

0 голосов
/ 17 мая 2018

Ваш sendid:%{DATA}, не будет работать, потому что все, что вы предоставляете вне шаблона grok, сопоставляется с окружением, в вашем случае все между sendid: и , будет совпадать, и это даст вам,

{
  "DATA": [
    [
      "name@test.co.uk"
    ]
  ]
}

Вам необходимо создать пользовательский шаблон и объединить его с предварительно определенным шаблоном для вашего решения, поскольку вы не можете использовать какой-либо предварительно определенный шаблон полностью.

Logstash позволяет создавать пользовательскийшаблоны с использованием библиотеки регулярных выражений Oniguruma для таких ситуаций.Синтаксис:

(?<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"
    ]
  ]
}
...