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.jsonPour 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'ouvriraClinic.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 Aussi dans la bibliothèque
Envoi d'email en Swift (iOS/macOS) : MFMailComposeViewController et SMTP
Qt pour C++ : guide complet avec exemples
Travailler avec Apache Kafka en Go (Golang) : bibliothèques et exemples
Configuration d'applications en C++ : bibliothèques et outils pour un paramétrage flexible