Logrotate — Ротация логов.

Установка, настройка, эксплуатация.

Модератор: ROOT

Logrotate — Ротация логов.

Сообщение ROOT » 08 авг 2017, 16:02

Оглавление


Темы
 О Logrotate 
 Проверка и тестирование logrotate 
 Перевод logrotate с cron на systemd 
 Примеры использования 
 Описание параметров 


 О Logrotate 
Утилита logrotate предназначена для упрощения администрирования файлов журнала в системе, которая генерирует много логов. Logrotate позволяет автоматическое сжатие, удаление и рассылку логов. Logrotate можно настроить для обработки файла журнала ежедневно, еженедельно, ежемесячно или когда файл журнала достигает определенного размера.
Основным файлом конфигурации для logrotate, который устанавливает параметры по умолчанию, является /etc/logrotate.conf. Дополнительные файлы конфигурации включаются в основной из каталога /etc/logrotate.d. Значения, установленные в файлах конфигурации приложения, переопределяют те же параметры в основном файле конфигурации.


 Проверка и тестирование logrotate 
Чтобы проверить правильность работы logrotate, выполните следующую команду, которая будет выводить отладочную информацию:
Код: выделить все
logrotate -d

Чтобы протестировать скрипт logrotate, например ваш скрипт logrotate для Apache в каталоге /etc/logrotate.d, используйте:
Код: выделить все
logrotate -f -v /etc/logrotate.d/httpd

Проверка статуса logrotate
Код: выделить все
cat /var/lib/logrotate/logrotate.status



 Перевод logrotate с cron на systemd 
Для периодического запуска logrotate в CentOS по умолчанию используется Cron. Для перевода logrotate на systemd нужно сделать несколько простых вещей
1) Переносим скрипт запуска logrotate из /etc/cron.daily в /sbin/my-script например и перезапускаем CRON
Код: выделить все
mv /etc/cron.daily/logrotate /sbin/my-script/
systemctl restart crond.service

2) Создаём timer для systemd
ВНИМАНИЕ!!! юниты systemd, написанные самостоятельно администратором, нужно размещать в каталоге /etc/systemd/system/. Сюда также помещаются изменённые юниты, чтобы при обновлении не потерять изменения
e /etc/systemd/system/logrotate.timer
примерно такого содержания
Код: выделить все
[Unit]
Description=Run on 23:59 Rotate log files

[Timer]
OnCalendar=23:59
Persistent=true

[Install]
WantedBy=timers.target

и файл logrotate.service
Код: выделить все
[Unit]
Description=Rotate log files

[Service]
Type=oneshot
ExecStart=/sbin/my-script/logrotate
StandardOutput=syslog

3) Активируем и запускаем таймер. Файл .service идёт как вторая часть к .timer
Код: выделить все
systemctl enable --now logrotate.timer



 Примеры использования 
И наконец приведу пару примеров скриптов logrotate для Apache и iptables
cat /etc/logrotate.d/httpd
Код: выделить все
"/var/www/*.free-adm.ru/log/*.log"
"/var/log/httpd/*.log" {
        # кол-во хранимых сжатых фрагментов
        rotate 7
        # максимальный размер несжатого файла; пока размер текущего
        # файла журнала не превысит данный порог, файл не будет заменён новым
        size=16M
        # отсутствие файла не является ошибкой
        missingok
        # не сбрасывать файл журнала после копирования
        nocopytruncate
        # не создавать пустой журнал
        nocreate
        # не откладывать сжатие файла на следующий цикл
        nodelaycompress
        # не отправлять содержимое удаляемых (старых) журналов по почте
        nomail
        # не обрабатывать пустые файлы
        notifempty
        # держать все файлы в одном и том же каталоге
        noolddir
        # сжимать
        compress
        postrotate
                systemctl reload httpd.service > /dev/null 2>/dev/null || true
        endscript
        # Между postrotate и endscript расположены команды интерпретатора, исполняемые непосредственно
        # после ротации. В данном примере сюда помещена команда, перезапускающая httpd-сервер.
        # Это необходимо для нормальной процедуры
}

Допускается перечисление каталогов, а так же группировка при помощи символов подстановки "*", "?"
cat /etc/logrotate.d/iptables
Код: выделить все
/var/log/fw/fw.log{
        # – выполнять проверку каждый день;
        daily
        # – количество копий старых логов;
#       rotate 5
        # – не писать сообщения в stdout, если файл отсутствует;
        missingok
        # – не выполнять никаких действий, если файл пустой;
        notifempty
        # – сжимать gzip;
        compress
        # – размер файла, при достижении которого он будет сжат и сохранён как старый
        size 10M
        create 0644 root root
        #postrotate
        #        service rsyslog restart > /dev/null
        #endscript
}

Тестирование отдельных конфигурационных файлов logrotate
Код: выделить все
logrotate --force /etc/logrotate.d/httpd



 Описание параметров 
Настройка интервалов ротирования журнала
Код: выделить все
weekly

Если задано значение еженедельно, журналы чередуются, если день текущей недели меньше, чем день недели последнего чередования (т. е. понедельник меньше пятницы) или если последний черед произошел более чем за неделю до настоящего времени.
Чтобы настроить ротацию ежемесячного журнала, используйте следующую директиву:
Код: выделить все
monthly

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

Журналы чередуются, если текущий год отличается от даты последнего чередования.

Для ротирования в зависимости от размера используйте следующую директиву:
Код: выделить все
size [value]

Директива size вызывает ротацию журнала, когда размер файла журнала превышает указанное [значение]. По умолчанию [значение] предполагается в байтах. Добавьте k к [value], чтобы указать размер в килобайтах, M для мегабайт или G для гигабайт. Например, размер 100k или размер 100M являются действительными директивами.

Сжатие ратированных (старых) Журналов
Код: выделить все
compress

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

По умолчанию logrotate сжимает файлы с помощью команды gzip. Вы можете заменить это другим инструментом сжатия, таким как bzip2 или xz, в качестве аргумента директивы compresscmd.

Отложенное сжатия файла журнала
Код: выделить все
delaycompress

В некоторых ситуациях не идеально сжимать файл журнала сразу после ротации, когда файл журнала требует дополнительной обработки. Указанная выше директива delaycompress откладывает сжатие на один цикл вращения.

Управление расширением файла журнала
Logrotate добавит число к имени файла, поэтому файл access.log будет повернут к access.log.1. Чтобы убедиться, что расширение поддерживается, используйте следующую директиву:
Код: выделить все
extension log

Если вы включите сжатие, сжатый журнал будет называться access.1.log.gz.

Права доступа к файлу журналу
Если ваш процесс-демон требует, чтобы файл журнала существовал для правильной работы, logrotate может помешать, когда он вращает журналы. В результате, logrotate может создавать новые, пустые файлы журнала после ротации. Рассмотрим следующий пример:

Код: выделить все
create 640 www-data users

В этом примере создается пустой файл с разрешениями 640 (право чтения / записи владельца, чтение группы, другое нет), которыми владеют пользовательские данные www и в группе пользователей. Эта директива определяет параметры в форме: create [mode (восьмеричное)] [owner] [group].
Для желающих отблагодарить
SB: 4274320029755744
QIWI: +79175241450
Аватар пользователя
ROOT
Администратор
 
Сообщений: 137
Зарегистрирован: 01 авг 2011, 09:36
Откуда: Моск. обл., г. Железнодорожный

Вернуться в Fedora

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1