Ответ
Для мониторинга ресурсопотребления контейнеров я использую комбинацию инструментов, от простых CLI до полноценных систем.
1. Быстрый CLI-мониторинг (Docker/Podman):
# Статистика по всем запущенным контейнерам в реальном времени (CPU, Memory, Network I/O, Block I/O)
docker stats --all
# Аналогично для Podman
podman stats --all
# Вывод в формате JSON для скриптовой обработки
docker stats --all --no-stream --format "{{ json . }}"
2. Интерактивные инструменты:
- ctop — как
top, но для контейнеров.docker run --rm -ti --name=ctop -v /var/run/docker.sock:/var/run/docker.sock:ro quay.io/vektorlab/ctop:latest - dockertop — встроенная команда (менее информативно).
3. Агенты для сбора метрик:
- cAdvisor (Container Advisor) от Google — собирает детальные метрики по ресурсам и производительности контейнеров.
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 --detach=true gcr.io/cadvisor/cadvisor:latestПосле запуска веб-интерфейс доступен на
http://<server-ip>:8080. cAdvisor также предоставляет метрики в формате Prometheus.
4. Продакшен-мониторинг: В реальных проектах мы не смотрим нагрузку вручную. Настроен пайплайн:
- Сбор метрик: Prometheus Node Exporter (метрики хоста) + cAdvisor (метрики контейнеров) или метрики напрямую из Docker/Podman socket.
- Хранение и запросы: Prometheus.
- Визуализация и алертинг: Grafana с дашбордами, показывающими CPU/RAM/Network/Disk по всем контейнерам и хостам. Критические значения триггерят алерты в Alertmanager.
Пример запроса PromQL для Grafana: sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) — загрузка CPU по контейнерам.