Использование logrotate для настройки ротации логов
Утилита logrotate предназначена для управления лог-файлами во избежание увеличения их размеров. Например, она позволяет настроить сжатие, удаление и отправку лог-файлов на другой сервер при достижении заданных условий. Более подробная информация приведена на странице репозитория logrotate.
Частота проверки условий лог-файлов может принимать следующие значения:
-
hourly
— каждый час; -
daily
— каждый день; -
weekly
— каждую неделю; -
monthly
— каждый месяц; -
yearly
— каждый год.
По умолчанию включена еженедельная проверка.
Конфигурация logrotate хранится:
-
в основном конфигурационном файле /etc/logrotate.conf, в котором заданы параметры по умолчанию;
-
в директории /etc/logrotate.d, в которой содержатся дополнительные файлы конфигураций.
Основные конфигурационные параметры
Основные параметры, которые могут быть использованы в файлах конфигураций, перечислены в таблице ниже.
Параметр | Описание |
---|---|
size <number> |
Определяет размер лог-файла, при превышении которого выполняется ротация. Размер лог-файла может быть указан в КБ ( |
create <mode> <owner> <group> |
Позволяет создать новый лог-файл с указанными разрешениями, пользователем и группой после ротации лог-файла |
missingok |
Позволяет перейти к следующему шагу при отсутствии указанного лог-файла, не выдавая сообщение об ошибке |
nomail |
Позволяет не отправлять архивированный ранее (ротируемый) лог-файл по электронной почте |
notifempty |
Позволяет не выполнять ротацию пустого лог-файла |
rotate <count> |
Определяет количество ротаций лог-файла, то есть количество архивированных лог-файлов. Например, при количестве ротаций, равном |
sharedscripts |
Приводит к единоразовому выполнению скриптов, добавленных в файл конфигурации, независимо от количества лог-файлов, подходящих под указанный шаблон лог-файлов, например |
postrotate <command> endscript |
Приводит к выполнению команд, которые указаны между данными параметрами с помощью оболочки Bourne, сразу после завершения ротации лог-файла. Это может быть полезно для таких задач, как перезапуск сервиса, чтобы убедиться, что используется новый лог-файл для записи событий |
Установка и настройка logrotate
В зависимости от операционной системы и менеджера пакетов, которые вы используете, для установки и настройки logrotate выполните следующие шаги:
-
Установите logrotate:
-
Добавьте в конфигурационный файл /etc/logrotate.conf следующие строки:
-
для включения дополнительных параметров из директории /etc/logrotate.d в конфигурационный файл:
include /etc/logrotate.d
-
для добавления пользователя с правами
root
:# use the root group by default, since this is the owning group # of /var/log/syslog. su root root
Файл может быть изменен с помощью редактора
vi
илиvim
:$ sudo vi /etc/logrotate.conf
Содержимое обновленного файла logrotate.conf:
# see "man logrotate" for details # rotate log files weekly weekly # use the root group by default, since this is the owning group # of /var/log/syslog. su root root # keep 4 weeks worth of backlogs rotate 4 # create new (empty) log files after rotating old ones create # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d # no packages own wtmp and btmp -- we'll rotate them here /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.
-
Создание файла конфигурации
В качестве примера рассмотрим создание файлов конфигурации:
-
для Nginx;
-
для бэкенд-сервера (Backend Server) (ниже приведен пример ротации лог-файла audit.log).
Чтобы добавить файл конфигурации в директорию /etc/logrotate.d:
-
С помощью редактора
vi
илиvim
создайте файл конфигурации:-
для Nginx:
$ sudo vi /etc/logrotate.d/nginx
-
для статус-сервера:
$ sudo vi /etc/logrotate.d/status-server
-
для бэкенд-сервера:
$ sudo vi /etc/logrotate.d/audit
-
-
Добавьте в созданный файл конфигурацию для ротации лог-файлов.
Пример файла конфигурации nginx:/opt/adcm/log/nginx/*.log { su root root size 200M create 0644 missingok nomail notifempty rotate 5 sharedscripts postrotate docker exec -it adcm sh -c '/usr/sbin/nginx -s reopen' endscript }
Здесь:
-
/opt/adcm/log/nginx/*.log
— расположение лог-файлов с расширением .log, которые подлежат ротации. -
size 200M
— размер лог-файла, при достижении которого выполняется ротация. -
create 0644
— создание нового лог-файла после ротации, который имеет разрешение0644
(права на чтение и запись для владельца, право на чтение для группы и остальных пользователей). -
rotate 5
— количество архивных лог-файлов, хранимых logrotate, при этом каждый лог-файл содержит события за период частоты ротации. -
docker exec -it adcm sh -c '/usr/sbin/nginx -s reopen'
— команда для повторного открытия исполняемых файлов Nginx в контейнере ADCM и записи событий Nginx в новый лог-файл.
Пример файла конфигурации status-server:/opt/adcm/log/status.log { su root root size 200M create 0644 missingok rotate 5 sharedscripts postrotate docker exec -it adcm sh -c 'killall -USR1 runstatus' endscript }
Здесь
docker exec -it adcm sh -c 'killall -USR1 runstatus'
— команда для отправки запущенным процессам сигналаUSR1
, чтобы закрыть архивированный ранее лог-файл и продолжить запись событий в новый лог-файл.
Пример файла конфигурации audit:/opt/adcm/log/audit.log { size 1k create 0644 missingok nomail rotate 7 sharedscripts }
ПРИМЕЧАНИЕПо аналогии можно создать файлы конфигураций для ротации лог-файлов adcm.log, adcm_debug.log, ldap.log и cron_task.log. -
Проверка созданного файла конфигурации
После добавления файла в директорию /etc/logrotate.d проверьте работу logrotate путем вызова утилиты в режиме verbose, который позволяет получить подробную информацию о шагах, выполняемых logrotate:
$ sudo logrotate -v /etc/logrotate.d/nginx
reading config file /etc/logrotate.d/nginx Allocating hash table for state file, size 15360 B Handling 1 logs rotating pattern: /opt/adcm/log/nginx/*.log 10 bytes (5 rotations) empty log files are not rotated, old logs are removed considering log /opt/adcm/log/nginx/access.log log does not need rotating (log size is below the 'size' threshold) considering log /opt/adcm/log/nginx/error.log log needs rotating rotating log /opt/adcm/log/nginx/error.log, log->rotateCount is 5 dateext suffix '-20241002' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' renaming /opt/adcm/log/nginx/error.log.5 to /opt/adcm/log/nginx/error.log.6 (rotatecount 5, logstart 1, i 5), old log /opt/adcm/log/nginx/error.log.5 does not exist renaming /opt/adcm/log/nginx/error.log.4 to /opt/adcm/log/nginx/error.log.5 (rotatecount 5, logstart 1, i 4), old log /opt/adcm/log/nginx/error.log.4 does not exist renaming /opt/adcm/log/nginx/error.log.3 to /opt/adcm/log/nginx/error.log.4 (rotatecount 5, logstart 1, i 3), old log /opt/adcm/log/nginx/error.log.3 does not exist renaming /opt/adcm/log/nginx/error.log.2 to /opt/adcm/log/nginx/error.log.3 (rotatecount 5, logstart 1, i 2), old log /opt/adcm/log/nginx/error.log.2 does not exist renaming /opt/adcm/log/nginx/error.log.1 to /opt/adcm/log/nginx/error.log.2 (rotatecount 5, logstart 1, i 1), old log /opt/adcm/log/nginx/error.log.1 does not exist renaming /opt/adcm/log/nginx/error.log.0 to /opt/adcm/log/nginx/error.log.1 (rotatecount 5, logstart 1, i 0), old log /opt/adcm/log/nginx/error.log.0 does not exist log /opt/adcm/log/nginx/error.log.6 doesn't exist -- won't try to dispose of it renaming /opt/adcm/log/nginx/error.log to /opt/adcm/log/nginx/error.log.1 creating new /opt/adcm/log/nginx/error.log mode = 0644 uid = 100 gid = 0 running postrotate script