Управление журналами в Linux (logrotate)

16 Июля 2018

Журналы в Linux иногда разрастаются до неприличных размеров, что приводит к снижению производительности и в некоторых особо запущенных случаях может даже вызвать переполнение дискового пространства. К счастью, администратор может установить себе в помощь утилиту logrotate — настройка Linux для управления журналами.

logrotate.png

Что это такое?

Это утилита, выполняющая ротацию и сжатие протоколов. При правильной настройке файл журнала никогда не разрастется до огромных размеров. Если же она не установлена или же неправильно настроена, файловые данные некоторых сервисов (например, Apache) могут занять на диске кучу свободного места.
По умолчанию утилита Logrotate уже предустановлена в Ubuntu 16.04. Она настроена для своевременной обработки журналов всех имеющихся в системе и используемых пользователями приложений, в том числе rsyslog.

Настройка

Несмотря на то, что утилита изначально установлена по умолчанию, будет нелишним проверить ее конфигурацию. На одном из моих серверов почему-то не выполнялась ротация Apache, в результате произошло переполнение дискового внутреннего объема.

Logrotate настройка имеет конфигурацию, хранящуюся по следующему адресу:

  • /etc/logrotate.conf — основной файл. Как правило, он содержит некоторые параметры предустановленные автоматически, настройки для ряда базовых журналов, не принадлежащим системным пакетам и инструкцию include для подключения конфигурации, хранящейся по адресу /etc/logrotate.d
  • /etc/logrotate.d содержит файлы с конфигурацией. Здесь logrotate настройка содержит конфигурацию для rsyslog, apport, dpkg и других системных пакетов. Каждый из них — конфигурация ротации. Вы сможете добавить свои файлы конфигурации в Linux журнал событий, они также будут обработаны утилитой.

Рассмотрим конфигурацию, предлагаемую утилитой logrotate Linux с целью ротации для apport — /etc/logrotate.d/apport:

/var/log/apport.log {
daily
rotate 7
delaycompress
compress
notifempty
missingok
}

Вот что означают такие данные:

  • daily — ротацию выполнять однажды в сутки (для редко используемых сервисов можно использовать команду monthly — раз каждый месяц или weekly — раз каждую неделю), удобно при необходимости проведения регулярного аудита.
  • rotate 7 — позволяет в автоматическом режиме хранить последние 7 журналов.
  • compress — используется для сжатия обновленного объема данных (стандартно используется технология gzip)
  • notifempty — запрещает ротировать файл, если он пустой.
  • missingok — не оставляет сообщение об ошибке в работе системы, если системные журналы Linux пусты.
  • delaycompress — позволяет на время отсрочить сжатие прошлого журнала до прохождения последующего сдвига по циклу. Эта директива успешно используется лишь в сочетании с compress. Это необходимо, если запущенной программе невозможно приказать сразу закрыть журнал и допускается определенный период времени продолжать вести запись в используемый для этого ранее файл.

Конечно, это далеко не все допустимые параметры конфигурации. О дополнительных вы можете узнать в справке (команда man logrotate) или по ссылке.

Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения

Теперь представим, что у нас есть некий сервис 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
}

Первая строчка задает требуемые файлы. Здесь это все лог-файлы из используемого каталога /var/log/daemond. С первыми пятью командами вы уже знакомы. Команда create определяет, что после ротации будет создан новый пустой файл с правами 0640, владельцем daemon-data и группой daemon-data. Если ваш сервис выполняется от имени какого-то пользователя (например, daemon-data), а не от root, то очень важно указать правильно имя пользователя и задать название группы.

Параметр sharedscripts говорит о том, что скрипт под названием postrotate будет выполняться только лишь 1 раз, а не непосредственно после детальной обработки любого имеющегося файла.

Параметры postrotate и endscript позволяют указать скрипт, который будет запущен только уже после того, как журнал полностью обновится. В указанном примере приложение перезагружается.

Автоматический запуск

Осталось настроить утилиту на автоматический запуск. Чтобы она запускалась автоматически, введите команду crontab -e и в появившемся редакторе добавьте строку:

10 * * * * /usr/sbin/logrotate /etc/logrotate.conf

Сохраните файл и выполните выход из редактора. Мы создали расписание планировщика, которое будет выполнять logrotate на 10-ой минуте каждого часа. Конфигурация будет загружаться из /etc/logrotate.conf.

Получить консультацию специалиста
Персональный ассистент
Cloud.Xelent