Os três pilares e o que instrumentar primeiro
Objetivos desta aula
- Escolher o sinal adequado a cada pergunta
- Instrumentar as quatro métricas essenciais
- Evitar cardinalidade explosiva
Métricas respondem 'quanto e com que frequência' de forma barata e agregada — ideais para alerta e tendência. Logs respondem 'o que exatamente aconteceu neste evento' — ideais para investigação pontual. Traces respondem 'onde o tempo foi gasto nesta requisição que atravessou cinco serviços'. Usar o sinal errado custa tempo e dinheiro.
Comece pelo método RED nos serviços: Rate (requisições por segundo), Errors (taxa de erro) e Duration (distribuição de latência). Para recursos, USE: Utilization, Saturation, Errors. Com RED por rota e USE por recurso você já detecta a maioria dos incidentes reais.
Cuidado com cardinalidade: usar userId, requestId ou URL completa como label multiplica séries temporais e derruba o Prometheus. Identificadores únicos vão para logs e traces; labels de métrica são dimensões de baixa cardinalidade (rota, método, status).
1. Monitorar vs observar
Monitorar responde perguntas que você já conhecia ("a CPU passou de 80%?"). Observar permite responder perguntas novas sobre um problema que ninguém previu, olhando os dados que o sistema emite.
2. Os três sinais
- Métricas: números no tempo, baratos, ótimos para alertas e tendências
- Logs: eventos detalhados, ótimos para entender o que aconteceu
- Traces: o caminho de uma requisição por vários serviços, ótimos para achar onde está a lentidão
O segredo é ligá-los: da métrica ao trace, do trace ao log, pelo mesmo trace_id.
3. Métodos RED e USE
RED para serviços: Rate (requisições/s), Errors (taxa de erro), Duration (latência). USE para recursos: Utilization, Saturation, Errors. Os quatro sinais de ouro do Google (latência, tráfego, erros, saturação) resumem os dois.
4. O que instrumentar primeiro
- RED na borda (Ingress) e em cada API
- Saturação de banco e filas
- Logs estruturados em JSON com trace_id
- Traces nas rotas críticas (checkout do CloudShop)
5. Cuidado com cardinalidade
Cada combinação de labels vira uma série no Prometheus. Colocar user_id ou URL completa como label explode memória e custo. Use labels com poucos valores (rota, método, status).
Na prática
Instrumentar a API do CloudShop
javascript
import express from "express";
import client from "prom-client";
const app = express();
const registry = new client.Registry();
client.collectDefaultMetrics({ register: registry });
const httpDuration = new client.Histogram({
name: "http_request_duration_seconds",
help: "Duracao das requisicoes HTTP",
labelNames: ["method", "route", "status"], // baixa cardinalidade
buckets: [0.01, 0.05, 0.1, 0.3, 0.5, 1, 2, 5],
});
registry.registerMetric(httpDuration);
app.use((req, res, next) => {
const end = httpDuration.startTimer({ method: req.method });
res.on("finish", () => {
// route (padrao) evita explodir series com IDs na URL
end({ route: req.route?.path ?? "unmatched", status: res.statusCode });
});
next();
});
app.get("/metrics", async (_req, res) => {
res.set("Content-Type", registry.contentType);
res.end(await registry.metrics());
});Nota de segurança: Não exponha /metrics publicamente: métricas revelam rotas internas e volumes de negócio. Restrinja por rede ou autenticação.
Log estruturado ligado ao trace
json
{"ts":"2026-03-10T14:02:11Z","level":"error","service":"api","route":"/checkout",
"status":502,"duration_ms":1840,"trace_id":"4bf92f3577b34da6a3ce929d0e0e4736",
"msg":"payment gateway timeout"}Por que isso importa
Serviço sem instrumentação é caixa preta: você descobre problema pelo cliente e depura por adivinhação.
Erro comum
Usar caminho completo com ID como label e criar milhões de séries.
Dica de produção
Histograma de latência com buckets alinhados ao seu SLO; buckets errados inutilizam o p95.
Alerta de segurança
Nunca coloque dado pessoal em label de métrica: ele fica retido por muito tempo e é difícil de expurgar.
Pergunta de entrevista
Quando você usaria trace em vez de log para investigar lentidão?
Glossário
- RED
- Rate, Errors, Duration: método de monitoramento orientado a serviço.
- cardinalidade
- Número de séries distintas geradas pelas combinações de labels.
- RED
- Rate, Errors, Duration: métricas essenciais de um serviço.
- USE
- Utilization, Saturation, Errors: métricas essenciais de um recurso.
- Cardinalidade
- Quantidade de séries únicas geradas pelas combinações de labels.
Conexão com o CloudShop
Expor /metrics na API do CloudShop com histograma de latência por rota.
Quiz da aula
1. Qual label é inadequado em uma métrica Prometheus?
2. Qual label NÃO deve ir para uma métrica Prometheus?
3. Para descobrir em qual serviço uma requisição ficou lenta, o sinal ideal é:
Minhas anotações
Salvo automaticamente neste navegador.