Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> почтовые системы —> Exilog

Настройка Exilog

Автор: OzZy.


Exilog - инструмент который позволяет красиво визуализировать,
просматривать по всевозможным фильтрам логи Exim через симпатишную веб-морду.
Использует mysql(или postgresql при желании).Написан на perl.

Система, на которой всё ставилось и работает -
/>uname -spr
FreeBSD 6.4-STABLE amd64

1)Устанавливаем сей инструмент из портов
 
cd /usr/ports/mail/exilog
   make install clean

2)Создание бд и таблиц.
 
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;
\q

Дамп таблиц находится -
/usr/local/share/doc/exilog/mysql-db-script.sql
mysql -u root -p *********  \ 
-D exilog </usr/local/share/doc/exilog/mysql-db-script.sql

Возможные косяки - дамп не импортируется,
ругаясь на слишком длинные праймари кей.
у меня наблюдались в таком случае - Mysql 5.1, база в utf-8)
Решение -укоротить их.

Вот дамп (уже подправленный),
который у меня импортировался ровно.

CREATE TABLE `deferrals` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `timestamp` bigint(20) NOT NULL default '0',
      `rcpt` varchar(200) NOT NULL default '',
      `rcpt_intermediate` varchar(200) default NULL,
      `rcpt_final` varchar(200) NOT NULL default '',
      `host_addr` varchar(15) default NULL,
      `host_dns` varchar(255) default NULL,
      `tls_cipher` varchar(128) default NULL,
      `router` varchar(128) default NULL,
      `transport` varchar(128) default NULL,
      `shadow_transport` varchar(128) default NULL,
      `errmsg` blob,
      PRIMARY KEY  (`server`,`message_id`,`timestamp`,`rcpt`(100),`rcpt_final`(100)),
      KEY `rcpt` (`rcpt`),
      KEY `rcpt_final` (`rcpt_final`),
      KEY `server` (`server`),
      KEY `message_id` (`message_id`),
      KEY `timestamp` (`timestamp`),
      KEY `host_addr` (`host_addr`)
    ) TYPE=MyISAM;

    CREATE TABLE `deliveries` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `timestamp` bigint(20) NOT NULL default '0',
      `rcpt` varchar(200) NOT NULL default '',
      `rcpt_intermediate` varchar(200) default NULL,
      `rcpt_final` varchar(200) NOT NULL default '',
      `host_addr` varchar(15) default NULL,
      `host_dns` varchar(255) default NULL,
      `tls_cipher` varchar(128) default NULL,
      `router` varchar(128) default NULL,
      `transport` varchar(128) default NULL,
      `shadow_transport` varchar(128) default NULL,
      PRIMARY KEY  (`server`,`message_id`,`timestamp`,`rcpt`(100),`rcpt_final`(100)),
      KEY `rcpt` (`rcpt`),
      KEY `rcpt_final` (`rcpt_final`),
      KEY `host_dns` (`host_dns`),
      KEY `timestamp` (`timestamp`),
      KEY `server` (`server`),
      KEY `message_id` (`message_id`),
      KEY `host_addr` (`host_addr`)
    ) TYPE=MyISAM;

    CREATE TABLE `errors` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `timestamp` bigint(20) NOT NULL default '0',
      `rcpt` varchar(200) NOT NULL default '',
      `rcpt_intermediate` varchar(200) default NULL,
      `rcpt_final` varchar(200) NOT NULL default '',
      `host_addr` varchar(15) default NULL,
      `host_dns` varchar(255) default NULL,
      `tls_cipher` varchar(128) default NULL,
      `router` varchar(128) default NULL,
      `transport` varchar(128) default NULL,
      `shadow_transport` varchar(128) default NULL,
      `errmsg` blob,
      PRIMARY KEY  (`server`,`message_id`,`timestamp`,`rcpt`(100),`rcpt_final`(100)),
      KEY `timestamp` (`timestamp`),
      KEY `server` (`server`),
      KEY `rcpt` (`rcpt`),
      KEY `host_addr` (`host_addr`),
      KEY `message_id` (`message_id`),
      KEY `rcpt_final` (`rcpt_final`)
    ) TYPE=MyISAM;

    CREATE TABLE `messages` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `timestamp` bigint(20) default NULL,
      `msgid` varchar(255) default NULL,
      `completed` bigint(20) default NULL,
      `mailfrom` varchar(255) default NULL,
      `host_addr` varchar(15) default NULL,
      `host_rdns` varchar(255) default NULL,
      `host_ident` varchar(255) default NULL,
      `host_helo` varchar(255) default NULL,
      `proto` varchar(32) default NULL,
      `size` bigint(20) default NULL,
      `tls_cipher` varchar(128) default NULL,
      `user` varchar(128) default NULL,
      `bounce_parent` varchar(16) default NULL,
      PRIMARY KEY  (`server`,`message_id`),
      KEY `msgid` (`msgid`),
      KEY `user` (`user`),
      KEY `timestamp` (`timestamp`),
      KEY `host_addr` (`host_addr`),
      KEY `message_id` (`message_id`),
      KEY `bounce_parent` (`bounce_parent`),
      KEY `mailfrom` (`mailfrom`),
      KEY `server` (`server`),
      KEY `host_dns` (`host_rdns`)
    ) TYPE=MyISAM;

    CREATE TABLE `queue` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `mailfrom` varchar(255) NOT NULL default '',
      `timestamp` bigint(20) NOT NULL default '0',
      `num_dsn` int(11) NOT NULL default '0',
      `frozen` bigint(20) default NULL,
      `recipients_delivered` blob,
      `recipients_pending` blob,
      `spool_path` varchar(64) NOT NULL default '',
      `subject` varchar(255) default NULL,
      `msgid` varchar(255) default NULL,
      `headers` blob NOT NULL,
      `action` varchar(64) default NULL,
      PRIMARY KEY  (`server`,`message_id`),
      KEY `spool_path` (`spool_path`),
      KEY `mailfrom` (`mailfrom`),
      KEY `message_id` (`message_id`),
      KEY `server` (`server`),
      KEY `timestamp` (`timestamp`),
      KEY `frozen` (`frozen`),
      KEY `msgid` (`msgid`),
      KEY `action` (`action`)
    ) TYPE=MyISAM;

    CREATE TABLE `rejects` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary default NULL,
      `timestamp` bigint(20) NOT NULL default '0',
      `host_addr` varchar(15) NOT NULL default '',
      `host_rdns` varchar(255) NOT NULL default '',
      `host_ident` varchar(255) default NULL,
      `host_helo` varchar(255) default NULL,
      `mailfrom` varchar(255) default NULL,
      `rcpt` varchar(255) default NULL,
      `errmsg` varchar(255) NOT NULL default '',
      UNIQUE KEY `rejects_unique` (`server`,`timestamp`,`host_addr`,`errmsg`),
      KEY `message_id` (`message_id`),
      KEY `server` (`server`),
      KEY `timestamp` (`timestamp`),
      KEY `host_addr` (`host_addr`),
      KEY `mailfrom` (`mailfrom`),
      KEY `rcpt` (`rcpt`),
      KEY `host_dns` (`host_rdns`)
    ) TYPE=MyISAM;

    CREATE TABLE `unknown` (
      `server` varchar(32) NOT NULL default '',
      `message_id` varchar(16) binary NOT NULL default '',
      `timestamp` bigint(20) NOT NULL default '0',
      `line` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`server`,`message_id`,`timestamp`,`line`),
      KEY `server` (`server`),
      KEY `message_id` (`message_id`),
      KEY `timestamp` (`timestamp`)
    ) TYPE=MyISAM;

3)Теперь правим конфиг:
cat /usr/local/etc/exilog.conf


{ # 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.

      'yourdomain.com' => {
                     'group' => 'YourGroup'
                  },

#      '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=localhost;port=3306',
      #'user'     => 'exilog',
      #'pass'     => 'exilog'

      # 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-agent.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' => 'yes',

     # The server the agent is running on. MUST
     # be one of the names specified in the
     # 'Servers' section above.
     'server' => 'yourdomain.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'
               ],

     # 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' => 365
      
   }, # 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',
       'bob',
       'alice',
       'peter'
     ]

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

# EOF

/usr/local/etc/>/usr/local/etc/rc.d/exilog restart
/usr/local/etc/rc.d/exilog: DEBUG: checkyesno: exilog_enable is set to YES.
exilog not running? (check /var/run/exilog.pid).
Starting exilog.
/usr/local/etc/rc.d/exilog: DEBUG: run_rc_command: doit:
/usr/local/sbin/exilog_agent.pl  
exilog_agent] Detaching from terminal, 
output goes to /var/log/exilog_agent.

В качестве лога, который будет парситься я выбрал свой -


/var/log/exim/main

Строка в конфиге exim:

cat /usr/local/etc/exim/configure |grep log_file_path
log_file_path =/var/log/exim/%s

4)Запуск демона, парсящего логи.
/usr/local/etc/rc.d/exilog start

Проверим, все ли хорошо:
ps -ax |grep exilog

Должны увидеть нечто подобное -
>ps -ax |grep exilog
24902  ??  Ss   0:00.12 [exilog_agent] (perl5.8.8)
24903  ??  S    0:06.03 [exilog_agent:_tail] 
24904  ??  S    0:03.79 [exilog_agent:_queue_manager] 
24905  ??  S    0:13.34 [exilog_agent:_queue_actions]

Все ок.
Если нет - смотрим логи,
ибо в них практически все ответы -
/var/log/exilog_agent

5)Добавим в автозагрузку

cat /etc/rc.conf |grep exilog
exilog_enable=YES

6)Настройка веб-морды.
Нужен
mod_cgi

, если его нет, пересобирайте апач.

Создаем ВиртуалХост для ексилога:

    <VirtualHost *:80>
    ServerAdmin user@domain.com.ua
    DocumentRoot /usr/local/www/exilog
    ServerName mail-stat.company.com
    DirectoryIndex exilog_cgi.pl
    ErrorLog /usr/local/www/exilog/logs/exilog.log
    <Directory "/usr/local/www/exilog/">
    Options ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>

Открываем в браузере - mail-stat.company.com
Видим (если все прошло нормально)
примерно следующее




Решение косяков с дампом бралось тут
http://butch.blog.ru/8083427.html



размещено: 2009-02-24,
последнее обновление: 2011-04-15,
автор: OzZy


Oloremo, 2009-02-20 в 15:19:02

При откравынии в браузере выдаёт:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator, you@example.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.

More information about this error may be available in the server error log.
----
В логах апача:
[error] [client 1.1.1.1] (11158) [exilog_config] Can't parse configuration file.
[error] [client 1.1.1.1] Premature end of script headers: exilog_cgi.pl

OzZy, 2009-02-23 в 10:33:31

Тут либо с правами грабли.Хотя у меня и на 644 с root:wheel норм работает, либо повнимательнее сравни свой конфиг с моим.

Kolesya, 2009-02-24 в 9:14:40

2Oloremo
90% что не разрешено выполнение скриптов в самом апаче

m0ps, 2009-02-24 в 9:34:57

а подобной вещи для постфикса никто не встречал?

McLeod095, 2009-02-24 в 10:50:26

[IMHO] За что люблю lissyar'у, за то что всегда выкладывается описание конфига и его строчек. Автору не респект за статью, можно и подправить и сделать нормальное описание, или хотя бы описать то что меняли, и для чего это нужно. Тем более сам exilog.conf хорошо комментирован и большого труда не составит перевести.
[/IMHO]

У самого давно работает данный сабж. Сам статью не писал т.к. там и писать-то нечего. Вещь прикольная, только необходимо иногда смотреть т.к. при хранении логов за пол года при выключении электричества может привести к краху БД. А т.к. данная вещь в использовании нужна не каждый день, то можно и не сразу найти проблему.

Присоединяюсь к вопросу о аналоге под postfix.

Grass_snake, 2009-02-24 в 12:48:08

Давно использую этот анализатор, весьма неплох. Хоть и не развивается давно.

Но вот вопрос.
Есть у меня две базы данных этого Exilog-а. Актуальная (рабочая) и старая. Хотелось бы вторую объединить с первой. Как это сделать?

OzZy, 2009-02-24 в 14:13:06

замечания приняты.исправлю

Andy2k, 2009-02-24 в 15:37:03

Кто-нибудь смог заставить эту шнягу парсить maillog?
У меня логи exim'a тоже складываются в именованые текущей датой файлы, поэтому в конфиге указываю /var/log/maillog - и нифига не работает

KaMa-CyTpA, 2009-02-24 в 16:24:59

>>Кто-нибудь смог заставить эту шнягу парсить maillog?

Думается что имя файла maiNlog
сам на грабли наступил
А теперь как часики!!!!

uHk, 2009-02-24 в 17:29:58

syslog_timestamp = yes

и будет работать :)
PS: решение нашел на форуме, спасибо abanamat

Oloremo, 2009-02-25 в 12:31:11

Да вроде нормально всё с пермишеннами:

mx# ls -la /usr/local/www/exilog/exilog_cgi.pl
-r-xr-xr-x  1 www  www  3699 Feb 20 11:57 /usr/local/www/exilog/exilog_cgi.pl
mx#

И cgi разрешён:
mx# grep cgi-script /usr/local/etc/apache22/httpd.conf
   AddHandler cgi-script .cgi
mx#

И выполнение разрешенно:
mx# cat /usr/local/etc/apache22/Includes/exilog.conf
Alias /exim-log "/usr/local/www/exilog"

<Directory "/usr/local/www/exilog/">
   Options ExecCGI
   AllowOverride All
   Order allow,deny
   Allow from all
</Directory>
mx#


Andy2k, 2009-02-25 в 17:32:34

>> Думается что имя файла maiNlog
>> сам на грабли наступил
>> А теперь как часики!!!!

Ничего не думается. Основной системный почтовый лог называется /var/log/maillog. И его эта погань не парсит ни разу, при этом в ее же логе тишина и благолепие.

Andy2k, 2009-02-25 в 17:33:19

>> syslog_timestamp = yes
>>
>> и будет работать :)
>> PS: решение нашел на форуме, спасибо abanamat

и куды это пихать???

Andy2k, 2009-02-25 в 17:35:44

2 Oloremo

Проверь права на файл /usr/local/etc/exilog.conf
Скорее всего у тебя 0600, а надо 0644

111, 2009-02-25 в 17:48:39

>> syslog_timestamp = yes
>>
>> и будет работать :)
>> PS: решение нашел на форуме, спасибо abanamat

>>и куды это пихать???

конф exim

tttrrr, 2009-02-25 в 17:48:58

>> syslog_timestamp = yes
>>
>> и будет работать :)
>> PS: решение нашел на форуме, спасибо abanamat

>>и куды это пихать???

конф exim

Sergei, 2009-02-28 в 9:35:42

Автор, на скриншоте не везде домен замазал... :)

alecx, 2009-03-10 в 16:43:36

Зачем замазывать домен на скриншоте, если он светится в конфиге? =)
+1 ищу подобие для postfix

jafff, 2009-05-20 в 13:31:23

прикольная часть конфига :)))
# EOF
/usr/local/etc/>mc
/usr/local/etc/>/usr/local/etc/rc.d/exilog restart
/usr/local/etc/rc.d/exilog: DEBUG: checkyesno: exilog_enable is set to YES.
/usr/local/etc/rc.d/exilog: DEBUG: checkyesno: exilog_enable is set to YES.
exilog not running? (check /var/run/exilog.pid).
/usr/local/etc/rc.d/exilog: DEBUG: checkyesno: exilog_enable is set to YES.
Starting exilog.
/usr/local/etc/rc.d/exilog: DEBUG: run_rc_command: doit:
/usr/local/sbin/exilog_agent.pl  
(88111) [exilog_agent] Detaching from terminal, output goes to /var/log/exilog_agent.
/usr/local/etc/>cat exilog.conf
{ # DO NOT REMOVE THIS BRACKET

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

tankistua, 2010-04-18 в 16:05:28

та да - хорошо закопипастил :)

я сначала даже не понял к чему эти все надписи.

gyurza2000, 2010-08-20 в 0:53:27

всё прекрасно...наверно, но под второй апач не ставится даже

konstantine, 2011-02-23 в 14:22:26

Ёшкин КОТ, а я на баше се писал епался, через утилиту eximstat парсил логи Экзмиа и потом уже сам по каталогам расскидывал чтоб через апач палить, ну канешно exilog это в разы круче чем тот маразм костыльный, который у меня.....

foobar, 2013-04-02 в 13:02:15

автор напиши как убирать foobar, появляется в exilog, хотя в конфиге убрал о нем упоминания, и заново базу пересоздал

foobar, 2013-04-03 в 12:44:07

решил проблему не завершался до этого запущенный процесс агента



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 1.306 секунд
Из них PHP: 75%; SQL: 25%; Число SQL-запросов: 78 шт.
У Вас отключено GZIP-сжатие в браузере. Размер страницы 57858