cAdvisor: métricas de containers Docker
Node Exporter monitora a VPS, cAdvisor monitora os containers. É o exporter padrão do Google para métricas de containers Docker — CPU, memória, rede e I/O de disco por container, em formato Prometheus. Com o dashboard 14282 do Grafana, você vê todos os containers em um painel com zero configuração adicional.
Adicionar cAdvisor ao docker-compose.yml
cAdvisor precisa de acesso aos volumes do Docker para ler métricas dos containers:
services:
cadvisor:
image: gcr.io/cadvisor/cadvisor:latest
restart: always
privileged: true # necessário para acesso a cgroups
devices:
- /dev/kmsg:/dev/kmsg
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
- /cgroup:/cgroup:ro
ports:
- "127.0.0.1:8080:8080" # apenas loopback
command:
- '--docker_only=true' # apenas métricas de containers
- '--disable_metrics=disk,diskIO,network,tcp,udp,percpu,sched,process'
# Desabilite o que não usa para reduzir cardinalidade
networks:
- monitoringAdicionar cAdvisor ao Prometheus
Configure o scrape do cAdvisor no prometheus.yml:
# prometheus/prometheus.yml — adicionar job:
scrape_configs:
- job_name: 'cadvisor'
scrape_interval: 15s
static_configs:
- targets: ['cadvisor:8080']
metric_relabel_configs:
# Manter apenas métricas relevantes (reduz cardinalidade)
- source_labels: [__name__]
regex: 'container_(cpu_usage_seconds_total|memory_working_set_bytes|network_receive_bytes_total|network_transmit_bytes_total|fs_usage_bytes|last_seen)'
action: keep
# Remover containers de infraestrutura interna
- source_labels: [container]
regex: 'POD|'
action: drop
# Verificar após reload:
curl http://localhost:9090/api/v1/targets | python3 -m json.tool | grep cadvisorQueries PromQL para containers
As métricas mais úteis do cAdvisor para dashboards e alertas:
# CPU por container (% de uso)
sum(rate(container_cpu_usage_seconds_total{name!=""}[5m])) by (name) * 100
# Memória por container (MB)
sum(container_memory_working_set_bytes{name!=""}) by (name) / 1024 / 1024
# Limite de memória (MB) — configurado no docker-compose
sum(container_spec_memory_limit_bytes{name!=""}) by (name) / 1024 / 1024
# Memória usada vs limite (%)
sum(container_memory_working_set_bytes{name!=""}) by (name) /
sum(container_spec_memory_limit_bytes{name!=""}) by (name) * 100
# Tráfego de rede recebido por container (bytes/s)
sum(rate(container_network_receive_bytes_total{name!=""}[5m])) by (name)
# I/O de disco por container
sum(rate(container_fs_writes_bytes_total{name!=""}[5m])) by (name)
# Container que reiniciou recentemente
time() - container_last_seen{name!=""} > 60Dashboard Grafana para containers
Import do dashboard da comunidade e alertas essenciais:
# Importar dashboard pré-pronto:
# ID 14282: Docker Host & Container Overview (cAdvisor + Node Exporter)
# ID 193: Docker and System Monitoring
# ID 15798: Docker Dashboard
# Via API Grafana:
curl -X POST http://localhost:3000/api/dashboards/import \
-H "Content-Type: application/json" \
-u admin:senha \
-d '{"dashboard": {"id": null}, "folderId": 0, "overwrite": false, "inputs": [{"name": "DS_PROMETHEUS", "type": "datasource", "pluginId": "prometheus", "value": "Prometheus"}], "pluginId": "prometheus", "uid": "cadvisor"}'
# Alertas recomendados:
# - Container com uso de memória > 90% do limite
# - Container que parou (container_last_seen antigo)
# - Container com CPU > 80% por mais de 5 minutosLimitar recursos dos containers (e monitorar)
Configure limites no docker-compose e monitore o uso real com cAdvisor:
# docker-compose.yml — definir limites de recursos
services:
app:
image: minha-api:latest
deploy:
resources:
limits:
cpus: "1.0"
memory: 512M
reservations:
memory: 128M
postgres:
image: postgres:16-alpine
deploy:
resources:
limits:
cpus: "2.0"
memory: 1G
reservations:
memory: 256M
# Com limites definidos, o cAdvisor expõe:
# container_spec_cpu_quota / container_spec_cpu_period — limite de CPU
# container_spec_memory_limit_bytes — limite de memória
# E as métricas de uso real: container_cpu_usage_seconds_total, etc.
# Alerta quando container se aproxima do limite de memória:
# container_memory_working_set_bytes / container_spec_memory_limit_bytes > 0.85$ runstack deploy --plan starter
Não quer configurar manualmente?
Não quer configurar manualmente? Implante o VPS em menos de 3 minutos com a Runstack. Infraestrutura da OPEN DATACENTER, com servidores no Brasil.