Настройка ротации log-файлов в Linux

HELP-ME-24.COM (Freelance Team), Черноусов Антон

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

Настройка ротации log-файлов в Linux 

Практически в 100% linux-дистрибутивов за ротацию log-файлов отвечает утилита logrotate. По существу, она не является демоном, а представляет собой приложение, которое раз в день запускается планировщиком заданий cron. В большинстве дистрибутивов logrotate запускается скриптом, расположенном в каталоге /etc/cron.daily/, в Ubuntu linux файл так и называется logrotate и содержит следующую запись:

/usr/sbin/logrotate /etc/logrotate.conf

Вам может и не потребуется писать правила для ротации log-файлов. В большинстве случаев, при установке пакета вместе с устанавливаемым демоном или приложением идет и файл настроек, файлы настроек для logrotate расположены в каталоге /etc/logrotate.d/.

В этих файлах прописаны настройки для типовых расположений log-файлов, но что делать если вы указываете нестандартное расположение log-файлов, например, для демона Apache или Nginx? Ничего сложного в этом случае нет и вам потребуется лишь скопировать и отредактировать штатный logrotate-файл под ваши требования. Например, модифицированный файл для ротации log-файлов демона Apache будет выглядеть следующим образом:

/var/www/logs/apache_*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
dateext
create 640 root adm
sharedscripts
postrotate
if /etc/init.d/apache2 status > /dev/null ; then \
/etc/init.d/apache2 reload > /dev/null; \
fi;
endscript
prerotate
if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
run-parts /etc/logrotate.d/httpd-prerotate; \
fi; \
endscript
}

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

# man logrotate

Создавая дополнительные файлы конфигурации вы можете создать правила для обработки каких угодно log-файлов и вы даже можете настроить отправку файлов журнала по электронной почте или передать их на дальнейшую обработку стороннему приложению.

Обратите внимание на директивы postrotate и prerotate, они описывают операции,которые выполняются до запуска ротации логов и после. В приведенном выше примере по завершении ротации файлов проверяется состояние демона apache и при необходимости проводится reload. Такое поведение вы можете увидеть практически во всех скриптах и это связано с тем, что на время проведения операций с файлом он блокируется, что может вызвать нестабильное поведение приложения. Об этом необходимо помнить, настраивая ротацию логов для ваших собственных приложений.

Во избежание таких ситуаций существует и другая утилита. Логика ее работы отличается от утилиты logrotate, а именно, она принимает входящий поток данных и пишет их в разные файлы (в зависимости от настроек).

Утилита эта называется cronolog, установить ее вы можете выполнив команду:

# aptitude install cronolog

Использовать данную утилиту целесообразно ,например, при использовании Tomcat, так как там запись лог-файлов производится простым перенаправлением потока приложения в файл и немного модифицировав файл запуска catalina.sh замените строки:

>> "$CATALINA_OUT" 2>&1 "&"

на

2>&1 | /usr/sbin/cronolog "$CATALINA_BASE/logs/catalina-%Y-%m-%d.out" &

вы добьетесь разделения log-файла по датам.

Используя механизмы автоматического удаления старых файлов и приложение cronolog можно автоматизировать ротацию логов нестандартных приложений, для которых не предусмотрено штатных механизмов чистки "мусора".

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

Вы должны быть вошедший в чтобы отправить комментарий