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

Скачать Ротация логов в Linux и FreeBSD с помощью logrotate
Сейчас ищут:

Itnull

Команда форума
Администратор
Регистрация
22.05.13
Сообщения
24.511
Реакции
8.231
Веб-сайт
itnull.me
  • Автор темы
  • Администратор
  • Модер.
  • Команда форума
  • #1
С помощью утилиты logrotate можно настроить автоматическое удаление (чистку) лог-файлов. В противном случае, некоторые логи могут заполнить все дисковое пространство, что приведет к проблемам в работе операционной системы.


Установка​


Чаще всего, в Linux данная утилита установлена по умолчанию. Если это не так, установка выполняется следующими командами.


Ubuntu / Debian:

Код:
apt-get install logrotate


CentOS / Red Hat:

Код:
yum install logrotate


FreeBSD:

Код:
pkg install logrotate


Утилита не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке (logrotate start или logrotate restart делать не нужно).


Настройка​


Для приложение, ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/ (во FreeBSD/usr/local/etc/logrotate.d/).


К примеру, нам необходимо настроить ротацию лога для logstash-forwarder. Создаем файл со следующим содержимым:


vi /etc/logrotate.d/logstash

Код:
/var/log/logstash-forwarder/* {
rotate 30
size=10M
missingok
notifempty
daily
compress
delaycompress
maxage 30
create 0644 root root
postrotate
/usr/bin/systemctl restart logstash-forwarder
endscript
}

* /var/log/logstash-forwarder/* — путь к файлу, который нужно ротировать. * указывает, что нужно чистить все файлы, которые расположены в каталоге /var/log/logstash-forwarder.
** имейте в виду, что во FreeBSD, путь может быть /usr/local/etc/logrotate.d/logstash.



При настройке необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В данном случае, необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.

Описание опций​


Для описания ротации мы можем использовать следующие директивы:


ПараметрОписание
rotate NХранить последние N ротированных файлов. Остальные удалять.
maxage NХранить ротированные файлы за последние N дней. Остальные удалять.
copytruncateСначала создается копия файла лога, после уже обрезается действующий. Это может понадобиться в случаях, когда программа должна писать лог непрерывно. Но существует 2 очевидных минуса: долгое выполнение при больших объемах и возможность потерять небольшое число записей, если из запись придется на процесс усечения.
size=xMПока размер лог-файла не превысит x мегабайт, он не будет ротироваться.
missingokЕсли файла не существует, не выкидывать ошибку.
notifemptyЕсли файл пустой, не выполнять никаких действий.
dailyДелать ротацию каждый день.
weeklyДелать ротацию каждую неделю.
monthlyДелать ротацию каждый месяц.
compressСжимать ротированные файлы.
delaycompressСжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу.
create 0644 root rootСоздать новый лог-файл после ротирования с конкретными правами 0644 и владельцем root (меняем значения на нужные). Можно указать без прав (просто create), тогда права будут назначены по умолчанию для пользователя, под которым запускается ротация.
su root rootПод какими пользователем и группой выполнять ротацию. В данном примере root (необходимо поменять на нужные).
prerotate ... endscriptСкрипт, который необходимо выполнить перед чисткой лога.
postrotate ... endscriptСкрипт, который необходимо выполнить после чистки лога.
sharedscriptsЕсли мы указали выполнить ротацию для нескольких файлов (например, при помощи *), скрипт prerotate/postrotate будет выполняться для каждого из них. Данная опция указывает, что скрипт нужно выполнить один раз после завершения ротации всех файлов.

Запуск​

Мы можем разово запустить ротацию, а также настроить автозапуск.


Вручную​

Запуск выполняется со следующим синтаксисом:
logrotate -f <путь к файлу конфигурации>

Например:
Код:
logrotate -f /etc/logrotate.d/logstash

Автоматический​


Задание на автоматический запуск создается по умолчанию в файле /etc/cron.daily/logrotate. Если изучить его содержимое, мы увидим, что идет запуск logrotate, который читает все файлы в директории /etc/logrotate.d/ и выполняющий для каждого из них ротацию.


Если для какого-то приложения необходимо выполнять ротацию лога по особому расписанию, узнаем полный путь до утилиты logrotate:

Код:
which logrotate

* в моем случае, это было /usr/sbin/logrotate.


Получив путь, создаем правило в cron:

Код:
crontab -e

Код:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.d/logstash

* в данном примере в 00:00 будет запускаться logrotate и чистить логи с нашей настройкой для logstash-forwarder.

или запуск чистки всех логов:

Код:
0 0 * * * /usr/sbin/logrotate -f /etc/logrotate.conf
 
Назад
Сверху Снизу