Métriques Prometheus dans Node.js : la bibliothèque prom-client pour le monitoring

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

Bibliothèque prom-client : Monitoring d'applications Node.js avec Prometheus



Dans le développement web moderne, le monitoring des performances et de l'état des applications est devenu une nécessité. L'une des solutions les plus populaires pour la collecte et l'analyse de métriques est Prometheus — un système open source qui collecte des données sous forme de séries temporelles. Pour l'intégration avec Node.js, il existe la bibliothèque officielle prom-client, qui permet d'exporter facilement des métriques dans un format compréhensible par Prometheus.



Dans cet article, nous allons détailler comment installer et utiliser prom-client, quels types de métriques sont disponibles, et comment les intégrer avec le framework web Express.



Installation et configuration



Pour commencer, installez la bibliothèque via npm :



npm install prom-client


Après l'installation, importez-la dans votre application :



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


Types principaux de métriques



La bibliothèque prom-client prend en charge quatre types principaux de métriques Prometheus :



  • Counter — un compteur qui ne fait qu'augmenter (par exemple, le nombre de requêtes).
  • Gauge — une valeur qui peut aussi bien augmenter que diminuer (par exemple, le nombre de connexions actives).
  • Histogram — un histogramme mesurant la distribution des valeurs (par exemple, le temps de réponse).
  • Summary — une statistique récapitulative, similaire à Histogram, mais avec des quantiles plus précis.


Exemple : Counter (compteur de requêtes)



Créons un compteur pour suivre le nombre total de requêtes HTTP :



const httpRequestsTotal = new prometheus.Counter({  name: 'http_requests_total',  help: 'Total number of HTTP requests',  labelNames: ['method', 'route', 'status']});

// Middleware pour compter les requêtesapp.use((req, res, next) => { res.on('finish', () => { httpRequestsTotal.inc({ method: req.method, route: req.path, status: res.statusCode }); }); next();});


Exemple : Gauge (connexions actives)



Gauge est pratique pour suivre l'état actuel, par exemple le nombre d'utilisateurs actifs :



const activeUsers = new prometheus.Gauge({  name: 'active_users',  help: 'Number of active users'});

app.get('/login', (req, res) => { activeUsers.inc(); // Augmente lors de la connexion res.send('Logged in');});

app.get('/logout', (req, res) => { activeUsers.dec(); // Diminue lors de la déconnexion res.send('Logged out');});


Exemple : Histogram (temps de réponse)



Histogram permet de mesurer le temps nécessaire au traitement des requêtes :



const httpRequestDuration = new prometheus.Histogram({  name: 'http_request_duration_seconds',  help: 'Duration of HTTP requests in seconds',  labelNames: ['method', 'route'],  buckets: [0.1, 0.5, 1, 2, 5] // Limites des compartiments en secondes});

app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.path }); }); next();});


Export des métriques pour Prometheus



Pour que Prometheus puisse collecter les données, il faut créer un endpoint (généralement /metrics) qui retourne toutes les métriques enregistrées :



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

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


Métriques personnalisées avec des labels



Vous pouvez ajouter des labels (étiquettes) pour un filtrage plus détaillé. Par exemple, séparons les métriques par versions d'API :



const apiCalls = new prometheus.Counter({                    

Recommendations