Renan Montanari Blog
Voltar ao blog
ObservabilidadeArquitetura

Monitoramento em Sistemas Profissionais: Quando a Falha Deixa de Ser Silenciosa

Logging, métricas e alertas: as três decisões de arquitetura que separam um sistema amador de um profissional, e por que elas precisam ser tomadas antes de entrar em produção.

Renan Montanari

Renan Montanari

Engenheiro de Software Full-Stack

6 min de leitura

Introdução: A Madrugada que Faz a Diferença

Existe um momento específico que separa um sistema amador de um profissional. Ele costuma acontecer de madrugada.

Não porque algo quebra apenas à noite. Mas porque é quando você descobre que alguma coisa quebrou e ninguém, exceto seus clientes, ficou sabendo.

Essa diferença não é pequena. E mais importante: não é cara. É uma decisão de arquitetura tomada antes do sistema entrar em produção.

Quando o Silêncio Custa Clientes

A Falha Invisível

No sistema amador, algo quebra:

  • O pagamento para de ser processado
  • Uma integração passa a devolver erro 500
  • O disco preenche e queries começam a falhar
  • A fila de processamento trava

O sistema segue aparentemente normal. Nenhum alerta. Nenhuma mensagem. Apenas falhando em silêncio.

Oito horas depois, chega a mensagem:

"Tentei pagar e não deu. Vocês vão devolver meu dinheiro?"

Começa então a investigação caótica:

  • Quando isso começou?
  • Quantas pessoas foram afetadas?
  • Quantas tentaram de novo depois?
  • Quantas desistiram sem avisar?

A última pergunta nunca tem resposta. Porque quem desiste não reclama. Só vai embora. E você nunca fica sabendo.

O Custo Real (Que Não Aparece na Invoice)

Cada hora de indisponibilidade silenciosa custa:

  1. Transações perdidas: pagamentos que falharam sem notificação
  2. Churn invisível: usuários que tentam, falham, deletam a app
  3. Reputação: "tentei usar mas não funciona"
  4. Culpa distribuída: time gasta horas investigando sem saber por onde começar

No Profissional: Alguém Fica Sabendo no Minuto Um

Contraste isso com um sistema profissional:

A taxa de erro sobe de 0.1% para 2% em pagamentos. No minuto em que isso acontece, uma pessoa recebe um alerta no Slack. Não porque estava olhando a tela. Mas porque o sistema foi construído para reportar o que está acontecendo com ele.

Quinze minutos depois:

  • O problema foi isolado (integração de gateway falha)
  • Uma ação foi tomada (fallback para outro processador)
  • O cliente foi notificado proativamente
  • A taxa de erro voltou a 0.05%

Nenhum cliente reclamou. Nenhuma transação foi perdida. O cliente nem soube que houve um incidente.

Os Três Pilares da Observabilidade Profissional

Essa diferença se resume a três decisões arquiteturais tomadas no planning, antes de uma linha de código em produção:

1️⃣ Logging: O Que Registrar

Não é "registrar tudo". É registrar o que importa:

// ❌ Amador: registra sem contexto
logger.info("Erro ao processar");

// ✅ Profissional: registra com contexto completo
logger.error("Payment processing failed", {
  userId: user.id,
  orderId: order.id,
  amount: order.total,
  provider: "stripe",
  error: error.message,
  timestamp: new Date().toISOString(),
  duration: endTime - startTime,
});

O que registrar:

  • Eventos críticos (pagamentos, autenticação, integrações)
  • Valores de entrada (quanto, quem, quando)
  • Resultado (sucesso/falha/timeout)
  • Tempo decorrido (detecta slowness antes que vire downtime)

2️⃣ Métricas: O Número Que Indica "Algo Mudou"

Um número que você monitora ativamente:

// Taxa de erro em pagamentos
const paymentErrorRate = (failedPayments / totalPayments) * 100;

// Se passar de 1%, algo está errado
if (paymentErrorRate > 1) {
  alert("Payment error rate anomaly detected");
}

Métricas essenciais para SaaS:

  • Taxa de erro por endpoint
  • Latência P95/P99 (não apenas média)
  • Taxa de sucesso de integrações externas
  • Uso de disco/memória
  • Fila de processamento atrasada

3️⃣ Alertas: Quem Fica Sabendo Quando Ultrapassar

Um sistema que não depende de você lembrar de olhar:

// Alerta: taxa de erro acima do normal
if (errorRate > THRESHOLD) {
  notificationService.send({
    to: "devteam",
    channel: "slack", // ou pagerduty, telegram, email
    severity: "high",
    message: `Payment errors spiked to ${errorRate}%`,
    context: errorLogs,
  });
}

Canais que realmente funcionam:

  • Slack: para times pequenos, feedback rápido
  • PagerDuty: para on-call rotativos, escalonamento
  • Sentry: para erros de aplicação com stack trace
  • Email: apenas para alertas não-críticos

O Sintoma Fácil de Reconhecer

Se a sua principal fonte de informação sobre falhas é a caixa de mensagens do seu Instagram, o sistema não está sendo monitorado.

Ele está sendo testado pelos seus clientes.

Essa é a linha divisória. Simples.

Implementando Observabilidade: Começar Hoje

Você não precisa de ferramentas caras para começar. Precisa de decisões claras.

Stack Minimalista (Que Funciona em Produção)

Logging:

npm install winston
# ou pino para melhor performance

Métricas:

npm install prometheus-client
# visualizar no Grafana (free)

Alertas:

Slack webhook + lógica condicional
# ou Sentry para erros automáticos

Implementação Prática (Uma Hora de Trabalho)

1. Setup de logging estruturado:

import winston from "winston";

const logger = winston.createLogger({
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: "error.log", level: "error" }),
    new winston.transports.File({ filename: "combined.log" }),
  ],
});

// Em produção, use serviço como Datadog, LogRocket, ou CloudWatch

2. Métricas de negócio:

// Registre eventos críticos
const recordPayment = async (orderId, amount) => {
  const start = Date.now();
  try {
    const result = await processPayment(orderId, amount);
    logger.info("Payment successful", {
      orderId,
      amount,
      duration: Date.now() - start,
    });
    return result;
  } catch (error) {
    logger.error("Payment failed", {
      orderId,
      amount,
      error: error.message,
      duration: Date.now() - start,
    });
    throw error;
  }
};

3. Alerta simples no Slack:

const alertSlack = async (message, severity = "warning") => {
  await fetch(process.env.SLACK_WEBHOOK_URL, {
    method: "POST",
    body: JSON.stringify({
      text: `🚨 ${severity.toUpperCase()}: ${message}`,
    }),
  });
};

// Usar em qualquer lugar crítico
if (errorCount > threshold) {
  await alertSlack("Payment processing errors spiked", "high");
}

Trade-offs e Decisões

Colecionar Tudo vs. Ser Estratégico

Custo: Logs custam. Armazenagem, processamento, retenção.

Trade-off:

  • Amador: "Vou registrar tudo, depois vejo"
  • Profissional: "Vou registrar eventos críticos por 30 dias, métricas por 1 ano"

Resposta Manual vs. Automática

Tempo de detecção:

  • Amador: 6-8 horas (quando cliente reclama)
  • Profissional: 1 minuto (alerta automático)

Custo humano:

  • Amador: time inteiro investigando, sem contexto
  • Profissional: eng on-call recebe contexto completo em segundos

Conclusão: Uma Decisão, Não Uma Ferramenta

A diferença entre um sistema amador e profissional não é qual ferramenta você usa.

É que você decidiu, antes de entrar em produção:

  1. O que precisa ser registrado quando algo dá errado
  2. Qual número indica que o normal deixou de ser normal
  3. Quem recebe o aviso quando esse número é ultrapassado

Essas três decisões custam uma tarde de trabalho. Salvam semanas de investigação caótica.

E a mais importante: salvam seus clientes de desistir sem avisar.

Próximos Passos

Se seu sistema ainda é descoberto via Instagram DMs:

  1. Hoje: Defina 3 eventos críticos para logar (pagamento, autenticação, integração)
  2. Amanhã: Configure alerta no Slack quando taxa de erro > 1%
  3. Próxima semana: Revise logs de ontem para descobrir outros gargalos invisíveis

Cada minuto que você economiza investigando é um minuto a menos que seu cliente fica sem usar seu produto.

Quer Aprofundar?

Se você está construindo um SaaS ou sistema escalável e quer garantir que nenhuma falha passa despercebida, tenho alguns recursos:

  • Consultoria em Observabilidade: diagnóstico completo do seu sistema
  • Arquitetura Resiliente: design que detecta e recupera de falhas automaticamente

Vamos conversar sobre sua arquitetura →

Gostou? Compartilhe