19. Мониторинг
Мониторинг ресурсов контейнеров позволяет выявлять узкие места, предотвращать утечки памяти и оптимизировать производительность. Docker предоставляет встроенные инструменты и интегрируется с профессиональными системами мониторинга.
docker stats: мониторинг в реальном времени
Заголовок раздела «docker stats: мониторинг в реальном времени»# Статистика всех запущенных контейнеровdocker stats
# Конкретного контейнераdocker stats mycontainer
# Без автообновления (один снимок)docker stats --no-stream
# Форматированный выводdocker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}\t{{.NetIO}}"
# Вывод в JSONdocker stats --format json --no-streamВывод docker stats:
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/Oabc123 web-nginx 0.1% 12.5MiB / 512MiB 2.44% 1.2kB / 890B 1MB / 0Bdef456 api-node 2.3% 245MiB / 1GiB 23.9% 45kB / 22kB 5MB / 2MBghi789 postgres 0.5% 128MiB / 2GiB 6.25% 12kB / 8kB 25MB / 10MBОграничение ресурсов контейнера
Заголовок раздела «Ограничение ресурсов контейнера»# Ограничение памятиdocker run -d \ --memory=512m \ # максимум 512 МБ RAM --memory-swap=512m \ # отключить swap (swap = memory) --memory-reservation=256m \ # мягкий лимит myapp
# Ограничение CPUdocker run -d \ --cpus=0.5 \ # использовать максимум 0.5 CPU --cpu-shares=512 \ # относительный приоритет (по умолчанию 1024) --cpuset-cpus="0,1" \ # использовать только ядра 0 и 1 myapp
# Ограничение I/Odocker run -d \ --device-read-bps=/dev/sda:50mb \ # чтение макс 50 MB/s --device-write-bps=/dev/sda:50mb \ # запись макс 50 MB/s myapp
# В docker-compose.ymlservices: api: deploy: resources: limits: cpus: '0.5' memory: 512M reservations: cpus: '0.25' memory: 256MПрофессиональный мониторинг: cAdvisor + Prometheus + Grafana
Заголовок раздела «Профессиональный мониторинг: cAdvisor + Prometheus + Grafana»version: '3.8'services: cadvisor: image: gcr.io/cadvisor/cadvisor:latest volumes: - /:/rootfs:ro - /var/run:/var/run:ro - /sys:/sys:ro - /var/lib/docker/:/var/lib/docker:ro ports: - "8080:8080" privileged: true
prometheus: image: prom/prometheus:latest volumes: - ./prometheus.yml:/etc/prometheus/prometheus.yml - prometheus_data:/prometheus ports: - "9090:9090"
grafana: image: grafana/grafana:latest ports: - "3000:3000" volumes: - grafana_data:/var/lib/grafana environment: - GF_SECURITY_ADMIN_PASSWORD=admin depends_on: - prometheusКлючевые метрики для мониторинга
Заголовок раздела «Ключевые метрики для мониторинга»global: scrape_interval: 15s
scrape_configs: - job_name: 'docker' static_configs: - targets: ['cadvisor:8080']CPU:
container_cpu_usage_seconds_total— общее использование CPUcontainer_cpu_throttled_seconds_total— время троттлинга
Memory:
container_memory_usage_bytes— текущее использованиеcontainer_memory_limit_bytes— лимит памятиcontainer_memory_working_set_bytes— рабочий набор памяти
Network:
container_network_receive_bytes_total— входящий трафикcontainer_network_transmit_bytes_total— исходящий трафик