Monitoreo de Node.js: herramientas y bibliotecas para rastrear el rendimiento

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

Monitoreo de aplicaciones JavaScript (Node.js): revisión completa de herramientas y prácticas



Desarrollar en Node.js es potente, pero sin un monitoreo adecuado, su aplicación puede convertirse en una «caja negra». En este artículo, analizaremos las herramientas y bibliotecas clave que le ayudarán a rastrear el estado de las aplicaciones JavaScript del lado del servidor, identificar cuellos de botella y prevenir fallos.



¿Por qué es necesario el monitoreo de Node.js?

Node.js funciona con un Event Loop de un solo hilo, por lo que cualquier operación bloqueante (por ejemplo, un bucle pesado o una lectura síncrona de archivo) puede paralizar toda la aplicación. Sin monitoreo, corre el riesgo de:

  • Pasar por alto una fuga de memoria — el GC no puede manejarla, la aplicación falla.
  • No notar el aumento del tiempo de respuesta — los usuarios se van.
  • Perder el control sobre los errores — los rechazos no manejados matan el proceso.


1. Herramientas integradas de Node.js

Empecemos con lo que ya está en el núcleo. Node.js proporciona los módulos process y perf_hooks para la recopilación básica de métricas.

// Ejemplo: recopilación de métricas de memoria y tiempo de respuestaconst { performance, PerformanceObserver } = require('perf_hooks');

// Monitoreo del Event Loopconst obs = new PerformanceObserver((items) => { const entry = items.getEntries()[0]; console.log(`Retardo del Event Loop: ${entry.duration}ms`);});obs.observe({ entryTypes: ['function'] });

// Medición del tiempo de ejecución de una funciónperformance.mark('start');// ... su código ...performance.mark('end');performance.measure('myFunction', 'start', 'end');

// Monitoreo de memoriasetInterval(() => { const memory = process.memoryUsage(); console.log(`RSS: ${memory.rss}, Heap: ${memory.heapUsed}`);}, 5000);


2. PM2 — gestor de procesos con monitoreo

PM2 es el estándar de facto para producción en Node.js. No solo gestiona procesos, sino que también proporciona monitoreo integrado a través del comando pm2 monit.

  • Reinicio automático ante una caída del proceso.
  • Recopilación de métricas: CPU, memoria, número de solicitudes.
  • Registro de stdout/stderr.
  • Modo Cluster para máxima utilización de núcleos.
// Instalación y ejecuciónnpm install pm2 -gpm2 start app.js --name "my-app" --instances max

// Monitoreo integradopm2 monit

// Exportación de métricas a JSONpm2 jlist > metrics.json

Para monitoreo avanzado, use pm2-metrics — un plugin que envía datos a Prometheus.



3. Clinic.js — diagnóstico de rendimiento

Clinic.js es un conjunto de herramientas de NearForm para la creación de perfiles de Node.js. Incluye tres utilidades:

  • Clinic Doctor — diagnóstico general (Event Loop, GC, I/O).
  • Clinic Bubbleprof — análisis de operaciones asíncronas.
  • Clinic Flame — gráficos de llama para encontrar funciones críticas.
// Instalaciónnpm install -g clinic

// Ejecución con pruebas de cargaclinic doctor -- node app.js

// Luego, en otra terminal:autocannon localhost:3000

// Tras la detención, se abrirá un informe HTML con visualización

Clinic.js es especialmente útil para identificar problemas con el Event Loop (alta latencia, pausas frecuentes del GC).



4. Prometheus + Node.js — métricas personalizadas

Prometheus es el estándar para la recopilación de métricas en arquitecturas de microservicios. Para Node.js, use la biblioteca prom-client.

const prometheus = require('prom-client');

// Crear un contador de solicitudesconst httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'Número total de solicitudes HTTP', labelNames: ['method', 'route', 'status']});

// Histograma de tiempo de respuestaconst httpRequestDuration = new prometheus.Histogram({ name: 'http

Recommendations