Voce acabou de fazer deploy do seu app Next.js no Vercel. Seu tech lead diz que voce precisa de monitoramento. Voce pesquisa "Next.js APM" e encontra o guia de setup do Datadog.
Passo 1: Instalar dd-trace. Passo 2: Instalar o Datadog Agent no seu servidor. Passo 3: Configurar datadog.yaml com 47 opcoes. Passo 4: Configurar trace collection. Passo 5: Configurar log forwarding. Passo 6: Perceber que o Datadog Agent precisa de um servidor, e voce esta no Vercel.
Voce nao tem um servidor. Voce tem funcoes serverless. O agente nao tem onde viver.
O que os agentes APM realmente fazem (e custam)
Um agente APM e um processo separado que roda ao lado da sua aplicacao. O agente do Datadog, o daemon do New Relic, o OneAgent da Dynatrace, todos seguem o mesmo padrao:
- Um processo daemon roda na sua maquina (200-500MB de RAM)
- Uma biblioteca especifica da linguagem instrumenta seu codigo
- A biblioteca envia dados de tracing para o daemon local
- O daemon agrupa, comprime e reenvia os dados para a nuvem do vendor
Essa arquitetura fazia sentido quando todos rodavam em instancias EC2 ou pods Kubernetes. Ela quebra em tres cenarios que developers Next.js enfrentam constantemente:
Problema 1: Serverless nao tem maquina host
No Vercel, Netlify ou AWS Lambda, nao existe servidor persistente. Cada invocacao de API route e uma funcao isolada. O daemon do agente nao tem onde rodar.
Problema 2: Cold starts pioram
Bibliotecas APM precisam inicializar quando sua funcao inicia. Com dd-trace, isso adiciona ~245ms a cada cold start, 80% a mais de tempo de inicializacao em uma funcao que normalmente inicia em 300ms.
Problema 3: Complexidade de configuracao
Um setup tipico do Datadog para Next.js requer 10+ variaveis de ambiente. Erre uma e voce tem dados parciais. Configure uma errado e recebe uma fatura de $2,000 por excesso de traces.
O imposto do agente: comparacao
| Custo | Com Agente (Datadog/New Relic) | Sem Agente (SDK leve) |
|---|---|---|
| Overhead de memoria | 300-500MB (daemon) + 50-100MB (lib) | < 5MB |
| Penalidade de cold start | +200-800ms | +5-15ms |
| Variaveis de ambiente | 10-15 necessarias | 1 (API key) |
| Tempo de setup | 2-4 horas | 5 minutos |
| Custo mensal (equipe pequena) | $71-300+/host/mes | $0-29/mes |
| Funciona no Vercel serverless | Parcialmente | Completamente |
Como e o monitoramento sem agentes
Em vez de daemon + biblioteca + pipeline de collectors, você tem instrumentação leve que roda dentro do processo da sua aplicação. Um setup neutro com OpenTelemetry:
// instrumentation.ts
import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel({ serviceName: 'my-nextjs-app' })
}Sem daemon, sem arquivo de config do agente, sem 10 variáveis de ambiente proprietárias. Um setup assim:
- Roda dentro da sua função, não como um processo separado
- Aproveita os spans que o Next.js já emite para os route handlers depois que você registra o OpenTelemetry
- Exporta os dados de forma assíncrona, fora do caminho da resposta
- Sobrevive cold starts serverless porque faz parte da sua função
- Envia para qualquer backend compatível com OTLP, sem prender você a um fornecedor
Como funciona por dentro
Se preferir montar seu próprio collector mínimo, o padrão usa o hook instrumentation.ts do Next.js 13.2+ para se conectar ao lifecycle de requests. Usa diagnostics_channel do Node.js, sem monkey-patching, sem reescrever modulos, sem conflitos de versao.
As metricas sao armazenadas em buffer na memoria e enviadas em batches a cada 10 segundos. Se o endpoint de monitoramento estiver fora do ar, seu app continua funcionando normalmente.
O que voce recebe sem o agente
Com um setup dentro do processo (OpenTelemetry para o backend que você escolher, ou um collector próprio), você pode rastrear cada API route:
- Percentis de latenciaP50, P95, P99 por endpoint
- Taxas de erroporcentagem de 4xx e 5xx por rota
- Throughputrequests por minuto
- Tracking de cold startsfrequencia e impacto na latencia
- Alertaslimites de erro e latência no seu backend, enviados para Slack ou email
Quando voce realmente precisa de um agente
Para ser honesto, agentes nem sempre estao errados. Voce precisa de um agente APM completo se:
- Roda em Kubernetes com 50+ microservicos e precisa de distributed tracing
- Precisa de profiling profundo de CPU e memoria
- Compliance exige (SOC 2, HIPAA)
- Tem uma equipe de plataforma dedicada a observabilidade
Se nada disso se aplica, se voce e uma equipe de 1 a 15 developers fazendo um SaaS em Next.js, voce nao precisa de um agente.
Migracao: remover seu agente em 10 minutos
# Remove o agente
npm uninstall dd-trace # ou newrelic, ou @dynatrace/oneagent
# Instala o OpenTelemetry
npm install @vercel/otel @opentelemetry/api
# Adiciona registerOTel() ao instrumentation.ts
# Configura OTEL_EXPORTER_OTLP_ENDPOINT apontando para o seu backend
# DeploySeus cold starts acabaram de melhorar 200-800ms. Seu uso de memoria diminuiu. E voce ainda tem visibilidade completa de cada API route.
Resumindo
Sem agente. Sem daemon. Sem arquivo de config de 47 opções.
Um npm install. Algumas linhas no instrumentation.ts. Cada API route visível.
