понедельник, 5 июня 2017 г.

Ротация логов – logrotate

Ротация логов – logrotate. В Ubuntu, да и во всех Linux, сама система, сервисы и программы все значимые события записывают в файлы журналов или лог-файлы, которые используются для диагностики ошибок, определения причины сбоев, получения статистики, а иногда и для работы других программ или сервисов. Обычно файлы логов хранятся в директории /var/log.
Включение или отключение функции ведения логов, перечень событий, которые должны записываться в логи, названия лог-файлов и другая информация обычно задается в конфигурационных файлах сервиса или программы.
Некоторые сервисы и программы записывают в лог-файлы достаточно много информации и они распухают на глазах. Для ограничения бесконтрольного роста лог-файлов существует специальный сервис – logrotate, который осуществляет ротацию логов через заданный отрезок времени и удаляет ставшие ненужными старые файлы.
Основная функция logrotate заключается в периодической замене старых логов новыми. Logrotate может быть настроен на ежедневную, еженедельную или ежемесячную ротацию. Кроме того, можно задать размер файла, по достижении которого файл будет ротирован. В зависимости от настроек архив логов может храниться как в сжатом, так и в несжатом виде. Обычно logrotate выполняется в качестве каждодневного задания (cron).
Базовые настройки logrotate хранятся в конфигурационном файле /etc/logrotate.conf. По умолчанию, в Ubuntu 14.04 он выглядит так:
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
# compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
missingok
monthly
create 0664 root utmp
rotate 1
}

/var/log/btmp {
missingok
monthly
create 0660 root utmp
rotate 1
}

# system-specific logs may be configured here
Обычно устанавливаемые пакеты записывают информацию о ротации своих логов (каким образом Logrotate будет работать с тем или иным лог файлом) в директорию /etc/logrotate.d, но далеко не все и не всегда оптимальную. Иногда получается бесконтрольный рост лог-файлов, который приводит к неприятным последствиям. Особенно это важно при работе с vds/vps с небольшим объемом дисковой памяти.
Например утилита fail2ban при установке формирует конфигурационный файл /etc/logrotate.d/fail2ban с содержимым:
/var/log/fail2ban.log {

weekly        # ротация раз в неделю. Возможные варианты daily, weekly, monthly, size (например size=1M)
rotate 4      # сохраняется последние 4 ротированных файла
compress      # сжимать ротируемый файл

delaycompress # сжимать предыдущий файл при следующей ротации
missingok     # отсутствие файла не является ошибкой
postrotate    # скрипт будет выполнен сразу после ротации
fail2ban-client set logtarget /var/log/fail2ban.log >/dev/null
endscript

# If fail2ban runs as non-root it still needs to have write access
# to logfiles.
# create 640 fail2ban adm 
create 640 root adm # сразу после ротации создать пустой файл с заданными правами и пользователем
}
Русскими комментариями раскрыты все основные директивы. Всего допустимых директив в конфигурационном файле очень много (более 40). Подробнее о них можно узнать из man logrotate.
Для немедленного применения изменений можно выполнить:
$ logrotate /etc/logrotate.conf
Для проверки внесенный изменений можно запустить команду (никаких действий с логами не будет выполнено):
$ logrotate -d /etc/logrotate.conf

Комментариев нет:

Отправить комментарий