Monitoreo de aplicaciones TypeScript: de errores a rendimiento
El monitoreo de aplicaciones TypeScript es un conjunto de prácticas y herramientas que garantizan la observabilidad (observability) del sistema en tiempo real. A diferencia del simple registro, el monitoreo profesional incluye la recopilación de métricas, el rastreo de solicitudes, la agregación de errores y la notificación automática. Para TypeScript, que funciona tanto en el servidor (Node.js) como en el navegador, es fundamental contar con un sistema de observación unificado. En este artículo, analizaremos las herramientas clave y ejemplos de su integración.
¿Por qué monitorear aplicaciones TypeScript?
TypeScript se compila a JavaScript, lo que impone particularidades en la depuración. El código fuente con tipos se convierte en JS dinámico, y los errores de tipo pueden manifestarse solo en tiempo de ejecución. Sin monitoreo, corres el riesgo de:
- Pasar por alto un
TypeErroroReferenceErroren producción - No notar la degradación del rendimiento (solicitudes lentas, fugas de memoria)
- Perder el contexto del error (stack trace, datos del usuario, entorno)
Componentes principales de un sistema de monitoreo
El stack moderno de monitoreo se basa en tres pilares: logs, métricas (metrics) y trazas (traces). Para aplicaciones TypeScript, veremos bibliotecas específicas:
1. Sentry — el rey del seguimiento de errores
Sentry es una plataforma SaaS para el monitoreo de errores y rendimiento. Para TypeScript, están disponibles los paquetes oficiales @sentry/node y @sentry/react. Captura automáticamente excepciones, recopila stack traces y contexto.
Instalación:
npm install @sentry/node @sentry/tracingInicialización básica en Node.js:
import * as Sentry from '@sentry/node';import { ProfilingIntegration } from '@sentry/profiling-node';
Sentry.init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0', integrations: [new ProfilingIntegration()], tracesSampleRate: 1.0, // frecuencia de recopilación de trazas (0-1) profilesSampleRate: 1.0, // perfilado de rendimiento});
// Llamada manual en caso de errorapp.get('/api/users', async (req, res) => { try { const users = await getUsers(); res.json(users); } catch (error) { Sentry.captureException(error); res.status(500).send('Internal Server Error'); }});Ventajas:
- Vinculación automática de errores con versiones
- Soporte para source maps en TypeScript
- Rendimiento: monitoreo de transacciones lentas
2. OpenTelemetry — estándar de observabilidad
OpenTelemetry (OTel) es un estándar abierto para la recopilación de telemetría. Para TypeScript se utiliza el paquete @opentelemetry/sdk-node. OTel permite recopilar trazas y métricas, y luego enviarlas a cualquier sistema (Jaeger, Prometheus, Datadog).
Ejemplo de integración con Express:
import { NodeSDK } from '@opentelemetry/sdk-node';import { getNodeAutoInstrumentations } from '@opentelemetry/instrumentation-node';
const sdk = new NodeSDK({ instrumentations: [getNodeAutoInstrumentations()], // el exportador se puede configurar para OTLP o consola});
sdk.start();
// Toda la lógica de Express se rastrea automáticamenteimport express from 'express';const app = express();app.get('/data', (req, res) => { res.json({ status: 'ok' });});OpenTelemetry instrumenta automáticamente bibliotecas populares: Express, MongoDB, Redis, gRPC. Esto proporciona una imagen completa del recorrido de una solicitud a través de los servicios.
3. Prometheus + Grafana — métricas y visualización
Para la recopilación de métricas (RPS, latencia, errores) en TypeScript se utiliza la bibl