Skip to content

Основы Docker: Мониторинг

Мониторинг Docker включает в себя сбор и анализ метрик как на уровне Docker-хоста (сервера, на котором запущен Docker Daemon), так и на уровне отдельных контейнеров.

Уровни мониторинга Docker

  1. Мониторинг Docker-хоста: Отслеживание использования ресурсов (CPU, память, диск, сеть) на сервере, где запущен Docker Daemon. Также включает мониторинг состояния самого Docker Daemon.
  2. Мониторинг контейнеров: Отслеживание использования ресурсов (CPU, память, диск, сеть) каждым запущенным контейнером, а также состояния их процессов и приложений.
  3. Мониторинг приложений внутри контейнеров: Сбор специфичных метрик от приложений, работающих внутри контейнеров (например, HTTP-запросы, задержка, ошибки, состояние базы данных).

Инструменты для мониторинга Docker

Существует множество инструментов для мониторинга Docker, как встроенных, так и сторонних.

Встроенные инструменты Docker

  • docker stats: Команда в реальном времени отображает статистику использования ресурсов (CPU, память, сеть, ввод/вывод) для запущенных контейнеров.

    bash
    docker stats
    docker stats <container_id_or_name>

    Эта команда полезна для быстрого просмотра текущей ситуации, но не сохраняет исторические данные.

  • docker system df: Отображает информацию об использовании дискового пространства, связанного с Docker (образы, контейнеры, локальные тома).

    bash
    docker system df
  • docker events: Показывает поток событий Docker Daemon в реальном времени (запуск/остановка контейнеров, создание/удаление образов и т.д.).

    bash
    docker events
    docker events --filter 'type=container'

    Полезно для отслеживания изменений состояния контейнеров.

  • Логи контейнеров (docker logs): Хотя это не совсем мониторинг метрик, просмотр логов важен для диагностики проблем.

    bash
    docker logs <container_id_or_name>
    docker logs -f <container_id_or_name> # Следить за логами

Сторонние инструменты мониторинга

Для более комплексного и долговременного мониторинга рекомендуется использовать специализированные инструменты:

  • cAdvisor (Container Advisor): Open-source агент от Google, который собирает метрики использования ресурсов и производительности от запущенных контейнеров. Обычно используется в связке с системами хранения и визуализации метрик, такими как Prometheus и Grafana.

    • Предоставляет API для сбора данных.
    • Может работать как Docker-контейнер.
  • Prometheus: Open-source система мониторинга и оповещений, которая собирает метрики, периодически опрашивая цели (например, cAdvisor).

    • Имеет мощный язык запросов (PromQL).
    • Хорошо интегрируется с Docker и Kubernetes.
  • Grafana: Open-source платформа для визуализации данных. Может отображать метрики, собранные Prometheus, InfluxDB, Elasticsearch и другими источниками.

    • Предоставляет богатые возможности для создания дашбордов.
    • Широкое сообщество и множество готовых дашбордов.
  • Datadog: Коммерческая SaaS-платформа для мониторинга и аналитики, которая поддерживает Docker из коробки.

    • Предоставляет агентов для сбора метрик и логов.
    • Интегрируется с множеством других сервисов.
  • New Relic: Коммерческая платформа для мониторинга производительности приложений (APM) и инфраструктуры, включая Docker.

    • Предоставляет подробные метрики производительности приложений внутри контейнеров.
  • Dynatrace: Коммерческая платформа для мониторинга производительности и управления цифровым опытом, с глубокой поддержкой Docker и оркестраторов.

  • InfluxDB: Open-source Time Series Database (TSDB), часто используется для хранения метрик, собранных Telegraf или другими агентами.

  • Telegraf: Open-source агент для сбора метрик из различных источников (включая Docker) и записи их в различные хранилища (например, InfluxDB, Prometheus).

  • Sysdig: Коммерческая платформа для мониторинга безопасности и производительности контейнеров, основанная на open-source инструменте Sysdig.

Метрики для мониторинга Docker

При мониторинге Docker важно отслеживать следующие группы метрик:

Метрики Docker-хоста

  • Использование CPU: Общая загрузка процессора хост-машины. Высокая загрузка может указывать на перегрузку или проблемы с производительностью.
  • Использование памяти: Объем использованной и доступной оперативной памяти на хосте. Недостаток памяти может привести к замедлению работы или OOM (Out Of Memory) ошибкам.
  • Использование диска: Загрузка дисковой подсистемы (чтение/запись), свободное пространство. Высокая загрузка диска может быть узким местом.
  • Сетевая активность: Объем входящего и исходящего сетевого трафика на хосте.
  • Состояние Docker Daemon: Проверка, что Docker Daemon запущен и работает без ошибок.

Метрики контейнеров

  • Использование CPU (%): Процент выделенного CPU, используемый контейнером.
  • Использование памяти (bytes, %): Объем используемой памяти и процент от выделенного лимита. Превышение лимита может привести к throttling или OOM Kill.
  • Сетевой трафик (bytes in/out): Объем входящего и исходящего сетевого трафика для контейнера.
  • Блочные устройства (ввод/вывод): Статистика чтения и записи с диска контейнером.
  • Состояние контейнера: Запущен, остановлен, перезапускается и т.д.
  • Health Checks: Результаты проверок состояния, настроенных для контейнеров.

Метрики приложений внутри контейнеров

Эти метрики зависят от конкретного приложения, но могут включать:

  • HTTP-метрики: Количество запросов, время ответа, ошибки (4xx, 5xx).
  • Метрики баз данных: Количество соединений, задержка запросов, ошибки.
  • Очереди сообщений: Размер очереди, задержка обработки.
  • Пользовательские метрики: Специфичные для вашего приложения бизнес-метрики.

Настройка мониторинга Docker с помощью Prometheus и Grafana (пример)

  1. Запустите cAdvisor как Docker-контейнер:

    bash
    docker run --rm -d \
        --name=cadvisor \
        --volume=/:/rootfs:ro \
        --volume=/var/run:/var/run:ro \
        --volume=/sys:/sys:ro \
        --volume=/var/lib/docker/:/var/lib/docker:ro \
        --publish=8080:8080 \
        gcr.io/cadvisor/cadvisor:latest

    Теперь cAdvisor будет доступен на порту 8080 вашего хоста и начнет собирать метрики.

  2. Настройте Prometheus для сбора метрик из cAdvisor:

    В конфигурационном файле prometheus.yml добавьте job для опроса cAdvisor:

    yaml
    scrape_configs:
      - job_name: 'cadvisor'
        static_configs:
          - targets: ['localhost:8080']

    Запустите Prometheus, указав путь к конфигурационному файлу.

  3. Настройте Grafana для визуализации метрик Prometheus:

    • Добавьте Prometheus как источник данных в Grafana.
    • Создайте дашборды, используя запросы PromQL для отображения метрик Docker (например, использование CPU/памяти контейнерами, сетевой трафик). Существует множество готовых дашбордов Grafana для мониторинга Docker.

Лучшие практики мониторинга Docker

  • Мониторинг на всех уровнях: Отслеживайте как хост-машину, так и контейнеры и приложения внутри них.
  • Использование централизованной системы мониторинга: Собирайте и визуализируйте метрики в одном месте для удобства анализа.
  • Настройка оповещений (Alerting): Определите пороговые значения для ключевых метрик и настройте оповещения при их превышении для своевременного реагирования на проблемы.
  • Сохранение исторических данных: Храните метрики за определенный период времени для анализа трендов и диагностики проблем, возникающих не сразу.
  • Визуализация данных: Используйте дашборды для наглядного отображения ключевых метрик и быстрого выявления аномалий.
  • Мониторинг состояния здоровья (Health Checks): Используйте health checks, определенные в Dockerfile или оркестраторе, и отслеживайте их результаты.
  • Корреляция данных: Сопоставляйте метрики с логами и событиями для более глубокого анализа проблем.

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