- Home »

Управление лог-файлами с помощью Logrotate на Ubuntu 24.04
Сегодня поговорим о том, как не утонуть в логах на сервере и не проснуться однажды утром с диском, забитым до отказа. Если ты держишь свой сервер на Ubuntu 24.04 (или только собираешься), рано или поздно столкнёшься с тем, что логи растут как на дрожжах. И вот тут на сцену выходит Logrotate — утилита, которая автоматизирует рутину по управлению лог-файлами, чтобы ты мог заниматься чем-то более интересным, чем ручная чистка /var/log. В этой статье разберёмся, как работает Logrotate, как его быстро и просто настроить, и какие фишки можно выжать из этого инструмента. Плюс — реальные кейсы, грабли, лайфхаки и даже немного статистики.
Как работает Logrotate?
Logrotate — это такой скриптовый дирижёр, который по расписанию (обычно раз в сутки) проверяет логи, которые ты ему укажешь, и делает с ними то, что ты скажешь: архивирует, удаляет старые, сжимает, отправляет уведомления, рестартует сервисы, если надо. Всё это настраивается через конфиги, которые лежат в /etc/logrotate.conf
и /etc/logrotate.d/
.
- Ротация — переименование текущего лога (например, access.log → access.log.1), создание нового пустого файла для свежих записей.
- Сжатие — старые логи можно автоматически архивировать (gzip, bzip2, xz).
- Удаление — устаревшие архивы удаляются по количеству или сроку хранения.
- Пост-обработка — можно запускать свои скрипты после ротации (например, отправить архив в облако или рестартовать nginx).
Logrotate работает по расписанию через cron (обычно /etc/cron.daily/logrotate
), но можно запускать вручную для тестов.
Как быстро и просто всё настроить?
Всё, что тебе нужно — это базовое понимание структуры конфигов и пара команд в терминале. Вот пошаговый гайд:
- Проверь, установлен ли logrotate:
sudo apt update
sudo apt install logrotate
- Ознакомься с основным конфигом:
cat /etc/logrotate.conf
Обычно он подключает все файлы из/etc/logrotate.d/
. - Создай свой конфиг для приложения (например, для 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 — ротация каждый день
- rotate 14 — хранить 14 архивов
- compress — сжимать архивы
- notifempty — не трогать пустые логи
- postrotate … endscript — команда после ротации (рестарт nginx логов)
- Проверь конфиг на ошибки:
sudo logrotate --debug /etc/logrotate.conf
- Запусти ротацию вручную (для теста):
sudo logrotate -f /etc/logrotate.conf
Всё, теперь твои логи под контролем! Можно добавить свои приложения, кастомизировать параметры, и забыть о ручной чистке.
Примеры, схемы, практические советы
Давай разберём несколько кейсов — что бывает, если не настроить logrotate, и как его грамотная настройка спасает ситуацию.
Сценарий | Что происходит | Рекомендации |
---|---|---|
Логи не ротируются | Диск забивается, сервисы падают, мониторинг орёт, клиенты недовольны. | Включить logrotate, настроить ротацию и удаление старых архивов. |
Ротация без сжатия | Архивы копятся, место экономится слабо. | Добавить compress и delaycompress в конфиг. |
Слишком частая ротация | Много мелких архивов, сложно искать нужное. | Выбрать оптимальный период (daily/weekly/monthly) под нагрузку. |
Забыл рестартовать сервис | Логи ротируются, но сервис пишет в старый файл (log file descriptor leak). | Использовать postrotate для graceful reload/restart. |
Случайно удалил все логи | Нет истории, сложно расследовать инциденты. | Хранить хотя бы 7-14 архивов, делать бэкапы важных логов. |
Команды для управления Logrotate
# Проверить версию
logrotate --version
# Проверить конфиг на ошибки
sudo logrotate --debug /etc/logrotate.conf
# Принудительно запустить ротацию
sudo logrotate -f /etc/logrotate.conf
# Проверить статус cron-задачи
cat /etc/cron.daily/logrotate
# Посмотреть логи работы logrotate
cat /var/lib/logrotate/status
Похожие решения и альтернативы
- newsyslog — альтернатива из BSD мира, но на Ubuntu встречается редко.
- systemd-journald — если у тебя сервисы на systemd, можно хранить логи в journal, но это отдельная философия (см. официальную доку).
- logadm — утилита из Solaris, на Linux почти не встречается.
- Скрипты на bash/python — кастомные решения, но зачем, если есть logrotate?
Logrotate — де-факто стандарт для Linux. Он прост, гибок, поддерживается всеми дистрибутивами, и его легко интегрировать в любые пайплайны.
Статистика и сравнение
Утилита | Поддержка форматов | Гибкость | Интеграция с cron | Документация |
---|---|---|---|---|
Logrotate | Любые plain text, wildcard | Очень высокая | Да | Отличная (man logrotate) |
systemd-journald | Бинарный журнал | Средняя | Нет (свой механизм) | Хорошая |
newsyslog | Plain text | Средняя | Да | Средняя |
Интересные факты и нестандартные способы использования
- Logrotate можно использовать не только для логов, но и для любых файлов, которые надо периодически архивировать или удалять (например, дампы баз данных, временные файлы).
- Можно на лету отправлять архивы в облако через
postrotate
(например, скрипт сrclone
илиaws s3 cp
). - Logrotate поддерживает хуки
prerotate
иpostrotate
— можно делать любые магические штуки: отправлять уведомления в Telegram, запускать анализаторы логов, пересчитывать статистику. - Можно писать свои шаблоны конфигов и разворачивать их через Ansible, Salt, Puppet — удобно для автодеплоя на кластере.
- Logrotate можно запускать не только по расписанию, но и по размеру файла (
size 100M
), что актуально для нагруженных сервисов.
Новые возможности для автоматизации и скриптов
Logrotate отлично вписывается в автоматизацию: можно генерировать конфиги на лету, интегрировать с CI/CD пайплайнами, запускать через systemd timers вместо cron, или даже использовать его как часть мониторинга (например, если логи не ротируются — это тревожный сигнал). В связке с инструментами типа ELK или Fluentd можно строить мощные системы сбора и анализа логов, не боясь, что диск внезапно закончится.
Выводы и рекомендации
Logrotate — must-have для любого сервера на Ubuntu 24.04. Это простой, надёжный и гибкий инструмент, который экономит время и нервы. Неважно, держишь ли ты свой VPS (заказать VPS) или управляешь флотом выделенных машин (арендовать сервер) — грамотная настройка logrotate избавит тебя от кучи проблем: от внезапно забитого диска до потери важных логов. Используй его не только для стандартных логов, но и для любых файлов, которые требуют ротации. Не забывай про сжатие, автоматизацию и интеграцию с другими инструментами. И помни: хороший DevOps — это тот, кто не чистит логи вручную!
Официальная документация: https://man7.org/linux/man-pages/man8/logrotate.8.html
Прокачивай свои сервера, автоматизируй всё, что можно, и пусть логи будут под контролем!
В этой статье собрана информация и материалы из различных интернет-источников. Мы признаем и ценим работу всех оригинальных авторов, издателей и веб-сайтов. Несмотря на то, что были приложены все усилия для надлежащего указания исходного материала, любая непреднамеренная оплошность или упущение не являются нарушением авторских прав. Все упомянутые товарные знаки, логотипы и изображения являются собственностью соответствующих владельцев. Если вы считаете, что какой-либо контент, использованный в этой статье, нарушает ваши авторские права, немедленно свяжитесь с нами для рассмотрения и принятия оперативных мер.
Данная статья предназначена исключительно для ознакомительных и образовательных целей и не ущемляет права правообладателей. Если какой-либо материал, защищенный авторским правом, был использован без должного упоминания или с нарушением законов об авторском праве, это непреднамеренно, и мы исправим это незамедлительно после уведомления. Обратите внимание, что переиздание, распространение или воспроизведение части или всего содержимого в любой форме запрещено без письменного разрешения автора и владельца веб-сайта. Для получения разрешений или дополнительных запросов, пожалуйста, свяжитесь с нами.