¿Cómo gestionar múltiples microservicios en producción?
Podría ser abrumador administrar una amplia cantidad de servicios en producción, especialmente si de repente uno de ellos falla. Aquí es donde entra PM2, una herramienta realmente esencial que te permitirá gestionar, monitorear y resolver problemas con tus microservicios de manera eficiente y visual.
¿Qué es PM2 y cómo puede ayudarnos?
PM2 es un gestor de procesos para Node.js desarrollado por Keymetrics, enfocado en la monitorización y gestión de procesos. Te brinda la posibilidad de gestionar servicios en producción de manera sencilla, asegurando que se reinicien automáticamente si fallan y permitiéndote acceder a los logs de forma estructurada.
¿Cómo instalar PM2?
Para comenzar a usar PM2, necesitas instalarlo globalmente en tu sistema. Aquí te mostramos cómo hacerlo:
npminstall -g pm2
Windows: Ejecuta la terminal como administrador.
Linux/Mac: Si es necesario, utiliza sudo para instalar.
¿Cómo iniciar y gestionar servicios con PM2?
Una vez instalado, PM2 te permite iniciar servicios y mantenerlos monitoreados. Aquí un ejemplo de cómo iniciar un servicio:
pm2 start app.js
Con pm2 status, puedes ver todos los procesos activos y su estado. Si un servicio se detiene, PM2 se encargará de reiniciarlo automáticamente.
¿Cómo monitorear los logs eficientemente?
Supervisar los logs es crucial para identificar problemas de los servicios. PM2 facilita la visualización de logs de un servicio específico:
pm2 logs 0
Con esto, verás solo los logs del proceso identificado con ID 0. En caso de que los procesos tengan un nombre similar, puede ser necesario renombrar los archivos para diferenciarlos efectivamente.
¿Cómo reiniciar servicios problemáticos?
Si uno de tus servicios encuentra problemas, puedes reiniciarlo individualmente:
pm2 restart [ID-del-servicio]
Esto te permitirá resetear los servicios problemáticos sin afectar a los demás, asegurando el mínimo tiempo de inactividad en producción.
¿Qué más ofrece PM2?
Gestión de memoria: PM2 ofrece gestión avanzada de memoria, evitando que un solo servicio consuma demasiados recursos.
Scripts de inicio automático: Permite configurar scripts que inicien automáticamente al arrancar la máquina.
Logs almacenados: Almacena los logs en archivos para un acceso posterior, evitando la pérdida de datos.
Con este conocimiento, estás listo para usar PM2 en tus proyectos, mejorando la eficacia y la fiabilidad de tus procesos de producción. ¡No te detengas aquí! Continúa explorando herramientas y técnicas que incrementen tu productividad y capacidad de respuesta ante problemas en entornos reales.
Gracias por el aporte, es mejor opción que renombrar los archivos.
Excelente aporte, tenga su like buen hombre :)
Revisando la documentación de pm2 me encontré que se puede crear un archivo de configuración de todas las apis y poderlas levantar o reiniciar:
primero creamos un archivo ecosystem.config.js
Gracias por el aporte!
Aunque me queda la duda. A este archivo de "ecosystem.config.js" lo tendríamos que cambiar de nombre en caso de que trabajemos con otro proyecto donde implementemos pm2?
DIOS, QUE CLASE TAN INCREIBLE!
Tengo una duda, no me había percatado pero si corro los servicios desde pm2, varios de estos truenan al hacer la petición a la api (store) pero si los corro por separado desde la terminal, no ocurre ningun problema. ¿A qué se debe esto profesor?
[](
Lograste solucionarlo?
¿Ya lo resolviste? Yo pienso que debe estar en el código
Me aparecen un montón de líneas de comando en la pantalla que me interrumpen y me impiden escribir.
Cuando le doy a pm2 start...
Lo he solucionando con pm2 delete api/index.js
Y pm2 delete mysql/index.js
Con el ecosystem.config.js que podemos generar con el comando pm2 ecosystem podemos configurar las variables de entorno que gestionamos en el archivo config.js del proyecto.
Podemos declarar sí son variables para usar en desarrollo ó en producción
Luego para cargar las variables usamos pm2 start ecosystem.config.js --env [variable]
Y si tienes variables de entorno con información sensible si pueden ir en el archivo ecosystem.config.js no lo subes a github y solo a tu server, o env vars con info sensible si van siempre en los clásicos .env ?
Un profe decía que node gestionara los procesos de node como que no era tan bueno, que sería mejor buscar alternativas más interesantes como systemd de linux, la cuestión es cómo se aplicaría para los microservicios.
Excelente información sobre PM2
¿Entiendo esta herramienta solo sería útil en caso de montarlos en un servidor único, pero sería útil si usamos contenedores con Kubernetes?
Si levanto 2 instancias de microServicio de post o 2 instancias de mySql y creó un nuevo post ? el post se va a crear 2 veces o pm2 sabe como manejarlo y enviar el request a solo una instancia ?
Tengo una duda con los microservicios, no debería poder consumir cualquier microservicio desde una misma url o puerto? O sea para hacer peticiones a los posts debo hacerlo en el puerto 3002, lo que yo pensaba es que en un archivo en la API principal hacemos la conexión de los microservicios y así solo llamar a una url, porque así como lo estamos haciendo, solo veo diferentes APIS usando una misma BD.
Es que de esta manera abstraes la capa de datos y de red por eso estan separados en diferentes servidores por así decirlo y sí al final el profesor hace un ejemplo en un mismo server con google cloud para consumirlas como dices y con diferentes bases de datos, una de ellas redis.
Muy interesante!! Me gustó mucho para poder gestionar en ambientes tipo PRD y tiene varias funcionalidades más de las que vimos en la clase
last V4.4 pm2
Muy bueno, ya lo habia usado pm2, tiene una consola grafica, incluso la podemos monitorear de forma remota, pero esta plataforma es de pago :-(
tambie se puede crear con
pm2 start src/index.js --name=nombre_microservicio
Magistraaalll!!
Una muy buena herramienta para no volvernos locos con la gestion de los servicios.