Home » Управление логами с помощью Logrotate на Ubuntu 24.04
Управление логами с помощью Logrotate на Ubuntu 24.04

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

В этой статье разберёмся, как управлять логами на Ubuntu 24.04 с помощью Logrotate — утилиты, которая спасает от хаоса в /var/log и не только. Если ты когда-нибудь сталкивался с тем, что место на сервере внезапно заканчивается из-за гигабайтных логов, или искал нужную ошибку в километрах мусора, то Logrotate — твой новый друг. Здесь будет всё: как работает Logrotate, как его быстро настроить, реальные примеры, грабли и лайфхаки. Погнали!

Зачем вообще нужен Logrotate?

Логи — это сердце любой системы. Они расскажут, почему упал nginx, кто ломился по ssh, и что не так с твоим любимым Python-скриптом. Но если их не контролировать, они превращаются в чёрную дыру: жрут диск, тормозят поиск, мешают мониторингу. Logrotate — это автоматический дворник, который вовремя подметает, архивирует и удаляет старые логи, чтобы сервер не захлебнулся в собственном мусоре.

Как это работает?

Logrotate — это демон (точнее, cron-утилита), который по расписанию (обычно раз в сутки) проверяет конфиги и применяет к логам заданные правила: архивирует, сжимает, удаляет, пересоздаёт файлы, отправляет уведомления. Всё это настраивается через конфиги в /etc/logrotate.conf и /etc/logrotate.d/.

  • Ротация — переименование текущего лога (например, access.log → access.log.1), создание нового пустого файла.
  • Сжатие — старые логи можно автоматически gzip-ить, чтобы экономить место.
  • Удаление — можно хранить только N архивов, всё старше — удаляется.
  • Пост- и прехуки — можно запускать свои скрипты до/после ротации (например, перезапускать сервисы).

Вся магия — в конфиге. Можно крутить логи хоть по размеру, хоть по времени, хоть по событию. Поддерживаются wildcard’ы, индивидуальные настройки для каждого приложения, и даже кастомные сценарии.

Как быстро и просто всё настроить?

Ubuntu 24.04 уже поставляется с Logrotate из коробки. Но чтобы всё работало как надо, нужно чуть-чуть ручной магии. Вот пошаговый гайд:

  1. Проверь, установлен ли Logrotate:

    sudo apt update
    sudo apt install logrotate
  2. Базовая настройка: Открой /etc/logrotate.conf — здесь глобальные параметры. Например:

    weekly
    rotate 4
    create
    compress
    include /etc/logrotate.d

    • weekly — ротация раз в неделю
    • rotate 4 — хранить 4 архива
    • create — создавать новый лог после ротации
    • compress — архивировать старые логи
    • include — подключать доп. конфиги из папки
  3. Настройка для конкретного приложения: Например, для nginx:

    sudo nano /etc/logrotate.d/nginx

    Пример содержимого:

    /var/log/nginx/*.log {
    daily
    missingok
    rotate 14
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
    [ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
    endscript
    }

    • daily — ротация каждый день
    • missingok — не ругаться, если файла нет
    • notifempty — не трогать пустые логи
    • postrotate — после ротации отправить сигнал nginx, чтобы он пересоздал логи
  4. Проверка конфигов:

    sudo logrotate --debug /etc/logrotate.conf


    sudo logrotate --force /etc/logrotate.conf

    • –debug — покажет, что будет делать, но не изменит файлы
    • –force — принудительно выполнит ротацию
  5. Автоматизация: Logrotate обычно запускается через cron (см. /etc/cron.daily/logrotate). Можно добавить свои задачи или изменить расписание.

Примеры, схемы, практические советы

Кейс Что происходит Рекомендация
Логи не ротуются, файл растёт до 10+ ГБ Нет конфига для приложения, или сервис не поддерживает reopen логов Добавь конфиг в /etc/logrotate.d/, проверь postrotate (kill -USR1)
После ротации новые логи не пишутся Сервис не пересоздаёт файл, пишет в старый дескриптор Обязательно добавь postrotate с сигналом или рестартом сервиса
Слишком много архивов, забит диск Не указан rotate N, или слишком большое N Уменьши rotate, добавь compress и delaycompress
Нужна ротация по размеру, а не по времени Логи быстро растут, daily/weekly не хватает Используй size 100M в конфиге

Практический совет: Если приложение пишет логи в нестандартное место, не забудь добавить его путь в отдельный конфиг. Для кастомных скриптов удобно делать так:


/home/user/myapp/logs/*.log {
size 50M
rotate 10
compress
missingok
notifempty
copytruncate
}

  • copytruncate — полезно для приложений, которые не умеют reopen логов: файл копируется и обнуляется на месте, без сигнала процессу.

Положительные и отрицательные кейсы

  • Плюс: На сервере с 20+ сервисами, где каждый пишет свои логи, Logrotate позволяет держать всё под контролем, не забивать диск и быстро находить нужные записи.
  • Минус: Если забыть про postrotate для сервисов типа nginx, apache, rsyslog — после ротации новые логи не появятся, а ошибки искать долго и больно.
  • Плюс: Можно легко интегрировать с мониторингом: после ротации отправлять уведомления, запускать анализаторы логов, делать бэкапы.
  • Минус: Если задать слишком маленький rotate или слишком частую ротацию — можно потерять важные данные, если не успел их обработать.

Команды для работы с Logrotate


# Проверить конфиг на ошибки
sudo logrotate --debug /etc/logrotate.conf

# Принудительно выполнить ротацию
sudo logrotate --force /etc/logrotate.conf

# Проверить статус ротации
cat /var/lib/logrotate/status

# Посмотреть, когда запускается logrotate
cat /etc/cron.daily/logrotate

# Сжать старые логи вручную
gzip /var/log/nginx/access.log.1

# Разархивировать лог для анализа
zcat /var/log/nginx/access.log.2.gz | less

Похожие решения и альтернативы

  • systemd-journald — если ты на чистом systemd, можно хранить логи в бинарном журнале, но это не всегда удобно для grep и анализа.
  • logadm (Solaris), newsyslog (BSD) — аналоги для других систем.
  • logrotate-ng — форк с расширенными возможностями, но на Ubuntu 24.04 стандартный logrotate закрывает 99% задач.
  • logwatch — для анализа и отправки отчётов по логам, но не для ротации.

Официальная документация: man logrotate

Статистика и сравнение

Решение Плюсы Минусы
Logrotate Просто, гибко, работает из коробки, поддержка всех форматов логов Требует ручной настройки для кастомных сервисов
systemd-journald Автоматически собирает все логи, удобен для новых сервисов Бинарный формат, неудобно для grep, не все приложения поддерживают
logrotate-ng Расширенные возможности, JSON-конфиги Не в стандартных репозиториях Ubuntu

Интересные факты и нестандартные способы использования

  • Logrotate можно использовать не только для логов, но и для любых файлов, которые нужно периодически архивировать и чистить (например, бэкапы, дампы БД, временные файлы).
  • Можно запускать Logrotate вручную из скриптов, чтобы делать ротацию по событию (например, после деплоя или по webhook).
  • Logrotate поддерживает отправку email-уведомлений через mail и запуск любых shell-скриптов после ротации — удобно для интеграции с мониторингом и алертингом.
  • Можно настроить разные политики для разных типов логов: критичные хранить дольше, менее важные — чаще удалять.
  • Используй prerotate и postrotate для автоматизации: например, после ротации логов nginx — автоматически отправлять свежий архив в облако или на S3.

Новые возможности и автоматизация

Logrotate отлично вписывается в инфраструктуру DevOps и CI/CD. Его можно интегрировать с Ansible, Chef, Puppet — автоматизировать развёртывание и настройку ротации на сотнях серверов. В скриптах удобно использовать logrotate --force для ручной ротации после деплоя или миграций.

  • Автоматизация бэкапов логов перед удалением
  • Интеграция с системами мониторинга (Prometheus, Zabbix) — отправлять алерты, если логи не ротуются
  • Гибкая политика хранения: для GDPR можно автоматически удалять логи старше N дней
  • Сбор логов с нескольких серверов в централизованное хранилище (через postrotate-скрипты)

Выводы и рекомендации

Logrotate — это must-have для любого сервера на Ubuntu 24.04. Он прост, гибок, не требует лишних зависимостей и отлично справляется с задачей автоматической ротации, сжатия и удаления логов. Настрой его один раз — и забудь о проблемах с переполненным диском и потерянными логами. Используй индивидуальные политики для разных сервисов, не забывай про postrotate для сервисов, которые не умеют сами пересоздавать логи, и интегрируй Logrotate в свои скрипты и автоматизацию.

Если ты только начинаешь строить свою инфраструктуру — не забудь про грамотное управление логами. А если нужен VPS или выделенный сервер для экспериментов и продакшна — заказать VPS или выделенный сервер можно прямо здесь на блоге.

Официальная документация и примеры: https://github.com/logrotate/logrotate

Пусть твои логи всегда будут под контролем, а сервер — чистым и быстрым!


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

Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.

Leave a reply

Your email address will not be published. Required fields are marked