GetInfo.Ru – Компьютерная библиотека
Последние поступления
Как выбрать систему управления базы данных
Базы данных03/09/14
Этапы загрузки UNIX (в схеме)
Unix27/03/12
Gatewall Antispam: тотальный контроль электронной почты
Спам21/04/11
Мастер-класс: создаем Интернет-магазин (Часть 1)
Обзоры ПО20/04/11
CorelDRAW Graphics Suite X5: Что нового?
Обзоры ПО20/07/10
Добавить статью
Самые читаемые материалы
Базовая настройка SQUID(113810)
Простая и эффективная система подсчета трафика в ОС FreeBSD(50662)
Совместное использование прозрачного прокси-сервера (Squid) и биллинговой системы UTM(40273)
Настройка Squid(37576)
Настройка VPN и NetUP Radius сервера(35280)
Всего статей: 793Всего авторов: 364Подразделов: 47Добавлено за сутки: 0
Статьи  СТАТЬИ Форум  ФОРУМ Рейтинг  РЕЙТИНГ Поиск  ПОИСК Контакты  КОНТАКТЫ
» Главная » Unix » Автоматическая архивация (ротация) log-файлов с помощью logrotate

Автоматическая архивация (ротация) log-файлов с помощью logrotate


Пётр Савич
http://support.highway.ru/

У наших пользователей есть возможность архивировать файлы журналов web-сервера (access.log, errors.log, либо других) с помощью модифицированной утилиты logrotate(8). Этот процесс обычно называется "ротация логов".

Ротация логов служит для контроля размера дискового пространства, занимаемого журналами. Утилиту logrotate, которая это делает, обычно запускают с помошью планировщика заданий crond. В результате работы logrotate остается один активный файл журнала (в который "сейчас" происходит запись со стороны сервера) и несколько архивных файлов, сжатых специальным упаковщиком. Обычно это выглядит так:

access.log, access.log.1.lzo, access.log.2.lzo, ... access.log.10.lzo

Здесь access.log – текущий, access.log.1.lzo – самый новый архив, access.log.10.lzo – самый старый архив.

Утилита logrotate находится в каталоге /opt/sbin/logrotate. Для ее работы необходим специальный файл настроек. В нем перечисляются файлы журналов, которые необходимо архивировать, и все ассоциированные с ними параметры.

Далее приведен пример файла настроек (etc/logrotate.conf). Строки, выделенные этим цветом – комментарии, их вводить не нужно.

"/home/<user-www>/logs/access.log" 
{ 
rotate 10		кол-во хранимых сжатых фрагментов 
size=16M		максимальный размер несжатого файла; 
		пока размер текущего файла журнала не превысит данный порог, 
		файл не будет "ротирован" 
missingok		отсутствие файла не является ошибкой 
nocopytruncate	не сбрасывать файл журнала после копирования 
nocreate		не создавать пустой журнал 
nodelaycompress	не откладывать сжатие файла на следующий цикл 
nomail		не отправлять содержимое удаляемых (старых) журналов по почте 
notifempty		не обрабатывать пустые файлы 
noolddir		держать все файлы в одном и том же каталоге 
compress		сжимать 
postrotate
     /usr/bin/killall -HUP httpd
endscript		Между postrotate и endscript расположены команды
		интерпретатора sh(1), исполняемые непосредственно после ротации.
		В данном примере сюда помещена команда kill, перезапускающая httpd-сервер.
		Это необходимо для нормальной процедуры 

} 
"/home/<user-www>/logs/errors.log" 
{ 
rotate 4 кол-во хранимых сжатых фрагментов 
weekly		игнорировать размер файла; производить ротацию регулярно, раз в неделю 
missingok  
nocopytruncate  
nocreate  
nodelaycompress  
nomail  
notifempty  
noolddir  
compress  
postrotate
     /usr/bin/killall -HUP httpd
endscript  

}

Как можно увидеть из примеров, существует два подхода: обычная (регулярная) ротация и ротация по достижению предельного размера файла.

  • access.log
    Для журнала access.log в примере выбран второй подход, по достижению файлом размера 16 мегабайт. Если утилита обнаруживает данный факт, ротация происходит. Всего система хранит 10 архивных фрагментов. Самый старый удаляется.
  • errors.log
    Журнал диагностики errors.log ротируется регулярно, раз в неделю. Система хранит 4 архивных фрагмента (за месяц), самый старый удаляется.

Полное описание формата файла можно просмотреть по этой команде:

$ man 8 logrotate
Внимание: Стандартная утилита использует архиватор gzip, а модифицированная – lzop.

Утилита logrotate

Утилита доступна как /opt/sbin/logrotate. Формат запуска:

/opt/sbin/logrotate -s <файл_состояния> <файл_настроек>

Пример:

/opt/sbin/logrotate -s $HOME/logs/logrotate.state $HOME/etc/logrotate.conf

Вы можете отказаться от автоматической ротации логов, убрав соответствующую строку в файле планировщика заданий etc/crontab:

0 1 * * * /opt/sbin/logrotate -s $HOME/logs/logrotate.state $HOME/etc/logrotate.conf 

Расчет объема файлов

Для оптимальной ротации журналов нужно правильно рассчитать параметры: какой предел выставить и сколько архивных файлов хранить. Эта задача решается следующим образом.

Для начала следует принять коэффициент сжатия K = 10 (журналы сжимаются хорошо). Также нужно определить максимальный объем пространства, занимаемый журналом S. Примем число фрагментов равным N = 10. Нужно найти предельный размер (порог) ротации L.

Рассчитаем суммарный объем, занимаемый журналом и частями его архива:

N * L / K + L = 10 * L / 10 + L = 2 * L = S; 
L = S/2

Мы заключили, что суммарный занимаемый объем равен двойному порогу ротации. Если мы хотим отвести на журнал четверть дисковой квоты Q, то L = Q/8.

Замечания

  1. В устойчивом состоянии общий размер файлов будет колебаться между величинами L и 2*L. Нижний предел соответствует состоянию после ротации, верхний – непосредственно перед ротацией.

  2. Расчет произведен условно. Предполагается, что ротация происходит примерно в том же время, что и достижение размера текущего файла порогового значения.

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

Почему lzop?

Архиватор, используемый для ротации, реализует специальный асимметричный алгоритм сжатия без потерь. По сравнению с gzip, cжатие происходит примерно в два раза медленнее. Но зато распаковка происходит в три раза быстрее (200 Мб журнал за 1.6 сек на PIII-700). Архивный журнал не меняется, поэтому лучше сжать его один раз медленно, но потом уметь быстро расжимать. Этот факт используется стандартным анализатором статистики, который каждый раз распаковывает файлы "на ходу". В итоге получается почти десятикратный выигрыш по объему хранимых архивных журналов и экономия процессорного времени, особенно на больших журналах.

 
14.05.2004
Версия для печати Версия для печати Запомнить ссылку Запомнить ссылку
Ваша оценка:  1   2   3   4   5     

 О проектеПерепечаткаАвторамПартнерыО нас пишут
Наверх
©2003—2007. GETINFO.RU. ВСЕ ПРАВА ЗАЩИЩЕНЫ.