: :

ПнВтСрЧтПтСбВс

2017-12-25 10:49:04 3140 0

Настройка автоматической архивации лог файлов с помощью logrotate

Логирование очень важный аспект системного администрирования. Но и не менее важным является и своевременное архивирование и удаление старых лог файлов. Для некоторых сервисов, таких как например веб-сервера, рост лог файлов происходит очень с большой скоростью и если не следить за изменением их размеров, то можно получить в итоге неработоспособную систему в которой все дисковое пространство будет забито лог файлами и сервер просто перестанет выполнять свои функции. Что бы избежать таких проблем необходимо использовать архивирование лог файлов и желательно автоматическое. Одной из самых популярных и простых утилит для выполнения таких задач является - logrotate. Она предназначена для автоматизации обработки журналов логов. Она может выполнять с ними различные действия в зависимости от условий и правил заданных в конфигурации. Можно сжимать лог файлы в архив, отправлять их в определенные директории или даже на другие сервера, когда эти файлы достугаю определенного размера или по прошествии заданного промежутка времени.

Так как logrotate очень популярна во множестве дистрибутивов она уже установлена.
Перейдем к ее настройке.

Logrotate запускается с помощью системного планировщика с указанием конфигурационного файла, обычно с интервалом - ежедневно

На примере дистрибутива Debian 9, запуск logrotate указан в файле /etc/cron.daily/logrotate

cat etc/cron.daily/logrotate

#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Конфигурационный файл /etc/logrotate содержит общие настройки для архивирования и содержит директиву "include" для включения других конфигурационных файлов по сервисам, это сделанно для удобства настройки и администрирования.

cat /etc/logrotate.conf

# see "man logrotate" for details
# rotate log files weekly
weekly

# 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
}

Настройка архивации для журналов описаны в секциях.
Описание секции начинается с указания файлов над которыми будет производится ротация, после в фигурных скобках указываютс параметры ротации. Можно указывать как несколько конкретных файлов, так и использовать маски.

/var/log/web/error.log /var/log/web/access.log {
	............
}
/var/log/web/*.log {
	...........
}

Перейдем к параметрам ротации:

  • rotate "число" - Количество хранимых архивированных файлов;
  • daily, weekly, monthly - Интервал проведеня ротации (ежедневно,еженедельно, ежемесячно);
  • size "числов (k,M)" - Производить ротацию файла если его размер превысит указанного (по-умолчанию размер указывается в байтах, возможно применять спец символы для обозначения килобайт и мегабайт);
  • start "число" - Число с которого начнется нумерация архивных файлов;
  • compress - Сжимить архивные файлы;
  • nocompress - Отключает compress
  • delaycompress - Не сжимать последний архивный файл;
  • create "права" "владелец" "группа" - После ротации создать пустой лог файл с указанными правами, владельцем и группой, если параметры опущены то новый файл будет иметь такие же значения прав как и старый;
  • ifempty - Архивировать даже пустой файл (используется по-умолчанию);
  • noifempty - Не архивировать пустые файлы;
  • postrotate "команда" endscript - После проведения ротации, выполнить команду указанную между ключевыми словами postrotate и endscript;
  • prerotate "команда" endscript - Аналогично postrotate,только команда выполняется перед ротацией;
  • missingok - Не вызывать ошибку в случае отсутствия оригинального файла;
  • nomissingok - Вызывать ошибку при отсутствии оригинального файла;
  • sharedscript - Если в одной секции указано несколько файлов, то postrotate и prerotate будут выполнены только один раз.
  • olddir "путь" - Перемещать архивные файлы по указанному пути;
  • dateext - К имени архивного файлв добавляется дата ротации в формате (%Y%m%d) вместо номера

Ротация лог файла на примере fail2ban

/var/log/fail2ban.log {
   
    weekly # еженедельно
    rotate 4 # хранить 4 архивных файла
    compress # выполнфть сжатие

    delaycompress # не сжимать последний архивный файл
    missingok # отсутствие оригинального файла не вызывает ошибку

    # Выполнение команды после ротации
    postrotate
	fail2ban-client flushlogs 1>/dev/null
    endscript

    # создание файла с правами 640 владельцем root и группой adm
    create 640 root adm
}






Введите ответ:

+

=