Monitoreo de aplicaciones TypeScript: métricas y alertas
En el desarrollo web moderno, el monitoreo de aplicaciones TypeScript no es un lujo, sino una necesidad. Sin él, corres el riesgo de enterarte de una falla solo por los usuarios. En este artículo, analizaremos cómo configurar un monitoreo efectivo para proyectos TypeScript, qué métricas rastrear y cómo configurar alertas para recibir notificaciones sobre problemas antes de que se vuelvan críticos.
¿Por qué es tan importante el monitoreo de aplicaciones TypeScript?
TypeScript, al ser una extensión de JavaScript, se utiliza a menudo para crear sistemas empresariales complejos y soluciones de servidor en Node.js. Sin embargo, la naturaleza dinámica de JavaScript debajo del capó puede provocar errores inesperados en tiempo de ejecución. El monitoreo permite:
- Detectar problemas en una etapa temprana — antes de que afecten a los usuarios.
- Analizar el rendimiento — identificar cuellos de botella en el código.
- Predecir fallos — basándose en las tendencias de las métricas.
- Mejorar la calidad del código — comprender qué módulos son los más "problemáticos".
Métricas clave para aplicaciones TypeScript
Para que el monitoreo sea efectivo, es necesario recopilar las métricas correctas. Las dividiremos en tres grupos principales.
1. Métricas técnicas (método RED)
El enfoque RED (Rate, Errors, Duration) es ideal para microservicios y APIs:
- Rate (frecuencia de solicitudes) — número de solicitudes por segundo (RPS).
- Errors (errores) — porcentaje de errores (4xx, 5xx).
- Duration (tiempo de respuesta) — tiempo de procesamiento de la solicitud (p50, p95, p99).
Ejemplo de recopilación de métricas con la librería prom-client:
import client from 'prom-client';import express from 'express';
const app = express();
// Creamos las métricasconst httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5]});
const httpRequestsTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status_code']});
// Middleware para recopilar métricasapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { const labels = { method: req.method, route: req.path, status_code: res.statusCode }; httpRequestsTotal.inc(labels); end(labels); }); next();});
// Endpoint para Prometheusapp.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.listen(3000, () => console.log('Server running on port 3000'));2. Métricas de negocio
Estas métricas reflejan la salud del negocio:
- Número de transacciones exitosas.
- Tamaño promedio del carrito (para e-commerce).
- Tiempo de respuesta de la base de datos.
- Número de usuarios activos.
Ejemplo de métrica personalizada para rastrear pedidos:
const ordersCreated = new client.Counter({ name: 'orders_created_total', help: 'Total number of orders created', labelNames: ['status']});
// En algún lugar del códigoexport function createOrder(data: OrderData): Order { // lógica de creación del pedido ordersCreated.inc({ status: 'success' }); return order;}3. Métricas de infraestructura
Para aplicaciones Node.js/TypeScript son críticas:
- Uso de memoria (heap, RSS).
- Carga de CPU.
- Número de descriptores de archivo abiertos.
- Número de conexiones activas.
- Recolección de basura (GC).
Ejemplo de recopilación de métricas de memoria:
Blogs
Book Recommendations
Leer también
Trabajo con JSON en C#: análisis y serialización de objetos
Docker y Java: contenedorización de aplicaciones para desarrolladores
¿No coinciden FormControl e Input? Resolvemos el problema de Angular Material
Trabajo con el sistema de archivos en Java: guía completa para principiantes
Pruebas en JavaScript: Unit, Integration, E2E con ejemplos