{DATE}
Журналы в Linux иногда разрастаются до неприличных размеров, что приводит к снижению производительности и в некоторых особо запущенных случаях может даже вызвать переполнение дискового пространства. К счастью, администратор может использовать утилиту logrotate для управления журналами.
Logrotate – это утилита, выполняющая ротацию и сжатие файлов протоколов (журналов). При правильной настройке файл журнала никогда не разрастется до огромных размеров. Если же Logrotate не установлена или же неправильно настроена, файлы журналов некоторых сервисов (например, Apache) могут занять все доступное дисковое пространство. По умолчанию Logrotate установлена в Ubuntu 16.04 и настроена для обработки журналов всех установленных пакетов и приложений, в том числе rsyslog.
Не смотря на то, что Logrotate установлена по умолчанию, будет нелишним проверить ее конфигурацию. На одном из моих серверов почему-то не выполнялась ротация журналов Apache, в результате произошло переполнение дискового пространства.
Конфигурация Logrotate хранится в следующих местах:
Рассмотрим конфигурацию ротации журналов для apport – файл /etc/logrotate.d/apport:
/var/log/apport.log { daily rotate 7 delaycompress compress notifempty missingok }
Вот что означают все эти параметры:
Конечно, это далеко не все допустимые параметры конфигурации. О дополнительных вы можете узнать в справке (команда man logrotate).
Теперь представим, что у нас есть некий сервис daemond, хранящий свои файлы журналов в каталоге /var/log/daemond. Нужно настроить ротацию журналов этого сервиса.
Все достаточно просто: нужно в /etc/logrotate.d создать файл daemond (название может быть другим, важно, чтобы вы понимали, что находится в этом файле сразу по его названию) и заполнить конфигурацию ротации.
Создадим файл конфигурации ротации:
touch /etc/logrotate.d/daemond
Конфигурация может быть такой:
/var/log/daemond/*.log { daily missingok rotate 7 compress notifempty create 0640 daemon-data daemon-data sharedscripts postrotate systemctl reload daemond endscript }
Первая строчка задает файлы журналов. В нашем случае – это все log-файлы из каталога /var/log/daemond. С первыми пятью командами вы уже знакомы. Команда create определяет, что после ротации будет создан новый пустой файл журнала с правами 0640, владельцем daemon-data и группой daemon-data. Если ваш сервис выполняется от имени какого-то пользователя (например, daemon-data), а не от root, то очень важно указать правильно имя пользователя и группы.
Параметр sharedscripts означает, что скрипт postrotate будет выполняться только один раз, а не после обработки каждого файла.
Параметры postrotate и endscript позволяют указать скрипт, который будет запущен после того, как файл журнала обновится. В примере приложение перезагружается.
Осталось настроить Logrotate на автоматический запуск. Чтобы эта утилита запускалась автоматически, введите команду crontab –e и в появившемся редакторе добавьте строку:
10 * * * * /usr/sbin/logrotate /etc/logrotate.conf
Сохраните файл и выполните выход из редактора. Мы создали расписание планировщика, которое будет выполнять logrotate на 10-ой минуте каждого часа. Конфигурация будет загружаться из файла /etc/logrotate.conf.