Кручение логов pure-ftpd


pure-ftpd - очень хороший сервер, с поддержкой выделенных пользователей, баз данных и 
главное - с поддержкой перекодировки имен файлов, что очень удобно для использования с 
виндовыми клиентами. Кроме того, у pure-ftpd очень простой конфиг-файл, намного проще и 
удобнее чем у широко распространенных vsftpd или proftpd. Одна только незадача есть у 
pure-ftpd - плохо крутятся логи, и зачастую logrotate выбивает pure-ftpd напрочь в этом 
процессе. Можно конечно, делать restart, но это очень тормозной способ кручения - и он 
не годится для постоянно нагруженных серверов.

Достаточно много времени мой сервер крутился с опцией:

LOG="-O clf:/var/log/pureftpd/pureftpd.log"

Которая позволяла создавать лог в формате CLF и удобно использовать его, к примеру, в 
webalizer. Только лог получался слишком большой и я "крутил" его руками время от 
времени. Пока меня не осенила такая мысль - нужно поменять опцию:

LOG="-f ftp"

Это позволяет логировать ftp обычным syslog'ом - а вот логи syslog'а крутятся очень 
легко.

В моём случае конфиг syslog-ng.conf пришлось поменять так:

options { 
        chain_hostnames(no); 
        stats_freq(43200); 
        mark_freq(3600); 
};

source src {
    unix-stream("/dev/log" max-connections(256));
    internal();
    file("/proc/kmsg");
};

destination messages { file("/var/log/messages"); };

# pure-ftpd
destination ftp { file("/var/log/pureftpd/pureftpd.log"); };
filter f_ftp { facility(ftp); };
filter f_messages { not facility(ftp); };

destination console_all { file("/dev/tty12"); };

log { source(src); filter(f_ftp); destination(ftp); };
log { source(src); filter(f_messages); destination(messages); };
log { source(src); destination(console_all); };

Ну а дальше - дописать в /etc/logrotate.conf привычную секцию ротации:

/var/log/pureftpd/pureftpd.log {
    daily
    rotate 365
    missingok
    notifempty
    compress
    delaycompress
    dateext
    nomail
    sharedscripts
    postrotate
        /etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
    endscript
}

Вот и всё. От формата CLF пришлось отказаться ради ротации, но сделать CLF из 
сохраненных логов проблем не составляет. Поэтому всё отлично!