Ротация логов с помощью logrotate в Debian / Ubuntu

pligin

Команда форума
Администратор
Сообщения
3.610
Реакции
1.267
PSC
96.946,66
Telegram
pligin
Logrotate - приложение, разработанное для облегчения управления лог-файлами. Особенно Logrotate полезен там, где создается большое количество лог-файлов. Утилита позволяет в автоматическом режиме архивировать, удалять, очищать и отправлять на e-mail лог-файлы. Этот процесс обычно называется ротацией лог файлов.

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

Установка Logrotate
Установка обычна для Debian / Ubuntu-based дистрибутивов:
Код:
$ sudo aptitude install logrotate
Краткое описание файла настроек Logrotate
Описание того, каким образом Logrotate будет работать с тем или иным лог файлом находится в специальном конфигурационном файле. Как правило, они располагаются в директории /etc/logrotate.d/. Например, файл конфигурации для apache2 выглядит следующим образом:
Код:
$ more /etc/logrotate.d/apache2
/var/log/apache2/*.log {
        weekly              # ротация раз в неделю
        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.

Основные опции Logrotate
Как правило, после настройки конфигурационного файла появляется необходимость проверить работу 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
В качестве примера допустим, что в директории /home/site/debianworld.ru/logs/ располагаются лог-файлы таких веб серверов, как nginx и apache. Работают они в связке: nginx - фронтенд, apache2-бэкенд.
Код:
$ more /etc/logrotate.d/debianworld.ru
# Ротация логов nginx (front-end)
# Отдает статику, все остальное - проксирует на apache.
# Лог ведется более интенсивно.
/home/dw/debianworld.ru/logs/nginx_*.log {
    daily                   # ежедневная ротация
    missingok               # отсутствие файла не является ошибкой
    rotate 45               # хранится история за 45 дней
    compress                # ротируемые файлы сжимаются
    delaycompress           # ротируемый файл не сжимается, остальные - сжимаются
    notifempty              # не обрабатывать пустые файлы
    create 640 dw www-data  # права, пользователь нового файла
    sharedscripts           # prerotate/postrotate выполняются только 1 раз
    prerotate               # Cбор статистики посещений для AWstats
            /usr/bin/perl /usr/lib/cgi-bin/awstats.pl -update -config=debianworld.ru -databasebreak=day
    endscript             
    postrotate              # Перезапуск nginx
            [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

# Ротация логов apache2 (back-end)
# Лог ведется менее интенсивно.
/home/dw/debianworld.ru/logs/apache*.log {
    weekly                   # еженедельная ротация
    missingok                # отсутствие файла не является ошибкой
    rotate 4                 # хранится история за 4 недели
    compress                 # ротируемые файлы сжимаются
    nodelaycompress          # ротируемый файл так же сжимается
    notifempty               # не обрабатывать пустые файлы
    create 640 dw www-data   # права, пользователь нового файла
    sharedscripts            # postrotate выполняется только 1 раз
    postrotate               # Перезапуск apache2
            if [ -f /var/run/apache.pid ]; then
                /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}
Комментарии по ходу текста не должны оставить вопросов. Но в общем, схема такова, что отдельно ротируются логи nginx, отдельно логи apache2. При этом, так как nginx является front-end'ом и его лог наполняется интенсивнее, чем у apache, то он (лог nginx) ротируется в 7 раз чаще, чем лог apache2.

Кроме того, при каждой итерации ротирования логов nginx выполняется сбор статистики посещений AWstats.

После того, как конфигурационный файл создан, необходимо убедиться, что все будет работать именно так, как и задумано. Для этого необходимо выполнить (при этом, реальных изменений никаких не будет, так как запуск будет выполнен в отладочном режиме):
Код:
$ sudo logrotate -d /etc/logrotate.d/psweb.ru
После того, как по диагностическим сообщениям стало ясно, что все в порядке, необходимо непосредственно запустить ротацию:
Код:
$ sudo logrotate -v -f /etc/logrotate.d/psweb.ru
В дальнейшем ротация будет выполняться автоматически с заданным в конфигурационном файле интервалом.

Источник
 
Сверху