Найти в Дзене
Vseodevops

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

Журналы, также называемые «логами» (от англ. log), без ротации разрастались бы до неприличных размеров, занимая весь раздел жёсткого диска, отведённый под их хранение. Ротация журналов — управление журналами системы: копирование,
очищение, архивация, удаление устаревших архивов и перезапуск процесса,
пишущего журнал. Правильно настроенная ротация спасет от переполнения
свободного места и отсутствия логов при поиска ошибок работы служб. В 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/ Синтаксис главного и второс

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