Ротация лог-файлов

В Linux журналы хранят множество самых разных данных о состояниях системы. Задача администратора сохранять их как можно дольше, но не в ущерб производительности системы. Огромные файлы журналов значительно сокращают свободное пространство файловой системы. Для того, чтобы журнальная информация не утрачивалась и какое-то время хранилась на диске — существует система ротации. При достижении определённого размера информация из журнального файла сбрасывается в архив именуемый backlog. Со временем самый старый архивный файл замещается более новым. Ротация осуществляется при помощи утилиты logrotate. Обзор logrotate на Debianworld.

Конфиг logrotate

В главном конфиге находится глобальная конфигурация, эти директивы, которые будут распространяться на все логи если их действие не будет отменено.

Расположение конфига: /etc/logrotate.conf

Его содержимое:

Согласно настройкам по-умолчанию: еженедельно информация из логов сбрасывается в архив, самый старый архив затирается, всего хранится 4 backlog’а.

Чтобы указать как часто нужно выполнять проверку/производить ротацию используются следующие обозначения: hourly, daily, weekly, monthly, yearly.

Пользовательские конфигурации logrotate находятся в директории /etc/logrotate.d, в logrotate.conf подключаются при с помощью include. Содержание каталога в CentOS:

 

Основные директивы управления и обработки логов:

rotate — указывает сколько старых логов нужно хранить, в параметрах передается количество;
create — указывает, что необходимо создать пустой лог файл после перемещения старого;
dateext — добавляет дату ротации перед заголовком старого лога;
compress — указывает, что лог необходимо сжимать;
delaycompress — не сжимать последний и предпоследний журнал;
extension — сохранять оригинальный лог файл после ротации, если у него указанное расширение;
mail — отправлять Email после завершения ротации;
maxage — выполнять ротацию журналов, если они старше, чем указано;
missingok — не выдавать ошибки, если лог файла не существует;
olddir — перемещать старые логи в отдельную папку;
postrotate/endscript — выполнить произвольные команды после ротации;
start — номер, с которого будет начата нумерация старых логов;
size — размер лога, когда он будет перемещен;

Настройка обработки каждого лога, который подлежит ротации описывается следующей конструкцией:

адрес_файла_лога {
директивы
}

Для теста logrotate можно создать файл rsyslog.conf в директории /etc/logrotate.d/ и записать в него соответствующие настройки:

/var/log/messages {
weekly
rotate 4
size 15M
compress
delaycompress
}

Проверка лога /var/log/messages будет производится еженедельно, хранится будут 4 файла, минимальный размер лога для ротации (сброса данных в архив) 15Мб (если лог не превысит 15Мб, то он не будет обрабатываться). Для архивов логов будет использоваться сжатие (кроме последнего и предпоследнего).

Проверка

Для того, чтобы убедиться, то logrotate работает — необходимо его протестировать:

logrotate с ключом -d — режим отладки, нечто вроде эмулятора, на экран выведется подробная информация о произведённых действиях, но файлы на диске не будут изменены.