- Home »

Управление логами с помощью 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 из коробки. Но чтобы всё работало как надо, нужно чуть-чуть ручной магии. Вот пошаговый гайд:
-
Проверь, установлен ли Logrotate:
sudo apt update
sudo apt install logrotate
-
Базовая настройка: Открой
/etc/logrotate.conf
— здесь глобальные параметры. Например:
weekly
rotate 4
create
compress
include /etc/logrotate.d
- weekly — ротация раз в неделю
- rotate 4 — хранить 4 архива
- create — создавать новый лог после ротации
- compress — архивировать старые логи
- include — подключать доп. конфиги из папки
-
Настройка для конкретного приложения: Например, для 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, чтобы он пересоздал логи
-
Проверка конфигов:
sudo logrotate --debug /etc/logrotate.conf
sudo logrotate --force /etc/logrotate.conf
- –debug — покажет, что будет делать, но не изменит файлы
- –force — принудительно выполнит ротацию
-
Автоматизация: 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
Пусть твои логи всегда будут под контролем, а сервер — чистым и быстрым!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.