Exilog — уникальная утилита позволявшая просматривать в веб браузере логи почтового сервера в приятном глазу виде а также выводить часть лога по заданному фильтру. Exilog  это не сбор статистики по логам сервера наподобие eximstat,  а онлайн просмотр того, что происходит на сервере сейчас или происходило за определенный промежуток времени. Ничего удобней и функциональной я пока не находил.

Для начала вам понадобится сама утилита, скачать ее можно с моего сайта Exilog.

Трабования к серверу:

  •  SQL сервер (mysql или postgres)
  • HTTP сервер с поддержкой CGI (например Apache)
  • Perl с
  • o DBD/DBI SQL Database модулям.
  • o Net::Netmask module

Установка будет проходить в четыре этапа

1. Создание базы данных

Создаем базу данных и даем все привилегии на нее пользователю exilog

mysql -u root -p
password:******
> CREATE DATABASE exilog DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
> GRANT ALL PRIVILEGES ON exilog.* TO exilog@localhost IDENTIFIED BY 'exilog';
> use exilog;
> GRANT ALL PRIVILEGES ON *.* TO exilog@localhost IDENTIFIED BY 'exilog' WITH GRANT OPTION;
> quit;

Дамп таблиц находится в скачаном архиве — «/share/doc/exilog/mysql-db-script.sql» распаковываем его в удобное для нас место и добавляем его в свеже созданную базу данных exilog

mysql -u root -p ********* -D exilog < mysql-db-script.sql

База данных готова.

2.Устанавливаем веб интерфейс

Скрипты для отображения веб интерфейса находятся в архиве в папке «/www/exilog/» распаковываем их в папку с веб страницами, в Suse она обычно находится по адресу «/srv/www/«. Я поместил распакованные файлы в папку с моими  страничками статистики «/srv/www/admin/exilog/» благо виртуальный хост на отображение папки admin в апаче уже был настроен. Теперь открывем в файл «/exilog/exilog_config.pm» находим и редактируем путь к файлу exilog.conf. По умолчанию он должен находится по адресу «/usr/local/etc/exilog.conf» мне это было долго и не удобно и я поместил конфиг просто в /етс вместе со всеми конфигами «/etc/exilog.conf» вы можете оставить все как есть, но не забудте тогда поместить файл конфига по правильному пути.

Не забудте проверить права на папку и файлы, веб сервер должен иметь к ним доступ.

Также на этом этапе необходимо скопировать в папку «/etc» конфиг файл. Он находится в архиве «/etc/exilog.conf-dist«.  Я скопировал его в «/etc/exilog.conf«.

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

Для примера приведу конфиг для сусе 11.3

{ # DO NOT REMOVE THIS BRACKET

  # Exilog config file. Read the comments. Obey the syntax.
  # (c) Tom Kistner 2005

    'servers' => { # ------------------------------------
      # Server definitions. One block per server,
      # separated with comma.

      # Currently, each server only has a single
      # property: Its group membership. Groups are
      # just strings that bundle servers. Each
      # server can only be in one group.

      # Keep the server names short (do not use FQDN).
      # Likewise, keep the group names short.

      'example.com' => {
                     'group' => 'MXes'
                  },

      #'fanucci' => {
      #               'group' => 'MXes'
      #            }

    }, # End of server definitions ----------------------

    'sql' => { # ----------------------------------------
      # SQL Server definition. Use one of the following
      # blocks as a template.

      # Example for local MySQL server
      'type'     => 'mysql',
      'DBI'      => 'DBI:mysql:database=exilog;',
      'user'     => 'exilog',
      'pass'     => 'exilog'

      # Example for remote MySQL server
      #'type'     => 'mysql',
      #'DBI'      => 'DBI:mysql:database=exilog;host=foobar.duncanthrax.net;port=3306',
      #'user'     => 'myuser',
      #'pass'     => 'mypass'

      # Example for Postgresql server
      #'type'     => 'pgsql',
      #'DBI'      => 'DBI:Pg:dbname=exilog;host=195.2.162.40;port=5432;',
      #'user'     => 'myuser',
      #'pass'     => 'mypass'

   }, # End of SQL server definition --------------------

   'agent' => { # ---------------------------------------
     # Agent configuration.
     # The agent writes a log file. You can also
     # use /dev/null here once things are running
     # smoothly.
     'log' => '/var/log/exilog_agent',

     # The agent writes its PID into this file. Useful,
     # if you want to start the agent using a command
     # like start-stop-daemon.
     'pidfile' => '/var/run/exilog.pid',

     # If this is set to 'no', the agent will NOT change
     # its process names to be more informative. This will
     # prevent problems on systems that restrict changes
     # to process names for security reasons (Debian and
     # NetBSD for example).
     #'use_pretty_names' => 'no',

     # The server the agent is running on. MUST
     # be one of the names specified in the
     # 'Servers' section above.
     'server' => 'example.com',

     # The log(s) to monitor. If you log via syslog,
     # this will only be a single file (typically
     # /var/log/mail). If you use Exim's own logging,
     # you should specify the mainlog and rejectlog here.
     'logs' => [
                 '/var/log/exim/main.log'
               ],

     # Path to Exim's queue directory.
     'queue' => '/var/spool/exim',

     # Path to your Exim binary
     'exim' => '/usr/sbin/exim',

     # Delay between two queue listing refreshes.
     # Thirty seconds is reasonable.
     'queue_refresh_delay' => 30

   }, # End of Exilog Agent configuration ---------------

   'cleanup' => { # -------------------------------------
     # Configuration for the database cleanup tool
     # (exilog_cleanup.pl).

     # How many days worth of logs to keep in the
     # database. 10 days is somehow reasonable. If
     # you run a small shop you can also keep months
     # of logs. If you run a VERY big shop you might
     # want to reduce this number or buy some more
     # processing power.
     'cutoff' => 30

   }, # End of exilog_cleanup.pl configuration ----------

   'web' => { # -----------------------------------------
     # Options for the web interface.

     # Defines how the web interface shows timestamps.
     # Use 'local' to use the local time of the HTTP server
     # machine, or use 'gmt' to use normalized GMT
     # timestamps.
     # TIP: If all of your machines are in one time zone,
     # use 'local'.
     'timestamps' => 'local',

     # When using basic auth to restrict access to the web
     # interface, you can define users to be "read-only".
     # They will not be able to cancel or delete messages
     # (but they can start a delivery run). Clients that
     # do not authenticate are mapped to a user name
     # of "anonymous".
     'restricted_users' => [
       'anonymous'
     ]

   } # End of web interface configuration ---------------
};

# EOF

Теперь проверим как отображается свеже копированный скрипт в браузере:

http:\\stats.example.com/exilog/exilog_cgi.pl

Должна появится примерно такая страничка

Если она появилась значит все нормально и можно переходить к следующему пункту. Если нет, проверить права на паку со скриптами, веб сервер должен иметь к ним доступ. Также следует проверить установлены и включены ли в апаче модули mod_perl2 и mod_cgi.

 

3.Устанавливаем агента который будет парсить лог файл эксима и наполнять базу данных.

 Как вы заметили в архиве осталось два не использованных файла «exilog_agent.pl» и «exilog_clanup.pl» в папке «/sbin». Первый из них нужно запустить как демона, он будет парсить лог эксима и наполнять базу данных, второй будет запускаться кроном и очищать старые записи БД.

Настройка скрипта для автозапуска  Exilog-a в Suse мной была рассмотрена ранее, прочитать об этом можно здесь: Скрипт автозапуска для Exilog и последовательность запуска демонов в Suse. Для других дистрибутивов скрипт будет отличатся, но тут уж каждый сам за себя. Собственно этот скрипт можно запускать как угодно, хоть вручную после каждого перезапуска ОС.

 

4.Установка скрипта очистки базы данных

Тут вообще все просто. Добавляем небольшой скриптик запускающий exilog_clenup.pl в «/etc/cron.daily/» и все.

пример скрипта

#!/bin/sh
/sbin/exilog_cleanup.pl

Если все прошло удачно мы получили удобный инструмент отслеживания брожения почты на почтовом сервере.