Использование grok для сопоставления адреса электронной почты в индивидуальном стиле - PullRequest
0 голосов
/ 26 апреля 2018

Я только что установил стек ELK для моих журналов apache.Работает отлично.Теперь я хочу добавить почтовые журналы в микс, и у меня возникают проблемы при разборе журналов с помощью 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>.

Пока у меня есть это для шаблона Грока:

(?<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}))*)

Ответы [ 2 ]

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

Это очень просто, он создает собственный шаблон, чтобы соответствовать to=< и >, и предопределенный EMAILADDRESS для соответствия адресу электронной почты.

\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}
0 голосов
/ 26 апреля 2018

Вы можете использовать

\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})*>)

См. Демонстрационный пример regex .

Подробности

  • \b - граница слова
  • (?<mail_sent_to> - группа "mail_sent_to":
    • to=< - буквенная строка to=<
    • [\w.+=:-]+ - 1+ слово, ., +, =, : или - символов
    • @ - @ символ
    • [0-9A-Za-z] - буквенно-цифровой символ
    • [0-9A-Za-z-]{0,62} - от 0 до 62 букв, цифр или -
    • (?:\.[0-9A-Za-z][0-9A-Za-z-]{0,62})* - 0+ последовательностей
      • \. - точка
      • [0-9A-Za-z] - буквенно-цифровой символ
      • [0-9A-Za-z-]{0,62} - от 0 до 62 букв, цифр или -
    • > - > char
  • ) - конец группы.
...