Управление логами с помощью logrotate на Ubuntu

Введение
Лог-файлы критичны для безопасности и отладки Linux-систем. logrotate — стандартный инструмент, который автоматизирует ротацию логов: создание новых файлов, сжатие старых, удаление по политике и отправку по почте. Он удобен, гибок и интегрируется с cron.
Кратко: ротация означает создание нового файла лога и архивирование/удаление старых записей по заданным правилам.
Требования
- Сервер с Ubuntu
- Некорневой пользователь с sudo-привилегиями
Установка logrotate
По умолчанию logrotate обычно уже установлен в Ubuntu. Если нет — установите так:
sudo apt install logrotate -yПроверить работу и версию можно командой:
sudo logrotateВывод (пример):
logrotate 3.11.0 - Copyright (C) 1995-2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License
Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command]
[-s|--state=statefile] [-v|--verbose] [-l|--log=STRING] [--version]
[-?|--help] [--usage] [OPTION...]
Основные конфигурационные файлы и расположение
- Основной файл: /etc/logrotate.conf
- Дополнительные конфигурации: /etc/logrotate.d/
- Cron‑задача: /etc/cron.daily/logrotate
Посмотреть содержимое каталога конфигов:
ls /etc/logrotate.dПример вывода:
alternatives apport dpkg mysql-server rsyslog unattended-upgrades
apache2 apt lxd openproject ufw
Основные опции logrotate и их назначение
- missingok — не выдавать ошибку, если лог отсутствует
- weekly — ротация раз в неделю (есть daily, monthly)
- create — после ротации создать новый пустой файл лога с правами
- compress — сжимать старые логи gzip
- rotate 4 — хранить 4 версии до удаления (здесь — 4 недели при weekly)
- notifempty — не проводить ротацию пустого файла
Ниже — краткий «шпаргалка» по часто используемым опциям:
# Пример: /var/log/myapp/*.log
/var/log/myapp/*.log {
weekly
rotate 4
compress
delaycompress
missingok
notifempty
create 0640 root adm
}- delaycompress — откладывает сжатие до следующей ротации (полезно когда процессы всё ещё записывают в старые файлы)
- postrotate /endscript — скрипты для перезапуска сервиса после ротации (например, перезапуск rsyslog или apache)
Тестирование конфигурации (на примере Apache)
Для теста запускают logrotate в режиме отладки, чтобы увидеть, что бы он сделал, но не выполнять реальную ротацию:
sudo logrotate -d /etc/logrotate.d/apache2Пример вывода (сокращённо):
reading config file /etc/logrotate.d/apache2
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries
Handling 1 logs
rotating pattern: /var/log/apache2/*.log after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
Creating new state
Now: 2018-10-11 16:04
Last rotated at 2018-10-11 16:00
log does not need rotating (log has been already rotated)
considering log /var/log/apache2/error.log
Creating new state
Now: 2018-10-11 16:04
Last rotated at 2018-10-11 16:00
log does not need rotating (log has been already rotated)
considering log /var/log/apache2/other_vhosts_access.log
Creating new state
Now: 2018-10-11 16:04
Last rotated at 2018-10-11 16:00
log does not need rotating (log has been already rotated)
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated
Если нужен принудительный запуск (выполнить ротацию сразу), используйте флаг –force:
sudo logrotate -f /etc/logrotate.d/apache2Важные рекомендации
Важно: logrotate обычно запускается от root через cron; конфигурации в /etc/logrotate.d выполняются с правами root. Скрипты prerotate/postrotate также выполняются от root — учитывайте безопасность и права доступа.
Примечание: если сервис держит открытый дескриптор на старый файл лога, нужно перезапустить сервис или послать ему сигнал, чтобы он начал писать в новый файл (это делается через postrotate).
Типичные причины, когда logrotate не срабатывает
- Неправильные права на каталоги/файлы: logrotate не может создать/переименовать файлы
- Сервис продолжает писать в старый дескриптор — требуется restart/reload
- Файл состояния (/var/lib/logrotate/status) повреждён или содержит некорректные записи
- Конфликтующие правила в /etc/logrotate.conf и /etc/logrotate.d/
Как диагностировать: запустите с -d (debug) и -v (verbose), проверьте логи cron и права файлов.
Шаблон конфигурации для собственного приложения
Добавьте файл, например /etc/logrotate.d/myapp с содержимым:
/var/log/myapp/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0640 myuser mygroup
sharedscripts
postrotate
systemctl reload myapp.service >/dev/null 2>&1 || true
endscript
}Пояснение: daily — ротация ежедневно; rotate 7 — хранить 7 архивов; sharedscripts — запустить postrotate один раз для всех файлов.
Чек‑лист администратора перед запуском
- Проверить владельца и права файлов логов
- Убедиться, что postrotate корректно перезапускает процесс
- Протестировать с sudo logrotate -d <конфиг>
- При необходимости выполнить sudo logrotate -f <конфиг>
- Проверить /var/log после ротации, убедиться в наличии .gz и новых файлов
Критерии приёмки
- Логи ротацированы в соответствии с политикой (daily/weekly/monthly)
- Количество архивов соответствует параметру rotate
- Сжатые файлы присутствуют (.gz) при включённой опции compress
- Сервис продолжает логировать в новый файл после postrotate
- Отсутствие ошибок в выводе logrotate в режиме -d/-v
Когда использовать альтернативы
- systemd-journald лучше подходит, если вы уже активно используете journald и хотите централизованное хранение
- Сторонние решения (ELK/Graylog/Fluentd) нужны при агрегации логов с множества машин и продвинутом поиске/аналитике
Краткая методика внедрения (мини‑методология)
- Инвентаризация логов: какие файлы и где
- Определение требований хранения и сжатия (сколько архивов, частота)
- Написание конфигов в /etc/logrotate.d
- Тестирование (-d, -v) и принудительная ротация (-f)
- Мониторинг после внедрения
Кейс тестирования и критерии приёмки (тестовые сценарии)
- Запустить ротацию в отладочном режиме: ожидается корректный план действий, без ошибок
- Выполнить принудительную ротацию и проверить, что создан новый файл лога
- Проверить, что postrotate корректно перезапустил сервис и новые записи попадают в новый файл
- Убедиться, что старые файлы сжаты и укладываются в политику rotate
Глоссарий (одно предложение)
- Ротация: процесс архивирования/переименования текущего лога и создания нового пустого файла.
- compress: сжатие старых логов для экономии места.
- postrotate: скрипт, выполняемый после ротации, обычно для перезапуска сервиса.
Краткая сводка и рекомендации
Logrotate — надёжный инструмент для базовой ротации логов на Ubuntu. Для простых сценариев он обычно достаточен: настраивайте правила в /etc/logrotate.d, тестируйте с -d, при необходимости используйте postrotate для перезапуска сервисов. Для централизованной агрегации логов рассматривайте ELK/Graylog.
Важно: всегда тестируйте настройки в отладочном режиме и следите за правами доступа.
Полезные ссылки: проверьте /etc/logrotate.conf и /etc/cron.daily/logrotate для деталей системы.
Похожие материалы
Несколько аккаунтов Skype: Multi Skype Launcher
Журнал для работы: повысить продуктивность
Персональные звуки уведомлений на Android
Скачивание шоу Hulu для офлайн‑просмотра
Microsoft Start: персонализированная новостная лента