Observabilidad de errores de producción
Hacer que a.js:1:4523 vuelva a ser útil
Convertir los fallos de producción en información útil mediante mapas de código fuente cargados, un túnel de Sentry del mismo origen, errores con contexto, filtrado y reproducción de sesiones.
4 min de lecturaPor Abdullah Raheel
Dos formas de perder el fallo
Teníamos dos puntos ciegos independientes. Los errores recibidos señalaban código minificado, como a.js:1:4523, porque faltaban los mapas de código fuente. Otros eventos nunca llegaban porque podían bloquearse las solicitudes directas a sentry.io.
Eran fallos independientes. Los mapas de código fuente determinan si una traza recibida puede recuperar sus símbolos originales. El transporte determina si el evento llega a Sentry. Corregir solo uno todavía deja el incidente ilegible o invisible.
Sube mapas de código fuente sin publicarlos
@sentry/nextjs envolvía la compilación con withSentryConfig. CI proporcionaba SENTRY_AUTH_TOKEN, SENTRY_ORG y SENTRY_PROJECT. El complemento de compilación subía los mapas, ampliaba la carga de archivos del cliente para mejorar las trazas y usaba deleteSourcemapsAfterUpload para que esos mapas no se sirvieran desde la salida pública.
export default withSentryConfig(nextConfig, {
org: process.env.SENTRY_ORG,
project: process.env.SENTRY_PROJECT,
authToken: process.env.SENTRY_AUTH_TOKEN,
sourcemaps: {
disable: process.env.NODE_ENV === 'development',
deleteSourcemapsAfterUpload: true
},
widenClientFileUpload: true,
disableLogger: true,
tunnelRoute: '/t'
})Así, la recuperación de símbolos quedaba dentro de la compilación normal del despliegue. No había un comando independiente de sentry-cli que un ingeniero tuviera que recordar después de publicar una versión.
Usa el origen de la aplicación como transporte
El primer punto de acceso del mismo origen fue /monitoring, pero los bloqueadores todavía lo reconocían. Acorté la ruta a /t. Los eventos del navegador pasaron a dirigirse al origen de la aplicación y el servidor de Next.js los reenviaba a Sentry.
El despliegue gradual original registró una captura completa después de ese cambio. Fue un resultado de aquella ventana de despliegue, no una promesa de que todos los bloqueadores y redes entregarán siempre cada evento.
Una incompatibilidad silenciosa de la cadena de herramientas necesitaba su propia corrección
Next.js 15 trasladó la configuración del navegador a instrumentation-client.ts. Con Turbopack habilitado, el proyecto seguía en Sentry v9 y la carga de mapas de código fuente se detuvo sin un fallo evidente de la aplicación. Migrar a Sentry v10 restauró la ruta de carga compatible.
La aplicación también inicializaba Sentry en los entornos de navegador, servidor y perímetro, y añadió límites de errores globales y por ruta. Recuperar símbolos era una cuestión de compilación; capturar fallos de React, solicitudes y entornos de ejecución era una cuestión independiente de la aplicación.
Que sea legible no significa que sea útil
Una función beforeSend añadía la ruta de la página, información del navegador, tamaño del área visible y una etiqueta de versión de la aplicación. Clasificaba fallos de API, tiempo de espera y red, y filtraba las restricciones conocidas de llamadas de Twilio antes de la ingestión.
Session Replay tomaba muestras del 5% de las sesiones normales y de todas las sesiones con errores en producción. El trazado se ejecutó inicialmente al 100% en preproducción y al 10% en producción, pero se deshabilitó cuando consumió demasiada cuota. El muestreo es un ajuste operativo, no un valor que deba copiarse sin analizarlo.
- Sube mapas privados de código fuente durante la compilación.
- Envía los eventos del navegador mediante un túnel del mismo origen.
- Separa las restricciones esperadas del producto de los fallos de la aplicación.
- Adjunta el contexto de la ruta y la reproducción para que un número de línea legible también incluya el contexto del recorrido del usuario.

