iTank ideas

PM2 para gestionar y monitorizar procesos Node.js en producción


Aunque arrancar una aplicación Javascript en el entorno Node.js sea tan sencillo como ejecutar el comando:

$ /usr/bin/node /path/myProject.js

esto no nos protege de las caídas derivadas de excepciones de ejecución ni que el programa se ejecute como un servicio automaticamente al inicio del sistema.

PM2 (Advanced, production process manager for Node.JS) es un demonio que mantiene nuestros programas Node.js en ejecución aunque una excepción lo interrumpa y que los ejecuta como servicios que se mentienen operativos tras el reinicio del sistema.

Para instalar pm2 usaremos:

$ npm install pm2 -g

A partir de aquí podemos arrancar nuestra aplicación usando PM2 en lugar de pedírselo a Node

$ pm2 start ruta/proyecto.js

lo que la incluirá en la lista de aplicaciones activas:

$ pm2 list

y la mantendrá viva aunque realizacemos un kill.

Para reiniciar o detener aplicaciones:

$ pm2 restart ruta/proyecto.js
$ pm2 stop ruta/proyecto.js

Para monitorizar procesos desde la consola:

$ pm2 monit

Para desinstalarla
$ pm2 delete

Para hacer seguimiento de los logs de aplicación con el monitor:

$ pm2 log

Una vez tengamos nuestros procesos de producción en funcionamiento, debemos generar el script de inicio del sistema con la orden:
$ pm2 startup

Lo que nos pedirá que ejecutemos un comando personalizado a nuestro entorno:

Y a partir de ahí tendremos nuestros procesos Node ejecutándose al inicio del sistema

Ahora viene la magia: monitorizar tus procesos node en tiempo real a través de la web desde cualquier lugar. Primero activamos la monitorización:

$ pm2 plus

lo que nos proporcionará una URL de acceso al panel de control web:

La opción gratuíta permite monitorización básica de hasta 4 procesos. La opción de suscripción por 39$/mes añade notificaciones, dashboards, métricas, histórico de problemas, logging en tiempo real y acciones remotas de hasta 8 procesos.

Por último, para desenlazar el servidor de la monitorización web usé:

$ pm2 link delete

Me puso sobre la pista https://desarrolloweb.com/articulos/ejecutar-aplicacion-nodejs-pm2.html