Surveillance Node.js : outils et bibliothèques pour le suivi des performances

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Surveillance des applications JavaScript (Node.js) : aperçu complet des outils et des pratiques



Développer avec Node.js est puissant, mais sans une surveillance adéquate, votre application peut se transformer en « boîte noire ». Dans cet article, nous allons passer en revue les outils et bibliothèques clés qui vous aideront à suivre l'état de vos applications JavaScript côté serveur, à identifier les goulots d'étranglement et à prévenir les pannes.



Pourquoi une surveillance Node.js est-elle nécessaire ?

Node.js fonctionne avec une boucle d'événements (Event Loop) monothread, donc toute opération bloquante (par exemple, une boucle lourde ou une lecture de fichier synchrone) peut paralyser l'ensemble de l'application. Sans surveillance, vous risquez :

  • De manquer une fuite mémoire — le GC ne suit pas, l'application plante.
  • De ne pas remarquer l'augmentation du temps de réponse — les utilisateurs s'en vont.
  • De perdre le contrôle des erreurs — les rejections non gérées tuent le processus.


1. Outils intégrés à Node.js

Commençons par ce qui existe déjà dans le noyau. Node.js fournit les modules process et perf_hooks pour la collecte de base des métriques.

// Exemple : collecte des métriques mémoire et du temps de réponseconst { performance, PerformanceObserver } = require('perf_hooks');

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

// Mesure du temps d'exécution d'une fonctionperformance.mark('start');// ... votre code ...performance.mark('end');performance.measure('myFunction', 'start', 'end');

// Surveillance de la mémoiresetInterval(() => { const memory = process.memoryUsage(); console.log(`RSS : ${memory.rss}, Heap : ${memory.heapUsed}`);}, 5000);


2. PM2 — gestionnaire de processus avec surveillance

PM2 est la norme de facto pour la production Node.js. Il gère non seulement les processus, mais fournit également une surveillance intégrée via la commande pm2 monit.

  • Redémarrage automatique en cas de plantage du processus.
  • Collecte de métriques : CPU, mémoire, nombre de requêtes.
  • Journalisation stdout/stderr.
  • Mode cluster pour une utilisation maximale des cœurs.
// Installation et lancementnpm install pm2 -gpm2 start app.js --name "my-app" --instances max

// Surveillance intégréepm2 monit

// Export des métriques en JSONpm2 jlist > metrics.json

Pour une surveillance avancée, utilisez pm2-metrics — un plugin qui envoie les données à Prometheus.



3. Clinic.js — diagnostic des performances

Clinic.js est un ensemble d'outils de NearForm pour le profilage Node.js. Il comprend trois utilitaires :

  • Clinic Doctor — diagnostic général (Event Loop, GC, I/O).
  • Clinic Bubbleprof — analyse des opérations asynchrones.
  • Clinic Flame — flame graphs pour trouver les fonctions coûteuses.
// Installationnpm install -g clinic

// Lancement avec test de chargeclinic doctor -- node app.js

// Ensuite, dans un autre terminal :autocannon localhost:3000

// Après l'arrêt, un rapport HTML avec visualisation s'ouvrira

Clinic.js est particulièrement utile pour identifier les problèmes liés à l'Event Loop (latence élevée, pauses GC fréquentes).



4. Prometheus + Node.js — métriques personnalisées

Prometheus est la norme pour la collecte de métriques dans une architecture microservices. Pour Node.js, utilisez la bibliothèque prom-client.

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

// Création d'un compteur de requêtesconst httpRequestsTotal = new prometheus.Counter({ name: 'http_requests_total', help: 'Nombre total de requêtes HTTP', labelNames: ['method', 'route', 'status']});

// Histogramme du temps de réponseconst httpRequestDuration = new prometheus.Histogram({ name: 'http

Recommendations