EN EN

Logrotate и Docker: Зачем и как?

Опубликовано 05.09.2025


Logrotate и Docker: Зачем и как?

Введение

Logrotate — это мощный инструмент для управления логами в Linux, но его взаимодействие с Docker имеет свои особенности.
Это руководство объясняет, как правильно использовать logrotate с Docker-контейнерами и когда лучше обойтись встроенными средствами управления логами Docker.


Docker-контейнеры и логи

Docker собирает логи стандартных потоков вывода (stdout и stderr) контейнеров и по умолчанию сохраняет их в формате JSON-файлов:


/var/lib/docker/containers/\<container\_id>/\<container\_id>-json.log

Если контейнер генерирует много логов, эти файлы могут занимать гигабайты и быстро «съесть» всё дисковое пространство.


Встроенные средства Docker

Docker имеет встроенные механизмы ограничения логов через параметры log-opt при запуске контейнера (docker run) или в docker-compose.yml.

Основные параметры

  • max-size — максимальный размер файла лога.
  • max-file — количество файлов логов, которые будут храниться.

Пример docker-compose.yml

version: '3'
services:
  my-service:
    image: my-service-image
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "3"

Это рекомендуемый способ управления логами в Docker — простой, безопасный и официально поддерживаемый.


Logrotate: необходимость и преимущества

Зачем использовать logrotate, если в Docker есть свои средства?

Ответ: централизация и гибкость.

Преимущества logrotate

  • 📌 Централизация — можно управлять логами всех сервисов (Docker, Nginx, PostgreSQL) из одного места.
  • 📌 Гибкость — поддержка сжатия, уведомлений, запуска скриптов после ротации.
  • 📌 Совместимость — работает даже с legacy-системами.
  • 📌 Стабильность — предотвращает переполнение диска.

Пример конфигурации logrotate для Docker

Создайте файл /etc/logrotate.d/docker-containers:

/var/lib/docker/containers/*/*.log {
    rotate 7
    daily
    compress
    size 100M
    copytruncate
    su root root
}

Объяснение параметров

  • rotate 7 — хранить 7 архивов.
  • daily — ротация раз в день.
  • compress — сжатие старых логов.
  • size 100M — ротация при достижении 100 МБ.
  • copytruncate — скопировать и обнулить файл без перезапуска контейнера.
  • su root root — запуск от имени root.

💡 Благодаря copytruncate контейнер не нужно перезапускать — Docker продолжит писать в тот же файл.


Docker log-opt или logrotate: что выбрать?

✅ Используйте встроенные опции Docker (max-size, max-file), если:

  • Все сервисы работают в контейнерах.
  • Нужен быстрый и надёжный контроль роста логов.
  • Удобно прописывать параметры в docker-compose.yml.
  • Вы хотите использовать только поддерживаемые Docker-фичи.

✅ Используйте logrotate, если:

  • У вас разные сервисы (контейнеры + системные демоны).
  • Уже настроен logrotate и вы хотите централизовать управление.
  • Нужны расширенные сценарии ротации.
  • Работа с legacy-системами, где встроенные параметры недоступны.

Лучшие практики

  • Для новых проектов: всегда начинайте с встроенных настроек Docker.

  • Для продакшена: можно комбинировать оба подхода:

    • Docker ограничивает рост логов (max-size, max-file).
    • Logrotate управляет системными логами и архивирует контейнерные.

Заключение

  • Встроенные механизмы Docker — это первый выбор для управления логами.
  • Logrotate остаётся полезным инструментом для централизации и гибкости.
  • Оптимальный подход в продакшене: комбинировать оба метода.

Нужна помощь?

Свяжись со мной и я помогу решить проблему

Похожие посты