Показаны сообщения с ярлыком xferlog. Показать все сообщения
Показаны сообщения с ярлыком xferlog. Показать все сообщения

пятница, 20 июля 2012 г.

Proftpd xferlog в mysql

Собственно, задача стояла записывать успешную/неспешную загрузку файлов пользователями proftpd. Установка сервера тривиальна (yum install proftpd proftpd-mysql) при подключении нужных репозиториев, например CentAlt. Сами пользователи находятся в БД mysql.

Создаем таблицу со следующими полями (думаю названия говорят сами за себя и не нуждаются в комментариях):

CREATE TABLE `ftpxferlog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(60) NOT NULL DEFAULT '',
  `filename` text,
  `size` bigint(20) DEFAULT NULL,
  `ip` tinytext,
  `action` tinytext,
  `duration` tinytext,
  `field_localtime` timestamp NULL DEFAULT NULL,
  `success` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `idx_usersucc` (`username`,`success`)
) ENGINE=InnoDB;

Можете создать пользователя, который может вносить информацию в эту таблицу
(GRANT INSERT ON DB.ftpxferlog TO SOME_USER@localhost identified by 'SOME_PASS';
FLUSH PRIVILEGES;)
В моем случае такого отдельного пользователя не потребовалось, поскольку я создал одного пользователя со всеми правами для конкретной базы данных;

В конфигурационном файле изменяем/добавляем:

#Указываем информацию для соединения с базой данных.
SQLConnectInfo  DB@localhost USERNAME PASSWORD

# Директива используется для логгирования информации в таблицу. Можно указывать несколько директив, что я буду делать.
# Первый параметр - список FTP-команд, для которых будет срабатывать логгирование.
# Второй параметр - название запроса, определенного директивой SQLNamedQuery
SQLLog RETR,STOR transfer1
SQLNamedQuery transfer1 INSERT "NULL, '%u', '%f', '%b', '%a', '%m', '%T', now(), '1'" ftpxferlog

SQLLog ERR_RETR,ERR_STOR transfer2
SQLNamedQuery transfer2 INSERT "NULL, '%u', '%f', '%b', '%a', '%m', '%T', now(), '0'" ftpxferlog

Литература:
http://www.iezzi.ch/archives/110

среда, 4 апреля 2012 г.

Настройка awstats для снятия статистики proftpd


Предположим пакет proftpd установлен и настроен. Задача сводится к получению статистики из файла /var/log/xferlog (путь к файлу может отличаться, проверьте директиву TransferLog в конфигурационном файле proftpd.conf) и приведению ее к удобочитаемому виду.

Пример лог-файла xferlog
Wed Jan 01 19:29:35 2012 1 192.168.1.1 102 /home/test/123.txt b _ o r test ftp 0 * c

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

Отредактировать файл /etc/awstats/awstats.DOMAIN.COM.conf (приведу лишь измененные строчки)
# Файл с данными
LogFile="/var/log/xferlog"
# Тип лог-файла, для web-сервера W, F — для ftp и т.п.:
LogType=F
# Строка, описывающая формат лог-файла
LogFormat="%time3 %other %host %bytesd %url %other %other %method %other %logname %other %code %other %other"
# Указываем имя домена
SiteDomain="DOMAIN.COM"
# Указываем все возможные псевдонимы домена
HostAliases="localhost 127.0.0.1 www.DOMAIN.COM ftp.DOMAIN.COM"
# В какой папке будут лежать БД awstats, на основе этих данных awstats сгенерирует отображаемую статистику.
DirData="/var/www/awstats/DOMAIN.COM"
# Путь к папке с иконками
DirIcons="/awstats/icon/"

Добавляем в cron:
crontab -e
30 * * * * /var/www/awstats/awstats.pl -config=DOMAIN.COM -update >/dev/null
40 * * * * awstats_buildstaticpages.pl -config=DOMAIN.COM -update -lang=ru -awstatsprog=/var/www/awstats/awstats.pl -dir=/var/www/awstats/DOMAIN.COM/ >/dev/null

Перезапуск crond.
service crond restart

Настройки виртуального хоста nginx можно взять из моей предыдущей заметки http://jskyworker.blogspot.com/2011/10/awstats-web-nginx.html

Литература: