Aller au contenu

PM2 : journaux et supervision

Fenêtre de terminal
pm2 logs # tous les journaux, en direct
pm2 logs api # une application
pm2 logs api --lines 100 # 100 dernières lignes puis suivi
pm2 logs api --err # erreurs seulement
pm2 logs api --out # sortie standard seulement
pm2 logs api --nostream --lines 50 # affiche puis rend la main
pm2 logs --json # format JSON

Chaque application écrit deux fichiers dans ~/.pm2/logs/ : <nom>-out.log (sortie standard) et <nom>-error.log (erreurs). En mode cluster, les instances écrivent toutes dans ces fichiers (avec merge_logs: true) ou dans des fichiers distincts par instance (<nom>-out-0.log, …).

Fenêtre de terminal
tail -f ~/.pm2/logs/api-error.log
grep -i "error" ~/.pm2/logs/api-out.log | tail
Fenêtre de terminal
pm2 start app.js --name api --log-date-format "YYYY-MM-DD HH:mm:ss"

Ou, dans le fichier ecosystem, log_date_format: 'YYYY-MM-DD HH:mm:ss Z'.

Fenêtre de terminal
pm2 flush # vide tous les fichiers de journaux
pm2 flush api

Sans rotation, les journaux grossissent sans limite. Le module pm2-logrotate s’en charge :

Fenêtre de terminal
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 7
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval '0 0 * * *'
pm2 conf pm2-logrotate
Réglage Sens
max_size Taille à partir de laquelle le fichier est archivé
retain Nombre d’archives conservées
compress Compresse les archives
rotateInterval Rotation planifiée (expression cron)

Autre approche : logrotate du système avec l’option copytruncate sur ~/.pm2/logs/*.log (voir Ubuntu Server : outils utiles).

Fenêtre de terminal
pm2 monit

pm2 monit affiche en direct, dans le terminal, la consommation de processeur et de mémoire par processus, ainsi que les journaux.

Fenêtre de terminal
pm2 show api # détail d'une application
pm2 jlist | python3 -m json.tool | head -40
Indicateur Où le lire Signification
↺ (redémarrages) pm2 list Augmente : plantages répétés
status pm2 list errored : l’application n’a pas pu démarrer
uptime pm2 show Court : redémarrages récents
mem pm2 list Croissance continue : fuite de mémoire
Taille de ~/.pm2/logs du -sh ~/.pm2/logs Journaux non tournés
Fenêtre de terminal
pm2 reset api # remet à zéro les compteurs de redémarrages
#!/bin/bash
# alerte si une application n'est pas « online »
set -euo pipefail
statuts=$(pm2 jlist | python3 -c '
import json, sys
for p in json.load(sys.stdin):
print(p["name"], p["pm2_env"]["status"])
')
echo "$statuts" | awk '$2 != "online" { print "ALERTE : " $1 " est " $2; ko=1 } END { exit ko }'

Planifié par un minuteur systemd ou cron, ce script peut notifier par e-mail ou webhook (voir systemd : minuteurs).

Pour surveiller depuis l’extérieur, une vérification HTTP périodique d’une URL de santé (/sante) reste plus fiable que l’état du processus : un processus peut être online tout en étant bloqué. Exposer cette route dans l’application et la tester avec un outil de supervision.

Les journaux peuvent contenir des données personnelles ou des erreurs détaillées : restreindre les droits du dossier (chmod 700 ~/.pm2) et ne jamais les publier tels quels.

Symptôme Piste
Disque plein Journaux sans rotation : installer pm2-logrotate, pm2 flush
pm2 logs ne montre rien Application qui écrit ailleurs (out_file personnalisé) ou qui ne journalise pas
Journaux mélangés entre instances merge_logs: true regroupe ; sinon un fichier par instance
Pas de date dans les lignes Ajouter log_date_format
pm2 monit illisible Agrandir le terminal ou utiliser pm2 logs et pm2 list
Module pm2-logrotate absent après pm2 update pm2 install pm2-logrotate

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les journaux de PM2 sont des fichiers, indépendants de journald. Pour le service pm2-<utilisateur> lui-même, journalctl -u pm2-<utilisateur> fonctionne de la même façon sur les deux versions.