Оглавление
Темы
О Logrotate
Проверка и тестирование logrotate
Перевод logrotate с cron на systemd
Примеры использования
Описание параметров
Утилита logrotate предназначена для упрощения администрирования файлов журнала в системе, которая генерирует много логов. Logrotate позволяет автоматическое сжатие, удаление и рассылку логов. Logrotate можно настроить для обработки файла журнала ежедневно, еженедельно, ежемесячно или когда файл журнала достигает определенного размера.
Основным файлом конфигурации для logrotate, который устанавливает параметры по умолчанию, является /etc/logrotate.conf. Дополнительные файлы конфигурации включаются в основной из каталога /etc/logrotate.d. Значения, установленные в файлах конфигурации приложения, переопределяют те же параметры в основном файле конфигурации.
Logrotate — Ротация логов.
Чтобы проверить правильность работы logrotate, выполните следующую команду, которая будет выводить отладочную информацию:
Код: Выделить всё
logrotate -dКод: Выделить всё
logrotate -f -v /etc/logrotate.d/httpdКод: Выделить всё
cat /var/lib/logrotate/logrotate.statusДля периодического запуска 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ВНИМАНИЕ!!! юниты 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Код: Выделить всё
[Unit]
Description=Rotate log files
[Service]
Type=oneshot
ExecStart=/sbin/my-script/logrotate
StandardOutput=syslogКод: Выделить всё
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 --force /etc/logrotate.d/httpdНастройка интервалов ротирования журнала
Код: Выделить всё
weeklyЧтобы настроить ротацию ежемесячного журнала, используйте следующую директиву:
Код: Выделить всё
monthlyДля годовой ротации:
Код: Выделить всё
yearlyДля ротирования в зависимости от размера используйте следующую директиву:
Код: Выделить всё
size [value]Сжатие ратированных (старых) Журналов
Код: Выделить всё
compressКод: Выделить всё
compresscmd xzОтложенное сжатия файла журнала
Код: Выделить всё
delaycompressУправление расширением файла журнала
Logrotate добавит число к имени файла, поэтому файл access.log будет повернут к access.log.1. Чтобы убедиться, что расширение поддерживается, используйте следующую директиву:
Код: Выделить всё
extension logПрава доступа к файлу журналу
Если ваш процесс-демон требует, чтобы файл журнала существовал для правильной работы, logrotate может помешать, когда он вращает журналы. В результате, logrotate может создавать новые, пустые файлы журнала после ротации. Рассмотрим следующий пример:Код: Выделить всё
create 640 www-data users