Ротация логов в Linux с помощью logrotate

Журналы, также называемые «логами» (от англ. log), без ротации разрастались бы до неприличных размеров, занимая весь раздел жёсткого диска, отведённый под их хранение. Ротация журналов — управление журналами системы: копирование, очищение, архивация, удаление устаревших архивов и перезапуск процесса, пишущего журнал. Правильно настроенная ротация спасет от переполнения свободного места и отсутствия логов при поиска ошибок работы…


Журналы, также называемые «логами» (от англ. 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).


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *