MAATRIX / Блог / Логи и мониторинг контейнеров

Логи и мониторинг контейнеров

Логи и мониторинг Docker-контейнеров на VPS
Блог MAATRIX · 2026-07-07

Контейнер, за которым не следят, однажды молча упадёт или сожрёт весь диск логами. Настраиваем чтение логов, ротацию и мониторинг ресурсов — без тяжёлых стеков.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Чтение логов

Базовый инструмент — docker logs. Смотрим последние строки и следим в реальном времени:

docker logs --tail 100 -f app

Часто нужен диапазон по времени — например, что было за последний час:

docker logs --since 1h --timestamps app

Если контейнеров много, удобнее compose — он покажет логи всего стека сразу, с цветной разбивкой по сервисам:

docker compose logs -f --tail 50

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Docker

Ротация логов

По умолчанию Docker пишет логи в JSON-файлы, которые растут бесконечно. Болтливый контейнер способен забить весь диск за сутки. Лечится ротацией в /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

После правки перезапустите демон:

systemctl restart docker

Теперь каждый контейнер хранит максимум 3 файла по 10 МБ. Проверить, где физически лежат логи и сколько весят:

du -sh /var/lib/docker/containers/*/*-json.log

На NVMe-дисках MAATRIX запись логов не создаёт I/O-затыков, но дисциплина ротации всё равно обязательна — место не резиновое.

Мониторинг ресурсов

Живая картина потребления CPU, памяти, сети и диска по каждому контейнеру:

docker stats

Для скриптов и алертов удобен разовый снимок в нужном формате:

docker stats --no-stream \
  --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

Проверить состояние и код выхода упавшего контейнера:

docker inspect --format '{{.State.Status}} {{.State.ExitCode}}' app

Healthcheck

Мониторинг ресурсов не скажет, что приложение внутри зависло, а процесс жив. Для этого — healthcheck. Docker сам будет проверять сервис и помечать контейнер как unhealthy:

services:
  app:
    image: myapp:1.0
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 5s
      retries: 3

Статус проверок виден в docker ps в колонке STATUS — например, Up 2 hours (healthy). На это можно повесить автоперезапуск или алерт.

Лёгкий мониторинг: Dozzle

Не хотите тянуть тяжёлый стек Prometheus + Grafana ради одного VPS? Dozzle даёт веб-интерфейс логов всех контейнеров в реальном времени, весит копейки:

docker run -d --name dozzle \
  --restart unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -p 127.0.0.1:8888:8080 \
  amir20/dozzle

Пробросьте порт через nginx с basic-auth — и у вас удобный дашборд логов без базы данных и настройки экспортеров.

Частые ошибки

  • Логи не ротируются — диск заполнен на 100%, контейнеры падают. Всегда настраивайте max-size и max-file.
  • Приложение пишет логи в файл внутри контейнера, а не в stdout — тогда docker logs пуст. Приучите сервис писать в stdout/stderr.
  • Нет healthcheck — контейнер «жив», но не отвечает, и вы узнаёте об этом от пользователей.
  • Следите за диском: df -h. Ежедневные бэкапы MAATRIX спасут данные, но переполненный диск всё равно уронит сервис.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS для Docker

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

Почему docker logs ничего не показывает?

Скорее всего, приложение пишет логи в файл внутри контейнера, а не в stdout/stderr. Docker собирает только стандартные потоки. Настройте вывод приложения в stdout.

Как не дать логам забить диск?

Настройте ротацию в /etc/docker/daemon.json через log-opts max-size и max-file, затем перезапустите демон. Так каждый контейнер ограничен по объёму логов.

Нужен ли Prometheus для маленького VPS?

Не обязательно. Для одного-двух серверов хватит docker stats, healthcheck и лёгкого Dozzle. Тяжёлый стек мониторинга оправдан, когда серверов много.