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:

  1. Um processo daemon roda na sua maquina (200-500MB de RAM)
  2. Uma biblioteca especifica da linguagem instrumenta seu codigo
  3. A biblioteca envia dados de tracing para o daemon local
  4. 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

CustoCom Agente (Datadog/New Relic)Sem Agente (SDK leve)
Overhead de memoria300-500MB (daemon) + 50-100MB (lib)< 5MB
Penalidade de cold start+200-800ms+5-15ms
Variaveis de ambiente10-15 necessarias1 (API key)
Tempo de setup2-4 horas5 minutos
Custo mensal (equipe pequena)$71-300+/host/mes$0-29/mes
Funciona no Vercel serverlessParcialmenteCompletamente

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:

  1. Roda dentro da sua função, não como um processo separado
  2. Aproveita os spans que o Next.js já emite para os route handlers depois que você registra o OpenTelemetry
  3. Exporta os dados de forma assíncrona, fora do caminho da resposta
  4. Sobrevive cold starts serverless porque faz parte da sua função
  5. 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
# Deploy

Seus 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.