2017-01-07 9 views
1

Я использую Postfix, и мне нужно разобрать почтовые журналы после отправки писем. Прямо сейчас, я пытался заставить вещи работать, используя Fluentd, используя плагин tail для анализа журналов Postfix.Анализ журналов POSTFIX и отправка в ElasticSearch

Проблема, с которой я столкнулась, заключается в том, что я не могу разобрать их, используя многострочный вариант плагина хвоста. Я могу разобрать их индивидуально, используя регулярные выражения, но не вместе. Это может быть из-за того, что журналы являются асинхронными по своей природе, и каждый процесс регистрируется в файле всякий раз, когда у него есть информация для регистрации. Я планирую написать рубиновый скрипт для этой цели, но это может занять много времени.

Есть ли лучшее решение, чем писать скрипт/пользовательский плагин для Fluentd, учитывая, что я не знаю Ruby/Perl?

журналы, для которых я не забочусь, чтобы извлечь информацию из:

Jan 5 09:02:48 localhost postfix/pickup[5501]: 1733D16A90A: uid=0 from=<root> 
Jan 5 09:02:51 localhost postfix/qmgr[2596]: 1733D16A90A: removed 

журналы, для которых я забочусь, чтобы извлечь информацию из:

Jan 5 09:02:48 localhost postfix/cleanup[5978]: 1733D16A90A: message-id=<[email protected]> 
Jan 5 09:02:48 localhost postfix/qmgr[2596]: 1733D16A90A: from=<[email protected]>, size=460, nrcpt=1 (queue active) 
Jan 5 09:02:51 localhost postfix/smtp[5980]: 1733D16A90A: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[74.125.130.27]:25, delay=3.4, delays=0.05/0.01/1.9/1.5, dsn=2.0.0, status=sent (250 2.0.0 OK 1483624971 s11si76004239pgc.259 - gsmtp) 

В этом примере журналы должны быть отправленный в ElasticSearch в виде файла JSON, который затем сохранит их для дальнейшей обработки.

ответ

1

Если вам нужно только отслеживать отправку почты. Вы можете использовать идентификатор очереди Postfix
(1733D16A90A в своем журнале) в качестве ключевого слова в elasticsearch. Затем вам нужно проанализировать каждую строку с помощью grok и обновить статус для вашей записи. Взгляните на этот пример для моделей ГРОК:

https://github.com/whyscream/postfix-grok-patterns/blob/master/50-filter-postfix.conf

+0

Спасибо за ваш ответ. Хотя, написал собственный скрипт python, который экспортирует данные журнала в мой индекс Elasticsearch и обновляет документы с помощью QueueIDs в виде ключей и данных в json, как только данные будут найдены. –

-1

Я отвечал на подобный вопрос here для разбора логов Postfix с Logstash, и хотя я ненавижу ссылки на другой ответ, концепции остаются такими же и должны начните работу, но не включайте сложность конфигурации, как предусмотрено whyscream.

Те же понятия, что и grok, применимы и для Fluent.

Ваш лучший выбор - это входной плагин file для чтения файла. Это гарантирует, что вам не нужно беспокоиться о многострочной обработке и вместо этого можно сосредоточиться на каждой строке необходимой информации.

input { 
    file { 
     path => "/var/log/maillog" 
     type => "postfix" # You can define a type however you like. 
    } 
} 

В конечном счете вы должны стараться избегать написания специального сценария, если это возможно. Работа, необходимая для этого, была предпринята сообществами Logstash, Fluent и другими аналогичными инструментами. Управление регулярными выражениями для тысяч гранулированных журналов - это, в лучшем случае, раздражение.