Monitoreo de aplicaciones JavaScript: métricas y alertas en Node.js

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Introducción: Por qué la monitorización es crítica para aplicaciones Node.js



Las aplicaciones web modernas en JavaScript (Node.js) operan bajo alta carga y arquitecturas distribuidas. Incluso el código perfectamente escrito puede fallar debido a fugas de memoria, caídas de rendimiento o errores en operaciones asíncronas. La monitorización de aplicaciones JavaScript permite no solo detectar el problema, sino también prevenirlo antes de que afecte a los usuarios.



En este artículo analizaremos qué métricas deben rastrearse, cómo configurar la recopilación de datos con herramientas populares (Prometheus, Grafana) y cómo organizar un sistema de alertas para Node.js. Todos los ejemplos de código están escritos en JavaScript y listos para usar.



Métricas clave para aplicaciones Node.js



La monitorización de aplicaciones Node.js se puede dividir en tres niveles: infraestructura, aplicación y métricas de negocio. Veamos cada uno de ellos.



Métricas de infraestructura

Estas métricas muestran el estado del servidor y el entorno de ejecución:

  • CPU y Memoria (RSS, Heap Total, Heap Used) — fugas de memoria y alta carga del procesador.
  • Event Loop Lag — retardo del bucle de eventos (si >50ms, la aplicación comienza a ralentizarse).
  • Garbage Collection (GC) — frecuencia y duración de la recolección de basura.
  • File Descriptors — número de archivos y sockets abiertos.


Métricas de aplicación

Muestran cómo la aplicación procesa las solicitudes:

  • RPS (Requests Per Second) — número de solicitudes por segundo.
  • Latencia (p50, p95, p99) — retardo de respuesta.
  • Error Rate — porcentaje de errores (4xx, 5xx).
  • Active Connections — número de conexiones WebSocket/HTTP activas.


Métricas de negocio

Específicas de su aplicación:

  • Número de usuarios registrados.
  • Velocidad de procesamiento de pagos.
  • Tiempo de respuesta de APIs externas.


Recopilación de métricas con Prometheus y Node.js



Prometheus es el estándar de facto para la recopilación de métricas en infraestructura moderna. Para Node.js existe la biblioteca prom-client, que permite exportar métricas fácilmente.



Instalación y configuración de prom-client

npm install prom-client express


Creemos un servidor básico con métricas:

const express = require('express');const client = require('prom-client');const app = express();

// Creamos un registro de métricasconst register = new client.Registry();client.collectDefaultMetrics({ register });

// Creamos un histograma personalizado para latenciasconst 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]});register.registerMetric(httpRequestDuration);

// Middleware para medir latenciasapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status_code: res.statusCode }); }); next();});

// Endpoint para métricasapp.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics());});

app.get('/', (req, res) => { res.send('Hello World');});

app.listen(3000, () => console.log('Server running on port 3000'));


Recopilación de métricas del Event Loop

Para monitorear el bucle de eventos usamos process.hrtime() o la biblioteca event-loop-lag:

const eventLoopLag = new client.Gauge({    name: 'nodejs_event_loop_lag_seconds',    help: 'Event loop lag in seconds'});register.re                

Blogs

Book Recommendations