Capítulo 306 de 456
instrumentation.ts|js na raiz do projeto exporta uma função register() chamada uma única vez quando uma nova instância do servidor Next.js sobe, ideal pra plugar monitoramento/logging (ex.: OpenTelemetry) antes do servidor aceitar requests.
instrumentation.ts|js na raiz (ou dentro de src/ se usado), nunca dentro de app ou pages.register(): roda uma vez por instância de servidor, e precisa completar antes do servidor ficar pronto pra requests.register: recomenda-se await import(...) dentro da função, não no topo do arquivo, pra colocalizar side effects.NEXT_RUNTIME: env var ('nodejs' ou 'edge') usada pra importar condicionalmente código específico de runtime, já que register roda em todos os ambientes.pageExtensions: se customizado, o nome do arquivo instrumentation precisa acompanhar a extensão configurada.import { registerOTel } from '@vercel/otel'
export function register() {
registerOTel('next-app')
}
@vercel/otel.export async function register() {
if (process.env.NEXT_RUNTIME === 'nodejs') {
await import('./instrumentation-node')
}
if (process.env.NEXT_RUNTIME === 'edge') {
await import('./instrumentation-edge')
}
}
await import(...) dentro de register().NEXT_RUNTIME: código Node.js-only importado sem guarda quebra em runtime Edge.register() é o único hook garantido a rodar antes do servidor aceitar tráfego.instrumentation.ts na raiz (ou src/), nunca dentro de pages/app.NEXT_RUNTIME pra separar código Node.js de Edge dentro do mesmo register.instrumentation-client.js|ts é o equivalente client-side desse conceito.