Опять одиноко, хоть и хорошо провел вторую половину дня…
Сегодня мы поговорим о том что такое ротация логов, с чем ее едят и насколько она вкусна. Ротация — процесс обновления чего‐то, круговорот чего‐то. Но что такое ротация логов?
Ротация логов — это процесс архивирования логов, удаление старых логов и все из этого вытекающее. Оно нужно для того, чтобы внезапно у вас не забилось все место на 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 внезапно стали помещаться в домашнюю директорию пользователя, и имели различные размеры (от пары мегабайт до нескольких гигов), и конечно же ротация логов не была перенастроена, и так вот логами было съедено приличный объем дискового пространства.
Мораль сей басни такова: работает — не трогай, блядь, и все будет работать отлично! А если хочется потрогать — ССЗБ :)
Еще почитать на тему можно тут, тут и тут.
Добра вам! Счастья! Здоровья! :)