2013-09-17 5 views
0

Я пытаюсь разобрать поле @message из журнала Postfix и извлечь его в несколько полей.logstash parse log field

Сообщение:

<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<[email protected]>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0) 

LogStash Выход:

{ 
    "@source": "syslog://192.244.100.42/", 
    "@tags": [ 
    "_grokparsefailure" 
    ], 
    "@fields": { 
    "priority": 13, 
    "severity": 5, 
    "facility": 1, 
    "facility_label": "user-level", 
    "severity_label": "Notice" 
    }, 
    "@timestamp": "2013-09-17T17:12:06.958Z", 
    "@source_host": "192.244.100.42", 
    "@source_path": "/", 
    "@message": "<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<[email protected]>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)", 
    "@type": "syslog" 
} 

Я пытался использовать ГРОК анализатор, но данные остаются в @message поле. Я хочу использовать синтаксический анализатор syslog с регулярными выражениями.

Какие шаги следует выполнить для анализа поля @message?

ответ

0

Тот факт, что на вашем выходе имеется ошибка _grokparsefailure, указывает на проблему, анализирующую ваши журналы. Что такое фильтр grok, который вы используете в своей конфигурации?

0

Пока мы находимся в Logstash 5.x, понятия grok остаются прежними.

К сожалению, у Postfix есть некоторые действительно раздражающие шаблоны при регистрации, так как в горстке людей написано около patterns, на которые приходится большая часть данных, которые вы увидите в журналах Postfix. Я буду использовать только некоторые из них.

Ключ состоит в том, чтобы идентифицировать компоненты сообщения, если они соответствуют стандарту или в значительной степени популярны, вероятно, для него уже написан громовой фильтр (например, syslog). Компоненты сообщения, которое вы не знаете, вы можете написать фильтр с grok.

Давайте разобьем сообщение на части:

  • <22>Sep 17 19:12:14 postfix/smtp[18852]:: Это почти RFC5424 системный журнал, но отсутствует вер (версия) поле.

    • SYSLOG5424PRI: Приоритетное значение
    • SYSLOGTIMESTAMP: Самоходный пояснительная
    • SYSLOGPROG: Название приложения
  • 28D40A036B: to=<[email protected]>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0): Это информация о домене специфические для Postfix.

    • POSTFIX_KEYVALUE_DATA: Используется в качестве компонента другого фильтра, чтобы соответствовать ключ = значение данных (например, реле = ..., задержка = ...).
    • POSTFIX_QUEUEID: Самоходный пояснительная
    • POSTFIX_KEYVALUE: Объединяет POSTFIX_QUEUEID и POSTFIX_KEYVALUE_DATA.
    • POSTFIX_SMTP_DELIVERY: Использует POSTFIX_KEYVALUE для идентификации вышеуказанной информации до состояния =, после чего это ответ SMTP.

Фильтр:

filter { 
    if [type] == "postfix" { 
     grok { 
      patterns_dir => "/etc/logstash/patterns" 
      match => { "message" => "%{SYSLOG5424PRI}%{SYSLOGTIMESTAMP} %{SYSLOGPROG}: %{POSTFIX_SMTP_DELIVERY}" } 
     } 
    } 
} 

Где бы вы сохранить шаблоны Postfix в patterns_dir.

Выход:

{ 
    "postfix_queueid" => "28D40A036B", 
    "@timestamp" => 2017-02-23T08:15:32.546Z, 
    "postfix_smtp_response" => "250 2.0.0 Ok: queued as 9030A15D0", 
    "port" => 50228, 
    "postfix_keyvalue_data" => "to=<[email protected]>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent", 
    "syslog5424_pri" => "22", 
    "@version" => "1", 
    "host" => "10.0.2.2", 
    "pid" => "18852", 
    "program" => "postfix/smtp", 
    "message" => "<22>Sep 17 19:12:14 postfix/smtp[18852]: 28D40A036B: to=<[email protected]>, relay=192.244.100.25[192.244.100.25]:25, delay=0.13, delays=0.01/0.01/0.09/0.02, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 9030A15D0)" 
} 

Все вышеперечисленные ГРОК фильтров либо common или написаны кем-то еще, чтобы служить цели. К счастью, многие используют Postfix, но у немногих есть фильтры для него, так как это довольно сложно.

Как только это будет установлено, вы можете получить довольно crafty с вашей конфигурацией Logstash.