Gérer, monitorer et déployer des applications Node.js en production avec PM2 — process manager, clusters, logs, déploiement automatisé et survie aux redémarrages.
Une app en production que vous ne pouvez pas observer est un problème en attente de survenir. PM2 centralise les logs et donne un dashboard temps réel — sans installer d'outil externe.
Par défaut, PM2 stocke tous les logs dans ~/.pm2/logs/ :
~/.pm2/logs/
├── api-out.log # stdout de l'app "api"
├── api-error.log # stderr de l'app "api"
├── worker-out.log
└── worker-error.logEn mode cluster avec merge_logs: false (défaut) :
~/.pm2/logs/
├── api-out-0.log # worker 0
├── api-out-1.log # worker 1
├── api-error-0.log
└── api-error-1.logAvec merge_logs: true dans ecosystem.config.js, tout est dans un seul fichier par type. Beaucoup plus pratique pour grep et tail.
# Toutes les apps, en temps réel
pm2 logs
# Une app spécifique
pm2 logs api
# N dernières lignes
pm2 logs api --lines 200
# Erreurs uniquement
pm2 logs api --err
# Désactiver la couleur (pour redirection)
pm2 logs api --no-color > debug.txtChaque ligne est préfixée avec le nom de l'app et le timestamp. En mode cluster, le préfixe inclut l'ID du worker : api-0, api-1.
pm2 monitInterface interactive divisée en trois zones :
Naviguez avec les flèches. Quittez avec q. Aucune installation supplémentaire nécessaire.
Sans rotation, les fichiers logs grossissent jusqu'à remplir le disque. PM2 a un module officiel pour ça :
pm2 install pm2-logrotateConfiguration :
# Taille max avant rotation (défaut : 10M)
pm2 set pm2-logrotate:max_size 50M
# Nombre de fichiers à conserver (défaut : 30)
pm2 set pm2-logrotate:retain 7
# Compression des anciens logs
pm2 set pm2-logrotate:compress true
# Heure de rotation (format cron, défaut : minuit)
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'Vérifier la configuration active :
pm2 conf pm2-logrotateAprès configuration, pm2-logrotate tourne en tant que module PM2 et gère automatiquement la rotation. Sur un VPS avec peu d'espace disque, retain: 3 et max_size: 20M suffisent pour la plupart des projets.
Dans ecosystem.config.js, vous pouvez rediriger les logs vers n'importe quel dossier :
{
name: 'api',
script: './index.js',
out_file: '/var/log/myapp/api-out.log',
error_file: '/var/log/myapp/api-error.log',
log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
merge_logs: true,
}Assurez-vous que l'utilisateur qui lance PM2 a les droits d'écriture sur le dossier cible.
Pour les apps très verboseuses où vous gérez vous-même les logs (winston, pino vers un service externe) :
{
out_file: '/dev/null',
error_file: '/dev/null',
}PM2 propose un dashboard web payant (PM2 Plus / KeyMetrics). Pour un projet perso ou une petite équipe, ça n'est pas nécessaire. pm2 monit + des logs bien configurés couvrent 95% des besoins.
Si vous voulez un monitoring plus sérieux sans coût, combinez PM2 avec un stack Grafana + Loki pour les logs et les métriques — mais c'est une infrastructure à part entière.
Pour recevoir une notification quand une app crashe :
pm2 install pm2-slack
pm2 set pm2-slack:slack_url https://hooks.slack.com/services/VOTRE_WEBHOOKEnvoie un message Slack à chaque crash ou redémarrage. Remplace avantageusement les vérifications manuelles régulières.
Les logs sont gérés et ne rempliront plus le disque. Chapitre suivant : rendre PM2 persistant au reboot du serveur.