Ротация логов при помощи logrotate Linux

Logrotate - приложение, разработанное для облегчения управления лог-файлами. Особенно Logrotate полезен там, где создается большое количество лог-файлов. Утилита позволяет в автоматическом режиме архивировать, удалять, очищать и отправлять на e-mail лог-файлы. Этот процесс обычно называется ротацией лог файлов.

Logrotate может быть настроен на ежедневную, еженедельную или ежемесячную ротацию. Кроме того, можно задать размер файла, по достижении которого файл будет ротирован. Обычно logrotate выполняется в качестве каждодневного задания Использование планировщика cron в Linux.

Описание того, каким образом Logrotate будет работать с тем или иным лог файлом находится в специальном конфигурационном файле. Как правило, они располагаются в директории /etc/logrotate.d/. Например, файл конфигурации для apache2 выглядит следующим образом:

$ more /etc/logrotate.d/apache2
/var/log/apache2/*.log {
        weekly              # ротация раз в неделю. Возможные варианты daily, weekly,
                            # monthly, size (например size=1M)
        missingok           # отсутствие файла не является ошибкой
        rotate 52           # сохраняется последние 52 ротированных файла
        compress            # сжимать ротируемый файл
        delaycompress       # сжимать предыдущий файл при следующей ротации 
                            # (т.е. файл *.log.1 будет не сжат, а *.log.2 и далее сжатыми)
        notifempty          # не обрабатывать пустые файлы
        create 640 root adm # сразу после ротации создать пустой файл с заданными правами и пользователем
        sharedscripts       # крипты prerotate/postrotate будут выполнены только один раз
                            # не зависимо от количества журналов, подходящих под заданный шаблон
        postrotate          # скрипт будет выполнен сразу после ротации
                if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                        /etc/init.d/apache2 reload > /dev/null
                fi
        endscript
}

При этом, первая строка /var/log/apache2/*.log есть ничто иное, как шаблон обрабатываемых лог-файлов. Он означает, что указанная конфигурация ротации будет использоваться для всех файлов, находящихся в директории /var/log/apache2/ и имеющих расширение "log".

Допустимых директив в конфигурационном файле очень много (более 40). Подробнее о них можно узнать из man logrotate.

  • Директивы:
  • mail - указывает куда отсылать ротированный файл
  • mailfirst - отсылать первую ротированную комию; maillast - отсылать последнюю ротированную копию
        postrotate
                reload rsyslog >/dev/null 2>&1 || true # for Debian
                invoke-rc.d rsyslog reload > /dev/null # for RHEL
        endscript
  • copytruncate - после создания копии, обрезать исходный файл журнала взамен перемещения старого файла журнала и создания нового. Это может найти применение в том случае, когда некоторой программе нельзя указать закрыть её журнал, и таким образом можно постоянно продолжать запись (добавление) в существующий файл журнала. Примите во внимание, что хотя между копированием файла и его обрезанием очень маленький промежуток времени, некоторая часть журналируемых данных может быть потеряна. При использовании этого параметра, не имеет силы директива create, так как старый файл журнала остаётся на своём месте.

Как правило, после настройки конфигурационного файла появляется необходимость проверить работу logrotate для новых логов. Для этого есть возможность непосредственного запуска logrotate из командной строки. При этом допускаются следующие опции:

  • -d. Включает режим отладки, а так же дублирует опцию -v. В режиме отладки никаких действий с логами не будет выполнено.
  • -f, –force. Заставляет logrotate выполнить ротацию логов. Бывает необходимо после добавления новых конфигурационных файлов или если старый лог файл был удалён вручную; таким образом будут созданы новые лог-файлы и журналирование будет корректно продолжено.
  • -m, –mail command. Указывает, какую команду использовать для отправки журналов по почте. Команда должна принимать 2 входных параметра: заголовок письма получателя письма. После этого команда должна прочитать сообщение со стандартного входа (STDIN) и отправить его получателю. Командой по умолчанию является /usr/bin/mail -s
  • -s, –state statefile. Указывает на использование альтернативный файл состояния. Полезно в случаях, когда logrotate работает от имени разных пользователей для различных наборов лог-файлов. Файл состояния: /var/lib/logrotate/status
  • –usage. Выводит краткую инструкцию по использованию утилиты.
  • -v, –verbose. Вывод диагностических сообщений во время ротации.
  • Для немедленного применения изменений нужно запустить команду:
    # logrotate /etc/logrotate.conf
  • Для проверки изменений нужно запустить команду (никаких действий с логами не будет выполнено):
    # logrotate -d /etc/logrotate.conf

Если все правильно настроили, то вам просто нужно было указать конфиг файл

logrotate -f /etc/logrotate.conf

а после этого удалить СТАРЫЕ логи.

PQ VPS сервера в 28+ странах.