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

    Общий рейтинг статьи: 0 (проголосовало 0 )
    Опубликовано:  [просмотров 247]


    Одной из популярных ошибок в администрировании 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 можно автоматизировать ротацию логов нестандартных приложений, для которых не предусмотрено штатных механизмов чистки "мусора".


    Обсуждение статьи

    Ваш комментарий: