The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Автоматическая ротация log'ов с помощью logrotate (log rotate linux)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: log, rotate, linux,  (найти похожие документы)
From: Пётр Савич <support at highway.ru> Date: Mon, 28 Jun 2004 18:21:07 +0000 (UTC) Subject: Автоматическая ротация log'ов с помощью logrotate Оригинал: http://support.highway.ru/how/logrotate.html Автоматическая архивация (ротация) log-файлов с помощью logrotate У наших пользователей есть возможность архивировать файлы журналов 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 ? (http://www.oberhumer.com/opensource/lzop/) Архиватор lzop, используемый для ротации, реализует специальный асимметричный алгоритм сжатия без потерь. По сравнению с gzip, cжатие происходит примерно в два раза медленнее. Но зато распаковка происходит в три раза быстрее (200 Мб журнал за 1.6 сек на PIII-700). Архивный журнал не меняется, поэтому лучше сжать его один раз медленно, но потом уметь быстро расжимать. Этот факт используется стандартным анализатором статистики, который каждый раз распаковывает файлы "на ходу". В итоге получается почти десятикратный выигрыш по объему хранимых архивных журналов и экономия процессорного времени, особенно на больших журналах.

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1.1, Аксель (?), 15:19, 03/05/2006 [ответить]  
  • +/
    Как избежать перезагрузки httpd? Ведь если юзеров пара сотен, то после обработки каждого лога (допустим сделан общий лог сайтов юзера на аккаунт) делать перезагрузку вебсервера это уж слишком.
     
     
  • 2.2, Квагга (?), 18:55, 03/05/2006 [^] [^^] [^^^] [ответить]  
  • +/
    >Как избежать перезагрузки httpd? Ведь если юзеров пара сотен, то после обработки
    >каждого лога (допустим сделан общий лог сайтов юзера на аккаунт) делать
    >перезагрузку вебсервера это уж слишком.

    Даже не чихнет твоя парасотен. Вот пара тысяч на аджаксе...  И тоже не чихнет, кстати.

     
  • 2.3, kiba (??), 04:35, 10/08/2007 [^] [^^] [^^^] [ответить]  
  • +/
    есть немножко другая апачевская штука: rotatelogs
    rotatelogs - rotate Apache logs without having to kill the server
     

  • 1.4, ilrandir (?), 15:26, 24/11/2008 [ответить]  
  • +/
    А кто точнее скажет на что смотрит логротейт, когда решает что подошло нужное время для ротейта файла (прошла неделя, месяц) - на время создания файла, модификации (atime, ctime, mtime) или на что-то другое? А если прошло к примеру на 2 часа меньше чем неделя, недельный лог отработает?
     
  • 1.5, ilrandir (?), 18:40, 19/12/2008 [ответить]  
  • +/
    Спасибо выяснил почти все что хотел внимательно читая ман. Логротейт использует /var/lib/logrotate[/|.]status (это образный регексп) сохраняя там время последней ротации лога в формате
    "/var/log/squid/access.log" 2006-9-20
    Т.е. никаких секунд, минут, часов етс.
     
  • 1.6, СтатикХ (?), 16:10, 04/08/2009 [ответить]  
  • +/
    А /etc/newsyslog.conf уже не прёт?
     
  • 1.7, Аноним (-), 10:49, 03/05/2010 [ответить]  
  • +/
    я вот всё никак не могу понять как мне получить файлы вида - IIS - имя файла соответсвует логам которые в нём.
    Можно ли logrotate сказать ротировать логи ровно в 11:59:59 - все последующие записи должны уже находиться в новом файле.
     
  • 1.8, alexfear (?), 15:01, 18/04/2011 [ответить]  
  • +/
    Просто-напросто в директиве postrotate вместо
    /usr/bin/killall -HUP httpd
    указываем
    apachectl graceful && sleep 600
    что говорит апачу рестартовать "аккуратно", без обрыва пользовательских сессий, но на это надо время (чтобы юзеры сами прибили свою сессию), потому просим его подождать 10 минут.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру