0 XP
Módulo 10 · Observabilidade e SRE

Os três pilares e o que instrumentar primeiro

Intermediário 40 min+25 XPPrometheusLokiOpenTelemetry

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

  1. RED na borda (Ingress) e em cada API
  2. Saturação de banco e filas
  3. Logs estruturados em JSON com trace_id
  4. 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. 1. Qual label é inadequado em uma métrica Prometheus?

  2. 2. Qual label NÃO deve ir para uma métrica Prometheus?

  3. 3. Para descobrir em qual serviço uma requisição ficou lenta, o sinal ideal é:

Minhas anotações

Salvo automaticamente neste navegador.

AnteriorPróxima