Управление логами с помощью Logrotate
Как настроить Logrotate для управления системными и прикладными журналами.
При работе с виртуальными серверами или выделенными серверами важно вести учёт событий и ошибок для мониторинга и диагностики системы. Большие файлы логов создают сложности: их трудно просматривать, они потребляют ресурсы процессора и памяти, а при переполнении диска могут вызывать сбои в работе приложений.
Logrotate решает эту проблему, автоматически архивируя текущие логи и создавая новые файлы для поступающих данных.
Проверка установки
Logrotate предустановлена в большинстве дистрибутивов Linux и запускается автоматически через планировщик cron. Для проверки версии выполните:
logrotate --version
Пример вывода:
logrotate 3.21.0
Default mail command: /usr/bin/mail
Default compress command: /bin/gzip
Default uncompress command: /bin/gunzip
Default compress extension: .gz
Default state file path: /var/lib/logrotate/status
ACL support: yes
SELinux support: yes
Вывод показывает, какие инструменты Logrotate использует для сжатия и уведомлений, а также путь к файлу состояния с историей ротации.
Структура конфигурации
Конфигурация Logrotate имеет иерархическую структуру. Глобальные параметры задаются в файле /etc/logrotate.conf, а настройки для отдельных приложений размещаются в каталоге /etc/logrotate.d/.
Пример /etc/logrotate.conf на Ubuntu:
# rotate log files weekly
weekly
# use the adm group by default
su root adm
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
#dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
Ключевые параметры:
weekly— ротация происходит еженедельно.create— после ротации создаётся новый пустой файл лога.rotate 4— хранятся архивные копии за последние 4 недели.su root adm— ротация выполняется от имени пользователяrootи группыadm, что предотвращает проблемы с доступом к системным логам.compress— сжатие архивов (по умолчанию отключено).include /etc/logrotate.d— подключение конфигурационных файлов отдельных приложений.
Для просмотра полного списка директив используйте:
man logrotate
Конфигурации приложений
Файлы в /etc/logrotate.d/ работают по тому же принципу, что и глобальный конфиг, но применяются только к конкретным логам. Параметры внутри этих файлов переопределяют глобальные значения из /etc/logrotate.conf. Если директива не указана в конфигурации приложения — используется глобальное значение.
Пример файла /etc/logrotate.d/nginx:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
notifempty
}
Если в
/etc/logrotate.confзаданоrotate 4, а в файле приложения директиваrotateотсутствует, логи этого приложения будут ротироваться с сохранением четырёх резервных копий.
Расписание ротации
По умолчанию Logrotate использует временной подход: файлы ротируются по фиксированному расписанию. Поддерживаемые интервалы: hourly, daily, weekly, monthly, yearly.
Logrotate обычно запускается один раз в день через /etc/cron.daily/logrotate. Если требуется почасовая ротация, переместите задачу в cron.hourly:
sudo mv /etc/cron.daily/logrotate /etc/cron.hourly
Для более частого запуска настройте пользовательскую задачу cron.
Ротация по размеру
Для сервисов с непредсказуемым объёмом логов можно задать ротацию по размеру файла.
Директива size — ротация выполняется только при достижении указанного размера, независимо от расписания:
/var/log/app/*.log {
size 50M
}
Директива
sizeи временные параметры взаимно исключают друг друга — всегда учитывается последняя указанная опция. Если поменять местамиsizeиdaily, файлы будут ротироваться ежедневно, а размер игнорироваться.
Директива minsize — ротация выполняется по расписанию, но только если файл достиг минимального размера:
/var/log/app/*.log {
daily
minsize 50M
}
Директива maxsize — ротация выполняется сразу, как только файл превысил указанный размер, даже если время ещё не наступило:
/var/log/app/*.log {
daily
maxsize 50M
}
Размеры указываются в байтах (по умолчанию), килобайтах (k), мегабайтах (M) или гигабайтах (G).
Методы ротации
Logrotate поддерживает два основных метода работы с активным файлом лога.
create (метод по умолчанию) — переименовывает активный файл (app.log → app.log.1) и создаёт новый пустой файл с оригинальным именем. Рекомендуемый метод, минимизирующий риск потери логов:
/var/log/app/*.log {
create
# create 644 appuser group — можно указать права, владельца и группу
}
copytruncate — копирует содержимое текущего файла в архив, затем обнуляет оригинал. Позволяет приложениям продолжать писать в тот же файл. Рекомендуется только для устаревших приложений, не умеющих корректно переоткрывать файлы логов:
/var/log/app/*.log {
copytruncate
}
Именование архивных файлов
По умолчанию ротационные файлы получают последовательные номера: app.log.1, app.log.2 и т.д. Для добавления временных меток используйте dateext:
/var/log/app/*.log {
dateext
# по умолчанию: -%Y%m%d для daily, -%Y%m%d%H для hourly
}
Лог, ротированный 25 июня 2025 года, будет называться app.log-20250625.
Для логов, ротируемых несколько раз в день, можно использовать Unix timestamp:
/var/log/app/*.log {
dateformat -%Y%m%d-%s
}
Директива dateyesterday ставит дату предыдущего дня — удобно, если обработка происходит после полуночи, а данные относятся к предыдущему дню.
Сжатие
Директива compress включает сжатие через gzip:
/var/log/app/*.log {
compress
}
Для использования другого архиватора:
/var/log/app/*.log {
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
}
delaycompress предотвращает немедленное сжатие последнего ротационного файла — полезно, если приложение продолжает писать в старый файл после ротации:
/var/log/app/*.log {
compress
delaycompress
}
compressoptions задаёт уровень сжатия gzip от -1 (быстро, слабое) до -9 (медленно, максимальное):
/var/log/app/*.log {
compress
compressoptions -9
}
Диагностика
Файл состояния Logrotate содержит информацию о последней ротации каждого файла:
sudo cat /var/lib/logrotate/status
Для детального анализа используйте режим отладки:
sudo logrotate --debug /etc/logrotate.conf
Помощь
Если у вас возникли вопросы или требуется помощь, пожалуйста, свяжитесь с нами через систему тикетов — мы обязательно вам поможем!