Теперь займемся настройкой скритпа pflogsumm. Давайте посмотрим какие данные сможет предложить нам pflogsumm:
Количество принятых , доставленных, перенаправленых, отложеных, вовзращенных отправителю или отброщеных сообщений .
Общий размер принятых и отправленых сообщений.
Список хостов и доменов занимавшихся отправкой и получением почты.
Список адресов пользователей учавствовавших в обмене сообщениями.
Статистика по количчеству входящих и исходящих smtp соединений .
Минимальная, средняя, наибольшая продолжительность smtp соединений с каждым хосто или доменом.
Характеристики ежедневного или почасового траффика создаваем ого почтой.
Данные о количестве сообщений с разбивкой по доменам и хостам.
Сведения о предупреждениях, фатальных ошибках или панических состояниях почтовой системы.
Данные о прочих информационных сообщения записаных в протокол демоном smtp.
Состояние почтовой очереди.
Англоязычную версию pflogsumm можно взять на сайте автора . Но все же мне кажется что гораздо приятнее читать отчеты на родном языке. Поэтому я предпочитаю использовать версию переведенную мною лично на русский язык. Скачать модифицированную версию скрипта можно http://www.onix.opennet.ru/files/. Создаем директорию для размещения скрипта и прочих файлов.
# mkdir /usr/local/pflogsumm
Теперь кладем туда русский pflogsumm. Переименовываем его для краткости в pflogsumm.pl. Устанавливаем файлу владельца, группу и право на выполнение.
Для выполнения pflogsumm желательно иметь Perl версии не ниже 5.004. Стабильная работа с более ранними версиями интерпретатора Perl не гарантируется. Узнать версию Perl установленного в системе можно с помощью комманды perl -v.
Запустив модуль pflogsumm на выполнение, Вы скорее всего получите ошибки подобные этим:
# ./pflogsumm.pl
Can't locate Date/Calc.pm in @INC (@INC contains: /usr/libdata/perl/5.00503/mach /usr/libdata/perl/5.00503 /usr/local/lib/perl5/site_perl/5.005/i386-freebsd /usr/local/lib/perl5/site_perl/5.005 .) at ./pflogsumm.pl line 213. BEGIN failed--compilation aborted at ./pflogsumm.pl line 213.
Это означает, что у Вас отсутствует модуль Perl по имени Date-Calc написанный Steffen Beyer. Он состоит из библиотеки языка С и модуля perl, который использует эту библиотеку. Нам этот модуль необходим для работы с датами Грегорианского календаря. Стандарт календаря описывается документами ISO/R 2015-1971, DIN 1355 и ISO 8601. На данный момент календарь такого типа используется во всех Европейских странах. В свою очередь для работы модуля Date-Calc нам потребуется модуль Bit-Vector. Берем самую последнюю версию, вышеописанных пакетов на сайте автора http://www.engelschall.com/~sb/download/. В случае если это сделать не удастся скачайте те же пакеты из центрального хранилища CPAN (Comprehensive Perl Archive Network). На момент написания статьи были актуальны версии Date-Calc-5.3 и Bit-Vector-6.3. Кладем оба пакета во временную директорию, например в /tmp. А затем начинаем распаковывать и устанавливать:
# tar zxvf Bit-Vector-6.3.tar.gz # cd Bit-Vector-6.3 # perl Makefile.PL # make # make test # make install
Если с Bit-Vector все прошло удачно, выполяем аналогичные действия для пакета Date-Calc. По окончанию установки снова запускаем pflogsumm.pl. Если на экране не появилось ни одной ошибки значит все требуемые модули находятся на месте и готовы к использованию.
Технология работы pflogsumm довольно проста. Пользователь передает на стандартный ввод скрипта файлы протокола почтовой системы. А результаты получает из стандартного вывода. Мне кажется что статистика должна собираться за прошедшую неделю, предыдущий и текущий день. Для выполнения этих задач мы напишем три вспомогательных скрипта. После их выполнения сформированные файлы должны записываться в директорию /usr/local/apache/htdocs/traffic/. С помощью web сервера apache работающего на этой же машине файлы из этой директории будут доступны начальству для просмотра с помошью любого web браузера. В дополнение к этому хотелось что бы недельная и ежедневная статистика приходила по почте администратору.
Для систем FreeBSD характерно хранение протокола почтовой системы длиной в одну неделю. В некоторых диалектах Linux принято хранить протоколы длиной в один месяц. Как и во многих других Unix подобных системах с помощью демона cron каждую ночь запускается задача ротации файлов протоколов. В результате работы этой задачи файл /var/log/maillog упаковывается с помощью программы gunzip и записывается вместо файла /var/log/maillog.0.gz. В других системах вместо gunzip используется bzip, но основной принцип это не меняет. Старое содержимое файла /var/log/maillog.0.gz записывается в файл /var/log/maillog.1.gz. Таким образом все файлы по цепочке смещаются вниз на один день. И только содержимое файла /var/log/maillog.6.gz никуда не копируется, а просто перезаписывается файлом /var/log/maillog.5.gz. Обдумав все вышесказанное приходим к выводу что недельный и ежедневный скрипты подсчета статистики должны запускаться после того как задача ротации логов успешно завершится. Во избежание всяких казусов уточните время запуска и завершения задачи ротации протоколов для вашей системы.
Ниже приводится содержимое файла /usr/local/pflogsumm/weekly.sh создающего недельную статистику.
#!/bin/sh # Собираем полный недельный протокол в файл weekly.maillog # такой подход облегчает обработку файла. Но в тоже время # стоит убедиться что в системе хватит места для этого файла.
# Записываем в файл weekly.name полный путь к результирующему файлу echo "/usr/local/apache/htdocs/traffic/" > /usr/local/pflogsumm/weekly.name date -v-7d "+%d%b%Y-" >> /usr/local/pflogsumm/weekly.name date -v-1d "+%d%b%Y" >> /usr/local/pflogsumm/weekly.name
# Убираем за собой мусор rm /usr/local/pflogsumm/weekly.maillog rm /usr/local/pflogsumm/weekly.name
Закончив с еженедельным скриптом перейдем к ежедневному собирающему данные за вчерашний день /usr/local/pflogsumm/daily.sh. Комментировать в нем нечего потому что это всего лишь упрощенная версия еженедельного расчета.
Последней и самой простой версией скрипта является задача запускающаяся ежечасно для сбора данных об активности на текуший день /usr/local/pflogsumm/hourly.sh
Для моей системы оптимально было установить время выполнения всех трех скриптов таким образом.
# crontab -e -u root
0 1 * * 1 /usr/local/pflogsum/weekly.sh
0 2 * * * /usr/local/pflogsum/daily.sh
20 * * * * /usr/local/pflogsum/hourly.sh
К сожалению пользователи других систем скорее всего столкнутся с проблемами при использовании первых двух скриптов. Это может произойти из-за того что внутри наших скриптов мы используем команду date c ключем -v. Не все операционные системы поддерживают такую опцию и возможно Вам прийдется править скрипты.
Выполнив все вышеописаное вы должны стать счастливым обладателем собственного почтового сервера.