Surveillance des applications JavaScript (Node.js) : Outils et bibliothèques
La surveillance des applications Node.js est une tâche cruciale pour maintenir la stabilité, les performances et la disponibilité des services. Sans collecte constante de métriques, suivi des erreurs et profilage du code, vous risquez de rencontrer des pannes inattendues, des ralentissements et des fuites mémoire. Dans cet article, nous examinerons les meilleurs outils et bibliothèques pour la surveillance de Node.js, y compris les solutions open source populaires.
Pourquoi la surveillance Node.js est-elle nécessaire ?
Node.js est un environnement asynchrone qui excelle dans les opérations d'E/S, mais présente des particularités nécessitant une attention :
- Modèle monothread : un code bloquant peut arrêter tout le processus.
- Fuites mémoire : dues aux fermetures et à une mauvaise gestion des références.
- Event Loop : ses retards (lag) affectent directement la vitesse de réponse.
- Erreurs de code asynchrone : les promesses non traitées peuvent passer inaperçues.
Catégories principales d'outils
Pour une surveillance complète de votre application Node.js, vous aurez besoin d'outils de trois catégories :
- Collecte de métriques (Metrics) : CPU, mémoire, requêtes par seconde, temps de réponse.
- Profilage (Profiling) : analyse des goulots d'étranglement et de l'event loop.
- Suivi des erreurs (Error Tracking) : collecte et agrégation automatiques des exceptions.
1. Prometheus + prom-client (Collecte de métriques)
Prometheus est la norme de facto pour la collecte de métriques dans l'infrastructure moderne. Pour Node.js, on utilise la bibliothèque prom-client. Elle permet de créer des histogrammes, des compteurs et des métriques de type gauge.
Installation :
npm install prom-client expressExemple d'exportation de métriques (server.js) :
const express = require('express');const client = require('prom-client');const app = express();
// Création d'un histogramme pour le temps de réponseconst httpRequestDurationMicroseconds = new client.Histogram({ name: 'http_request_duration_ms', help: 'Duration of HTTP requests in ms', labelNames: ['method', 'route', 'status'], buckets: [50, 100, 200, 500, 1000, 2000]});
// Middleware pour mesurer le tempsapp.use((req, res, next) => { const end = httpRequestDurationMicroseconds.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status: res.statusCode }); }); next();});
// Point de terminaison pour Prometheusapp.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.get('/', (req, res) => res.send('Hello World!'));app.listen(3000, () => console.log('Server running on port 3000'));Vous pouvez maintenant configurer Prometheus pour collecter les métriques depuis /metrics et les visualiser dans Grafana.
2. PM2 (Gestionnaire de processus et surveillance de base)
PM2 n'est pas seulement un gestionnaire de processus pour Node.js, mais aussi un système de surveillance intégré. Il permet de suivre l'état des processus, de les redémarrer en cas de panne et de collecter des métriques de base.
Installation :
npm install pm2 -gLancement de l'application avec surveillance :
pm2 start server.js --name "my-app"pm2 monit # Ouvrir le tableau de bord de surveillanceExportation des métriques vers Prometheus (via pm2-metrics) :
npm install pm2-metricspm2 start server.js --name "my-app"pm2-metrics --port 9200 # Ouvre le point de terminaison /metrics3. Clinic.js (Profilage et diagnostic)
Clinic.js est un ensemble d'outils