monitorer une application node.js avec prometheus et grafana : guide complet
24/09/2025
Dans un environnement de production, garantir la stabilité et la performance de votre service Node.js est crucial. Grâce à Prometheus pour la collecte de métriques et Grafana pour la visualisation, vous disposerez d’une observabilité complète. Ce guide technique détaille chaque étape pour monitorer une application Node.js avec Prometheus et Grafana.
monitorer une application node.js avec prometheus et grafana
Prometheus (v2.40) est un système open-source de collecte de métriques time-series. Grafana (v10.1) se connecte à ces données et propose des tableaux de bord personnalisés. Ensemble, ils forment une chaîne de monitoring puissante pour anticiper les anomalies et améliorer le SLA de vos APIs.
1. Instrumenter votre application Node.js
Commencez par exposer des métriques métier et système :
- Installez le client Prometheus :
npm install prom-client --save
- Ajoutez un middleware pour exposer l’endpoint
/metrics
:
const express = require('express');
const client = require('prom-client');
const app = express();
const collectDefaultMetrics = client.collectDefaultMetrics;
collectDefaultMetrics({ timeout: 5000 });
const httpRequestDurationMicroseconds = new client.Histogram({
name: 'http_request_duration_ms',
help: 'Duration of HTTP requests in ms',
labelNames: ['method', 'route', 'status_code'],
buckets: [50, 100, 200, 500, 1000]
});
app.use((req, res, next) => {
const end = httpRequestDurationMicroseconds.startTimer();
res.on('finish', () => {
end({ method: req.method, route: req.path, status_code: res.statusCode });
});
next();
});
app.get('/metrics', async (req, res) => {
res.set('Content-Type', client.register.contentType);
res.end(await client.register.metrics());
});
app.listen(3000, () => console.log('API démarrée sur port 3000'));
2. Déployer Prometheus et Grafana avec Docker
Le plus simple est d’utiliser Docker et un docker-compose.yml
:
version: '3.8'
services:
prometheus:
image: prom/prometheus:v2.40.0
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
ports:
- 9090:9090
grafana:
image: grafana/grafana:10.1.0
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
ports:
- 3001:3000
Placez ensuite ce fichier à la racine de votre projet et lancez docker-compose up -d
.
3. Configurer Prometheus
Le fichier prometheus.yml
doit contenir votre cible Node.js :
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'nodejs-app'
static_configs:
- targets: ['host.docker.internal:3000']
Cette configuration indique à Prometheus de scruter l’endpoint /metrics
toutes les 15 secondes.
4. Ajouter Grafana et créer un dashboard
Accédez à Grafana sur localhost:3001 (login admin/admin
). Ajoutez Prometheus comme « Data Source » (URL : http://prometheus:9090
). Puis, créez un nouveau dashboard :
- Graph pour
http_request_duration_ms_bucket
. - Stat pour
process_cpu_user_seconds_total
etprocess_resident_memory_bytes
.
Vous pouvez importer des templates officiels sur Grafana Labs pour gagner du temps.
5. Bonnes pratiques et alerting
- Utilisez des labels cohérents pour filtrer par service, environnement ou équipe.
- Définissez des histogrammes et summaries pour les temps de réponse et la latence.
- Conservez les données au minimum 15 jours pour les analyses post-mortem.
- Mettez en place des règles d’alerting dans Prometheus (ex. erreurs > 5% ou latence p99 > 500 ms).
- Intégrez vos alertes à un canal Slack ou PagerDuty pour réagir rapidement.
Conclusion
En quelques étapes, vous disposez d’une solution de monitoring robuste pour votre API Node.js. Vous anticipez les régressions de performance et optimisez votre SLA. Pour aller plus loin dans l’optimisation et la mise en place d’un observability shop, profitez d’une séance de consulting IT offerte ou découvrez nos réalisations.