Surveillance des applications JavaScript : métriques et alertes dans Node.js

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

Introduction : Pourquoi la surveillance est cruciale pour les applications Node.js



Les applications web JavaScript modernes (Node.js) fonctionnent sous forte charge et dans des architectures distribuées. Même un code parfaitement écrit peut échouer en raison de fuites mémoire, de dégradations de performance ou d'erreurs dans les opérations asynchrones. La surveillance des applications JavaScript permet non seulement de détecter un problème mais aussi de le prévenir avant qu'il n'affecte les utilisateurs.



Dans cet article, nous analyserons quelles métriques doivent être suivies, comment configurer la collecte de données à l'aide d'outils populaires (Prometheus, Grafana), et comment organiser un système d'alerte pour Node.js. Tous les exemples de code sont écrits en JavaScript et prêts à être utilisés.



Métriques clés pour les applications Node.js



La surveillance des applications Node.js peut être divisée en trois niveaux : infrastructure, application et métriques métier. Examinons chacun d'eux.



Métriques d'infrastructure

Ces métriques montrent l'état du serveur et de l'environnement d'exécution :

  • CPU et Mémoire (RSS, Heap Total, Heap Used) — fuites mémoire et charge CPU élevée.
  • Délai de la boucle d'événements (Event Loop Lag) — retard de la boucle d'événements (si >50ms, l'application commence à ralentir).
  • Garbage Collection (GC) — fréquence et durée du garbage collection.
  • Descripteurs de fichiers — nombre de fichiers et sockets ouverts.


Métriques applicatives

Montrent comment l'application traite les requêtes :

  • RPS (Requêtes Par Seconde) — nombre de requêtes par seconde.
  • Latence (p50, p95, p99) — délai de réponse.
  • Taux d'erreur — pourcentage d'erreurs (4xx, 5xx).
  • Connexions actives — nombre de connexions WebSocket/HTTP actives.


Métriques métier

Spécifiques à votre application :

  • Nombre d'utilisateurs enregistrés.
  • Vitesse de traitement des paiements.
  • Temps de réponse des API externes.


Collecte des métriques avec Prometheus et Node.js



Prometheus est la norme de facto pour la collecte de métriques dans les infrastructures modernes. Pour Node.js, il existe la bibliothèque prom-client qui permet d'exporter facilement les métriques.



Installation et configuration de prom-client

npm install prom-client express


Créons un serveur basique avec des métriques :

const express = require('express');const client = require('prom-client');const app = express();

// Create a metric registryconst register = new client.Registry();client.collectDefaultMetrics({ register });

// Create a custom histogram for latenciesconst httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5]});register.registerMetric(httpRequestDuration);

// Middleware for measuring latenciesapp.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status_code: res.statusCode }); }); next();});

// Endpoint for metricsapp.get('/metrics', async (req, res) => { res.set('Content-Type', register.contentType); res.end(await register.metrics());});

app.get('/', (req, res) => { res.send('Hello World');});

app.listen(3000, () => console.log('Server running on port 3000'));


Collecte des métriques de la boucle d'événements

Pour surveiller la boucle d'événements, utilisez process.hrtime() ou la bibliothèque event-loop-lag :

const eventLoopLag = new client.Gauge({    name: 'nodejs_event_loop_lag_seconds',    help: 'Event loop lag in seconds'});register.re                

Blogs

Book Recommendations