Журналы, также называемые «логами» (от англ. log), без ротации разрастались бы до неприличных размеров, занимая весь раздел жёсткого диска, отведённый под их хранение.
Ротация журналов — управление журналами системы: копирование, очищение, архивация, удаление устаревших архивов и перезапуск процесса, пишущего журнал. Правильно настроенная ротация спасет от переполнения свободного места и отсутствия логов при поиска ошибок работы служб.
Debian/Ubuntu/CentOS
В Debian/Ubuntu/CentOS используется штатный logrotate. Logrotate — программа для управления файлами журналов, автоматически архивирует, удаляет, очищает их.
Установить (если пакет ещё не установлен):
# Ubuntu/Debian
apt install logrotate
# CentOs
yum install logrotate
# RH el8/el9
dnf install logrotate
Главный файл настроек: /etc/logrotate.conf
В этом файле должна быть строка для включения остальных файлов конфигурации:
include /etc/logrotate.d
Некоторое ПО складывает настройки ротации своих логов внутрь /etc/logrotate.d/
Синтаксис главного и второстепенных файлов одинаковый, можно настраивать ротацию логов и там, и там.
Пример настройки ротации журналов для nginx:
/var/log/nginx/*.log {
weekly
# ротация раз в неделю
create
# создавать файл после ротации
missingok
# отсутствие файла не является ошибкой
rotate 52
# сохраняется последние 52 ротированных файла
compress
# сжимать ротируемый файл
delaycompress
# сжимать предыдущий файл при следующей ротации
notifempty
# не обрабатывать пустые файлы
create 0640 user group
# сразу после ротации создать пустой файл с заданными правами и пользователем
sharedscripts
# скрипты prerotate/postrotate будут выполнены только один раз не зависимо от количества журналов, подходящих под заданный шаблон
postrotate
# скрипт будет выполнен сразу после ротации
[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
}
Для настройки ротации журналов для доменов (журнал доступа и ошибок) нужно создать секцию c таким заголовком:
/var/www/httpd-logs/*.log {
В большинстве случаев стоит указать следующие опции:
sharedscripts
notifempty
missingok
delaycompress
postrotate
[ ! -f /var/run/httpd.pid ] || kill -USR1 `cat /var/run/httpd.pid`
endscript
И настроить период ротации и кол-во хранимых архивов:
weekly
rotate 52
После чего закончить секцию фигурной закрывающей скобкой:
}
Внутри которой указать желаемые параметры ротации (зависят от посещаемости сайта и пожеланий администратора).
Проверяем как все у нас будет работать (ничего не создастся и не удалится, это только проверка):
logrotate -d /etc/logrotate.d/nginx
Если все в порядке, можно запустить ротацию:
logrotate -v -f /etc/logrotate.d/nginx
Запускается logrotate обычно сам ежедневно (из скрипта /etc/cron.daily/logrotate).
Добавить комментарий