Для самых маленьких: ротация логов и с чем ее едят

Опять одиноко, хоть и хорошо провел вторую половину дня…

Сегодня мы поговорим о том что такое ротация логов, с чем ее едят и насколько она вкусна. Ротация — процесс обновления чего‐то, круговорот чего‐то. Но что такое ротация логов?

Ротация логов — это процесс архивирования логов, удаление старых логов и все из этого вытекающее. Оно нужно для того, чтобы внезапно у вас не забилось все место на HDD/SSD различными логами, ну, а так же для того, чтобы не было слишком много одинаковых и очень больших лог‐файлов. При ротации логов происходит несколько вещей:

  • Файл журнала архивируется и сохраняется под именем log.log.0
  • Более старые логи переименовываются (log, log,0 в log.log.1 и т.д.)
  • Самые старые логи удаляются
  • Очищается «главный» файл лога
  • Перезапускается демон пишуший логи если это необходимо

Порядок всех этих действий может быть произвольным, и зависит от напрямую от реализации утилиты для ротации логов. В linux‐based системах зачастую используется утилита logrotate которая запускается по умолчанию (покрайней мере в ubuntu) кроном раз в день и делает свою грязную работу. В bsd системах, насколько мне известно, используется newsyslog для той же самой работы, но т.к. freebsd я видел всего несколько раз в жизни — ничего полезного я сказать о ней не могу :).

Logrotate имеет свой конфигурационный файл /etc/logrotate.conf в котором описаны глобальные параметры, а так же, подключаются различные дополнительные конфиги из /etc/logrotate.d в которых описаны действия для различных демонов. Например, конфиг nginx выглядит примерно так:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then 
            run-parts /etc/logrotate.d/httpd-prerotate; 
        fi; 
    endscript
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Конфигурационные файлы logrotate человекопонятные. В частности, в этом конфигурационном файле описываются правила для файлов попадающийх под glob‐шаблон /var/log/nginx/*.log:

  • missingok — говорит о том, что если файла нету то все ок
  • daily — проводить ротацию ежедневно
  • rotate X — хранить X файлов
  • compress — сжимать старые файлы
  • delaycompress — не сжимать последний лог
  • notifempty — не архивировать пустые файлы
  • create ACCESS_MODE USER GROUP — с какими правами создавать архивы
  • sharedscripts — какая то фишка для prerotate и postrotate:)
  • prerotate, postrotate — что сделать перед ротацией и после нее.

Что меня побудило написать эту статью? Написать эту статью я решил потому что обнаружил то, что на моих серверах которые я админю логи apache и nginx внезапно стали помещаться в домашнюю директорию пользователя, и имели различные размеры (от пары мегабайт до нескольких гигов), и конечно же ротация логов не была перенастроена, и так вот логами было съедено приличный объем дискового пространства.

Мораль сей басни такова: работает — не трогай, блядь, и все будет работать отлично! А если хочется потрогать — ССЗБ :)

Еще почитать на тему можно тут, тут и тут.

Добра вам! Счастья! Здоровья! :)

comments powered by Disqus