1. Por que Prometheus + Grafana
Prometheus coleta métricas por pull (HTTP). Grafana visualiza e alerta. Juntos cobrem CPU, memória, disco, rede e containers sem precisar de agente pesado em cada host.
Use quando você já tem serviços em Docker ou servidores Linux e precisa de visibilidade antes de escalar para um APM comercial.
2. Stack mínima com Docker Compose
# docker-compose.yml
services:
prometheus:
image: prom/prometheus:v2.54.1
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
- prom_data:/prometheus
ports:
- "9090:9090"
restart: unless-stopped
grafana:
image: grafana/grafana:11.2.0
environment:
- GF_SECURITY_ADMIN_PASSWORD=troque-isso
volumes:
- graf_data:/var/lib/grafana
ports:
- "3000:3000"
depends_on:
- prometheus
restart: unless-stopped
volumes:
prom_data:
graf_data:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ["localhost:9090"]
- job_name: node
static_configs:
- targets: ["node-exporter:9100"]
- job_name: cadvisor
static_configs:
- targets: ["cadvisor:8080"]
DICA · Não exponha 9090 e 3000 na internet sem autenticação ou reverse proxy com TLS.
3. Node Exporter (servidor)
node-exporter:
image: prom/node-exporter:v1.8.2
command:
- '--path.rootfs=/host'
volumes:
- /:/host:ro,rslave
network_mode: host
pid: host
restart: unless-stopped
Métricas principais: node_cpu_seconds_total, node_memory_MemAvailable_bytes, node_filesystem_avail_bytes.
4. cAdvisor (containers)
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.49.1
volumes:
- /:/rootfs:ro
- /var/run:/var/run:ro
- /sys:/sys:ro
- /var/lib/docker/:/var/lib/docker:ro
ports:
- "8080:8080"
restart: unless-stopped
5. Dashboards e alertas
No Grafana: Data source → Prometheus → URL http://prometheus:9090.
- Importe o dashboard Node Exporter Full (ID 1860).
- Importe Docker/cAdvisor (ID 14282).
- Crie alertas simples: CPU > 85% por 5 min, disco < 15% livre.
# Exemplo de regra de alerta (prometheus)
groups:
- name: host
rules:
- alert: HighCPU
expr: 100 - (avg by(instance) (rate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
for: 5m
labels:
severity: warning
annotations:
summary: "CPU alta em {{ $labels.instance }}"
6. Checklist de produção
- Prometheus e Grafana atrás de reverse proxy com TLS
- Senha forte no Grafana + usuários separados
- Retenção de métricas definida (ex.: 15–30 dias)
- Alertmanager configurado (e-mail, Telegram ou Slack)
- Targets de scrape documentados no prometheus.yml
7. Comandos e conceitos
| Conceito / comando | O que faz |
|---|---|
scrape_interval | Frequência com que o Prometheus busca métricas. |
rate(...[5m]) | Taxa média por segundo nos últimos 5 minutos. |
node_exporter | Exporta métricas do host Linux. |
cAdvisor | Exporta uso de CPU/memória/rede por container. |
| PromQL | Linguagem de consulta do Prometheus. |
8. Erros comuns
| Sintoma | Causa | Solução |
|---|---|---|
| Target DOWN | Rede Docker ou porta errada | Verifique service names e network |
| Dashboards vazios | Data source ou labels diferentes | Confira job_name e instance |
| Disco enche | Retenção alta + muitos targets | Ajuste --storage.tsdb.retention.time |
| Alertas silenciosos | Alertmanager não configurado | Configure receivers e routes |