Skip to content
← Все статьи

Мониторинг Docker-контейнеров: метрики, инструменты и лучшие практики

Почему мониторинг контейнеров отличается

Docker-контейнеры эфемерны. Они запускаются, останавливаются, масштабируются автоматически. Контейнер, работающий сейчас, может не существовать через пять минут. Традиционный серверный мониторинг сайтов — отслеживание долгоживущих хостов со статическими IP — не работает в контейнерной среде. Нужен мониторинг, адаптирующийся к динамической инфраструктуре.

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

Ключевые метрики

CPU

# Проверка CPU-использования контейнеров
docker stats --no-stream --format \
    "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

# Вывод:
# NAME          CPU %     MEM USAGE / LIMIT
# web-app       15.23%    256MiB / 512MiB
# redis         2.41%     64MiB / 128MiB
# postgres      8.76%     512MiB / 1GiB

Память

Сеть

Жизненный цикл контейнера

Архитектура стека мониторинга

Контейнеры → cAdvisor (сбор метрик)
                ↓
           Prometheus (хранение временных рядов)
                ↓
           Grafana (визуализация + дашборды)
                ↓
           Alertmanager (уведомления)

cAdvisor

Container Advisor от Google запускается как контейнер и автоматически обнаруживает и собирает метрики со всех контейнеров на хосте:

# Запуск cAdvisor
docker run -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

Конфигурация Prometheus

# prometheus.yml
global:
  scrape_interval: 15s

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

  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node-exporter:9100']

Важные алерты

# Правила алертинга Prometheus
groups:
  - name: container_alerts
    rules:
      # Контейнер использует >90% лимита памяти
      - alert: ContainerMemoryHigh
        expr: |
          container_memory_usage_bytes /
          container_spec_memory_limit_bytes > 0.9
        for: 5m
        annotations:
          summary: "Контейнер {{ $labels.name }} память > 90%"

      # Контейнер часто перезапускается
      - alert: ContainerRestartLoop
        expr: |
          increase(container_restart_count[1h]) > 3
        labels:
          severity: critical
        annotations:
          summary: "Контейнер {{ $labels.name }} перезапущен 3+ раз за час"

      # Контейнер нездоров
      - alert: ContainerUnhealthy
        expr: container_health_status{status="unhealthy"} == 1
        for: 1m
        labels:
          severity: critical

Health Checks в Docker Compose

# docker-compose.yml
services:
  web:
    image: myapp:latest
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    deploy:
      resources:
        limits:
          cpus: '2.0'
          memory: 512M
        reservations:
          cpus: '0.5'
          memory: 256M

Мониторинг логов

Логи контейнеров не менее важны:

Внешний мониторинг

Внутренние метрики (CPU, память, перезапуски) показывают здоровье контейнера, но внешний мониторинг показывает здоровье сервиса — что реально видят пользователи. Используйте внешний мониторинг доступности (например, Enterno.io) для проверки ваших контейнерных сервисов извне сети. Это ловит проблемы, невидимые изнутри: проблемы DNS, ошибки конфигурации балансировщика, проблемы TLS-сертификатов и сетевые отказы.

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

Заключение

Мониторинг Docker-контейнеров требует перехода от статического серверного мониторинга к динамической, многослойной наблюдаемости. Отслеживайте CPU, память, сеть и диск на уровне контейнера; события жизненного цикла; health checks приложения; и внешнюю доступность сервиса. Используйте cAdvisor, Prometheus и Grafana как основу мониторинга, дополняйте централизованным логированием и всегда комбинируйте внутренние метрики с внешним мониторингом доступности для полной видимости контейнерных сервисов.

Проверьте ваш сайт прямо сейчас

Проверить →
Другие статьи: DevOps
DevOps
Мониторинг как код: правила Prometheus и дашборды Grafana
16.03.2026 · 14 просм.
DevOps
Управление логами: лучшие практики для продакшена
16.03.2026 · 12 просм.
DevOps
Стратегии деплоя без простоя
16.03.2026 · 16 просм.