Sokoloff 22.01.2010 20:34

СкриптыАнализатор логов postfix`а

Как и обещал, выкладываю скрипт для просмотра логов postfix`а.

Введение.
Когда почтовый сервер обрабатывает письмо, он записывает в файл лога несколько строк. При большом почтовом трафике строки относящиеся к разным письмам перемешиваются, иногда записи относящиеся к одному письму отстоят друг от друга на несколько десятков строк. Это сильно мешает чтению логов. Чтобы решить эту проблему, в стародавние времена я написал скрипт на перле оригинальным названием maillog. Со временем в него добавлялся функционал, исправлялись ошибки. И теперь при возникновении вопросов с почтой, первое что мы делаем это запускаем этот скрипт.


Возможности и использование.
Скрипт сканирует файлы логов, группирует строки по письмам. Записи выделяются цветом в зависимости от успешности доставки, подсвечиваются адреса.

Есть возможность фильтрации писем по отправителю и/или отправителю, ключи -f и -t соответственно.

Использую ключ -d можно задать дату или диапазон дат на которые выводить письма. Даты можно задавать в разных вариантах, например:
12.1.2010-15.1.2010 - показать письма с 12-го по 15-е включительно. 10.01.2010- - письма прошедшие с 10-го и позже. -12.01 - обратное предыдущему варианту, 12-го и ранее. Если опущен год или месяц, то подставляется текущие. - - вообще, всё что было 1.1.2010 - за 1-е января 2010 года. По умолчанию показываются письма за сегодняшний день.

Если есть желание увидеть только письма с ошибками, т.е. которые не были доставлены, можно использовать опцию -e.

Все перечисленные ключи можно использовать в любых комбинациях.

Настройка.
Настроек не много :)
В начале скрипта есть строка "my $filePattern='/var/log/mail/mail*.log';" в ней задается шаблон имени для логов почтового сервера.


Ограничения.
В логах пишется только дата и месяц, поэтому невозможно фильтровать письма по году. Вы всегда можете опускать год в опции -d. Если у кого есть мысли, пишите мне.

У меня месяц в логе пишется по английски Jan, Feb и.т.д., если у кого-то они на русском, добавьте русские элементы в хеш %MONTHS.

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

Скрипт работает только с логами postfix`а. Я сейчас не помню сильно отличаются логи у других серверов, возможно реально добавить поддержку других программ.

P.S.
Как я говорил, скрипт используется в реальной работе, но мы используем syslog-ng и храним логи по дням в фалах формата mail-YYYY.MM.DD.log (кстати очень удобно). Система поиска по дате была реализована в скрипте по другому. Для универсальности я её сейчас переписал. Надеюсь, что не наделал ошибок, но все-же. Поэтому если будут ошибки пишите сюда или на email указанный в скрипте (maillog -V).

P.P.S.
По просьбе трудящихся добавил поддержку сжатых файлов логов (версия 1.5).

Вы можете архив скачать с программой на github-е github-е.



Тэги: perl postfix почта
+ 9 -
Похожие Поделиться

xtavras 22.01.2010 20:50 #
Спасибо, постараюсь добить cyrus c ldap и опробовать нормально работу постфикса, кстати никто такую связку не делал, был бы рад howto )
6uest 22.01.2010 22:59 #
У меня exim + dovecot на LDAP завязаны. Могу помочь с ними.
xtavras 22.01.2010 23:18 #
буду иметь ввиду, спасибо)
digiwhite 22.01.2010 21:14 #
Ой :) Перл :).
Sokoloff 22.01.2010 22:43 #
Это плохо или хорошо?

Это же программа для настоящих, бородатых админов :)

Вообще скрипт я написал очень давно, где-то в начале 2000-х. Тогда, по большому счету, для скриптов кроме перла да баша ничего и небыло. Нет, судя по википедии питон уже существовал, но что-то не припомню про него ни одной статьи тех времен.
digiwhite 22.01.2010 22:54 #
Это нормально :) Просто в последнее время про перл что-то совсем ничего не слышно. Поэтому несколько удивился :). Все как-то баш да баш :).
sergicus 22.01.2010 21:33 #
интересно
sergicus 27.12.2011 15:51 #
Сегодня попробовал запустить у себя
[root@mx1] 12/27/11 /usr/home/serge/myskript $./maillog
Error parse Dec 27 08:00:05 mx1 Mailman mail-wrapper: Group mismatch error. Mailman expected the mail wrapper script to be executed as group "nobody", but the system's mail server executed the mail script as group "mailman". Try tweaking the mail server to run the script as group "nobody", or re-run configure, providing the command line option `--with-mail-gid=mailman'.


я не очень понял почему
запускаю скрипт версии 1.5 , "my $filePattern= - изменил до расположения логов


cppmm 27.12.2011 17:01 #
Не туда ответил.
Вот.
cppmm 27.12.2011 17:30 #
Да, забыл уточнить. В патче предусмотрено игнорирование не только записей логов Mailman. Там в начале добавлен массив @exeptions = qw(Mailman); Так вот в скобках через пробел можно указать сколько угодно слов. Любая строка, в которой будет указанные слова, будет игнорироваться.
Только не стоит злоупотреблять, а то можно нарваться на то, что будут игнорироваться строки с почтовыми ящиками.
cppmm 27.12.2011 17:00 #
У вас mailman пишет в обычный почтовый лог свои ошибки в своём же хитром формате, поэтому скрипт не может их распарсить. Есть два пути решения - ковырять Mailman на предмет своих собственных логов, вставить в скрипт исключения.
По первому варианту ничего не подскажу, для второго набросал вот такой патчик. На скорую руку ваял и нормального лога постфикса под рукой нет, поэтому проверил бегло.
sergicus 28.12.2011 11:43 #
ЗАРАБОТАЛО :) спасибо большое, так гораздо удобнее чем просто грепом выискивать
sergicus 13.01.2012 13:31 #
В рамках этой темы добавляю - есть Парсер логов Postfix на PHP http://www.kirsenn.ru/simple-postfix-log-analyzer-php.htm - еще не пробовал


И нашел еще один скрипт http://sourceforge.net/projects/plogpy/ - тоже вполне ничего