Seu /health responde 200 e o cliente ainda vê erro no checkout
Semana passada caí num caso clássico: o endpoint de health check de uma API respondendo 200 OK redondo enquanto os clientes viam erro na hora de pagar. O monitoramento estava todo verde. O problema não estava no servidor — estava no que o health check não olhava.
O /health que a maioria escreve é raso:
GET /health -> 200 {"status":"ok"}
Ele só prova que o processo subiu e responde HTTP. Não toca no banco, não toca no gateway de pagamento, não toca na fila. É o pior tipo de teste: o que passa sempre.
Um health check útil é o deep check — ele exercita as dependências críticas e degrada o status quando alguma falha:
GET /health/deep
- SELECT 1 no Postgres (timeout 500ms)
- ping no gateway de pagamento (timeout 800ms)
- LLEN na fila de pedidos (alerta se > N)
-> 200 se tudo ok, 503 se alguma dependência crítica falha
Só que deep check ainda é você perguntando pro sistema se ele está bem. O que pega os problemas que o cliente sente de verdade é medir sintoma:
- Taxa de erro: % de respostas 5xx acima de um limite (ex: 2% em 5 min) vira alerta.
- p95, não média: a média esconde o cliente que esperou 8s. Alerte no percentil 95.
- Teste sintético: um robô refazendo o caminho real (login -> carrinho -> pagar em sandbox) a cada minuto.
Dá pra montar o sintético mais burro possível com cron + curl + webhook:
# a cada minuto: se o deep-check falhar, avisa no canal
* * * * * curl -fsS -m 10 https://api.exemplo.com/health/deep || notificar_slack "deep-check falhou"
(o notificar_slack é um script de uma linha que chama o webhook do seu canal)
Não é caro nem exótico. Datadog, Grafana e Prometheus fazem isso muito melhor, mas o curl no cron já tira você do escuro. O erro quase nunca é técnico — é de prioridade: ninguém configura o alerta porque "o servidor estava no ar".
Regra que levo comigo: se o seu único alerta é "servidor não responde", o seu cliente é o seu sistema de monitoramento.
Versão completa no blog: https://revin.com.br/pt/blog/quem-descobriu-a-queda-primeiro