Мониторинг контейнеров с помощью cAdvisor и Prometheus
Контейнеры упростили деплой, но усложнили наблюдаемость: процессы изолированы, живут недолго, масштабируются динамически. Чтобы понимать, что происходит в системе, нужен мониторинг на уровне контейнеров.
Один из самых популярных стеков — cAdvisor + Prometheus. Он позволяет в реальном времени отслеживать CPU, память, сеть и дисковую активность контейнеров.
Что такое cAdvisor и Prometheus
cAdvisor (Container Advisor) — это агент от Google, который собирает метрики о контейнерах прямо с хоста.
Он умеет:
- отслеживать использование CPU
- показывать потребление памяти
- собирать сетевые метрики
- отдавать данные по HTTP в формате, понятном Prometheus
Фактически это «датчик», который снимает метрики с Docker.
Prometheus — это система мониторинга, которая:
- периодически опрашивает (scrape) источники метрик
- хранит их во временных рядах
- позволяет строить запросы (PromQL)
- используется для алертинга
У нас уже есть статья про базовый сетап мониторинга с помощью Prometheus + Grafana, сначала можно ознакомиться с ней.
В связке:
- cAdvisor → отдаёт метрики
- Prometheus → собирает и хранит
Как это работает вместе
- cAdvisor запускается на хосте
- Он собирает метрики контейнеров
- Prometheus опрашивает cAdvisor по HTTP
- Метрики сохраняются и становятся доступными для анализа
Схема:
Docker → cAdvisor → Prometheus → Grafana
Запуск и настройка
Самый простой способ — через Docker:
docker run -d \
--name=cadvisor \
-p 8080:8080 \
-v /:/rootfs:ro \
-v /var/run:/var/run:ro \
-v /sys:/sys:ro \
-v /var/lib/docker/:/var/lib/docker:ro \
gcr.io/cadvisor/cadvisor:latestПосле запуска метрики доступны по адресу:
http://localhost:8080/metrics
В конфиге prometheus.yml добавляем:
scrape_configs:
- job_name: 'cadvisor'
static_configs:
- targets: ['localhost:8080']После этого Prometheus начнёт собирать метрики.
Какие метрики доступны
CPU
container_cpu_usage_seconds_total— общее время CPUcontainer_cpu_cfs_throttled_seconds_total— сколько времени контейнер был ограничен
Пример запроса:
rate(container_cpu_usage_seconds_total[1m])
Память
container_memory_usage_bytes— текущее использованиеcontainer_memory_limit_bytes— лимит
Пример:
container_memory_usage_bytes / container_memory_limit_bytes
Сеть
container_network_receive_bytes_totalcontainer_network_transmit_bytes_total
Пример:
rate(container_network_receive_bytes_total[1m])
Диск
container_fs_reads_bytes_totalcontainer_fs_writes_bytes_total
Практические кейсы
Поиск контейнеров, которые грузят CPU
topk(5, rate(container_cpu_usage_seconds_total[1m]))
Контейнеры на грани OOM
container_memory_usage_bytes / container_memory_limit_bytes > 0.9
Всплески сетевого трафика
rate(container_network_transmit_bytes_total[1m])
Grafana (визуализация)
Prometheus хранит данные, но для удобной визуализации обычно используют Grafana.
Готовые дашборды:
- Docker monitoring
- Kubernetes cluster monitoring
Они позволяют видеть:
- нагрузку по контейнерам
- использование ресурсов
- аномалии и пики
Важные нюансы
- cAdvisor потребляет ресурсы (но немного)
- метрики могут быть шумными — важно правильно писать запросы
- при большом количестве контейнеров нужно тюнить Prometheus (retention, storage)
Alertmanager и алерты
Prometheus умеет не только собирать метрики, но и отправлять алерты при проблемах. Для этого используется Alertmanager.
Он отвечает за:
- отправку уведомлений (Telegram, Slack, Email)
- группировку алертов
- подавление повторяющихся событий
Пример правила алерта
Добавим правило в alerts.yml:
groups:
- name: containers
rules:
- alert: HighCPUUsage
expr: rate(container_cpu_usage_seconds_total[1m]) > 0.8
for: 2m
labels:
severity: warning
annotations:
summary: "Высокая нагрузка CPU у контейнера"
description: "Контейнер использует более 80% CPU более 2 минут"Подключаем файл в prometheus.yml:
rule_files:
- "alerts.yml"Настройка Alertmanager
Пример alertmanager.yml:
route:
receiver: 'default'
receivers:
- name: 'default'
webhook_configs:
- url: 'http://localhost:5001/'В реальной системе вместо webhook используют:
- Telegram боты
- Slack
Что важно учитывать
- добавляйте
for, чтобы избежать ложных срабатываний - группируйте алерты, чтобы не было спама
- используйте разные severity (warning, critical)
Примеры полезных алертов
CPU:
rate(container_cpu_usage_seconds_total[1m]) > 0.9
Память:
container_memory_usage_bytes / container_memory_limit_bytes > 0.9
OOM риск:
container_memory_usage_bytes > container_memory_limit_bytes * 0.95
Сеть (аномальный трафик):
rate(container_network_receive_bytes_total[1m]) > 10000000
Альтернатива публичного мониторинга
Если нужно не только собирать метрики в Prometheus, но и предоставлять клиентам или команде публичный статус сервисов, можно использовать наш сервис мониторинга Statuser. Он позволяет:
- быстро создать публичную страницу статуса для сервисов
- следить за uptime и метриками без сложной настройки
- получать уведомления о сбоях через Telegram, Email или вебхуки
Это удобно, если хочется дополнить внутренний мониторинг Prometheus визуальными страницами статуса, особенно для клиентов или команды поддержки.
Итог
Связка cAdvisor + Prometheus — простой и эффективный способ мониторинга контейнеров.
- cAdvisor собирает метрики
- Prometheus хранит и анализирует
- Grafana визуализирует
Это базовый стек для наблюдаемости, который используется как в Docker, так и в Kubernetes, и позволяет быстро находить проблемы с CPU, памятью и сетью в продакшене.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний