Nouveau : Datasets open source gratuits disponibles !Decouvrir →
📊
Intermediaire 20 min Express

Logging et monitoring Express

Voici le tutoriel "Logging et Monitoring Express" en respectant les instructions fournies :

Pourquoi Logging et Monitoring Express ?

Contexte réel : pourquoi un dev a besoin de ca au quotidien

En tant que développeur, vous êtes probablement familiarisé avec les problèmes courants liés à l'application web, comme des erreurs imprévues, des performances lentes ou une utilisation élevée de la mémoire. Logging et monitoring permettent d'identifier ces problèmes et de les résoudre rapidement.

Un cas d'utilisation concret en 2-3 phrases

Imaginons un service de gestion de tâches en ligne. Si vous ne suivez pas les erreurs et les performances de votre application, vous pourriez tomber sur des situations où certaines tâches ne sont pas traitées correctement ou que l'interface utilisateur est lente pour les utilisateurs. Logging permet de capturer ces événements pour les analyser, tandis que monitoring vous donne une vue d'ensemble en temps réel de la santé de votre application.

Prerequis

Connaissances nécessaires

  • Connaissance de base de Node.js et Express
  • Compréhension des concepts de middleware et de gestion des erreurs
  • Familiarité avec les outils de ligne de commande comme npm

Outils à installer (versions)

  • Node.js v14 ou plus tard
  • npm 6.0.0 ou plus tard

Concepts fondamentaux

Logging

Logging est le processus d'enregistrement des événements qui se produisent pendant l'exécution de votre application. Cela peut inclure des informations sur les requêtes entrantes, les erreurs et les performances.

Schema mental :

Schema Mental Logging

// Importer la bibliothèque express
const express = require('express');
const app = express();

// Middleware de logging personnalisé
app.use((req, res, next) => {
  console.log(`Requête ${req.method} sur ${req.url}`);
  next();
});

// Route d'exemple
app.get('/', (req, res) => {
  res.send('Bonjour');
});

// Démarrer le serveur
app.listen(3000, () => {
  console.log('Serveur démarré sur http://localhost:3000');
});

Monitoring

Monitoring permet de surveiller les performances et la santé de votre application en temps réel. Cela peut inclure des métriques comme le taux d'erreurs, la latence des requêtes et l'utilisation de la CPU.

Schema mental :

Schema Mental Monitoring

// Importer les bibliothèques nécessaires
const express = require('express');
const app = express();
const morgan = require('morgan');
const http = require('http');

// Middleware de logging avec Morgan
app.use(morgan('combined'));

// Route d'exemple
app.get('/', (req, res) => {
  res.send('Bonjour');
});

// Démarrer le serveur
const server = app.listen(3000, () => {
  console.log('Serveur démarré sur http://localhost:3000');
});

// Utiliser l'API HTTP pour surveiller les performances
http.get('http://localhost:3000', (res) => {
  res.on('data', (chunk) => {
    console.log(`Réponse du serveur : ${chunk}`);
  });
}).on('error', (err) => {
  console.error(`Erreur de connexion : ${err.message}`);
});

Mise en pratique : projet fil rouge

Construisons un gestionnaire de tâches basique

Étape 1 : Initialiser le projet

mkdir task-manager
cd task-manager
npm init -y
npm install express morgan body-parser

Étape 2 : Structure des fichiers

Créez les fichiers suivants :

  • app.js
  • .env (pour stocker les variables d'environnement)

Étape 3 : Code complet

// app.js
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');

const app = express();
const port = process.env.PORT || 3000;

// Middleware de logging avec Morgan
app.use(morgan('combined'));

// Middleware pour parser le corps des requêtes JSON
app.use(bodyParser.json());

// Stockage simulé pour les tâches
let tasks = [];

// Route pour obtenir toutes les tâches
app.get('/tasks', (req, res) => {
  res.json(tasks);
});

// Route pour ajouter une nouvelle tâche
app.post('/tasks', (req, res) => {
  const task = req.body;
  tasks.push(task);
  res.status(201).json(task);
});

// Route pour mettre à jour une tâche existante
app.put('/tasks/:id', (req, res) => {
  const id = parseInt(req.params.id);
  const updatedTask = req.body;
  if (id >= 0 && id < tasks.length) {
    tasks[id] = { ...tasks[id], ...updatedTask };
    res.json(tasks[id]);
  } else {
    res.status(404).json({ message: 'Tâche non trouvée' });
  }
});

// Route pour supprimer une tâche
app.delete('/tasks/:id', (req, res) => {
  const id = parseInt(req.params.id);
  if (id >= 0 && id < tasks.length) {
    tasks.splice(id, 1);
    res.status(204).send();
  } else {
    res.status(404).json({ message: 'Tâche non trouvée' });
  }
});

// Démarrer le serveur
app.listen(port, () => {
  console.log(`Serveur démarré sur http://localhost:${port}`);
});

Étape 4 : Lancer l'application

node app.js

Erreurs fréquentes et debugging

1. Erreur de logging incorrecte

Code incorrect

app.use((req, res, next) => {
  console.log(`Requête ${req.method} sur ${res.url}`);
  next();
});

Correction

app.use((req, res, next) => {
  console.log(`Requête ${req.method} sur ${req.url}`);
  next();
});

2. Erreur de monitoring

Code incorrect

http.get('http://localhost:3000', (res) => {
  res.on('data', (chunk) => {
    console.log(`Réponse du serveur : ${chunk}`);
  });
}).on('error', (err) => {
  console.error(`Erreur de connexion : ${err.message}`);
});

Correction

http.get('http://localhost:3000', (res) => {
  res.on('data', (chunk) => {
    console.log(`Réponse du serveur : ${chunk}`);
  });
}).on('error', (err) => {
  console.error(`Erreur de connexion : ${err.message}`);
});

3. Erreur d'ajout de tâche

Code incorrect

app.post('/tasks', (req, res) => {
  const task = req.body;
  tasks.push(task);
  res.status(201).json(task);
});

Correction

app.post('/tasks', (req, res) => {
  const task = req.body;
  tasks.push(task);
  res.status(201).json(task);
});

Pour aller plus loin

1. Utilisation de Winston pour le logging

Winston est une bibliothèque populaire pour le logging en Node.js.

Documentation : Winston

2. Intégration avec Prometheus et Grafana

Prometheus et Grafana sont des outils populaires pour le monitoring de systèmes distribués.

Documentation :

3. Utilisation de Sentry pour le monitoring des erreurs

Sentry est une plateforme de gestion des erreurs et de surveillance.

Documentation : Sentry

Défi pratique

Créez un simple API REST avec Express qui permet de gérer des utilisateurs (ajouter, récupérer, mettre à jour, supprimer). Assurez-vous d'avoir les points suivants :

  • Logging pour toutes les requêtes
  • Monitoring des performances
  • Gestion des erreurs

Besoin d'aide sur Express ?

Besoin d'aide sur un projet technique ? Decrivez-le pour des conseils personnalises.

Recevoir des conseils

Questions frequentes

Comment configurer le logging pour mon application Express ?
Pour configurer le logging dans une application Express, vous pouvez utiliser des bibliothèques comme `morgan`. Ajoutez simplement cette ligne de code à votre fichier principal : `app.use(morgan('combined'));`
Quelle est la différence entre logging et monitoring en Express ?
Le logging se concentre sur la création de journaux pour suivre les activités et les erreurs dans votre application. Le monitoring, quant à lui, comprend le suivi des métriques performantes et l'alerte en cas de défaillance.
Comment intégrer un outil de monitoring pour mes routes Express ?
Pour surveiller les routes d'une application Express, vous pouvez utiliser `express-status-monitor`. Installez-le via npm et ajoutez cette ligne à votre fichier principal : `app.use(require('express-status-monitor')());`

Pages liees

Chaque semaine, le meilleur de la tech francaise

Tendances, salaires, outils et opportunites — directement dans votre boite mail.

Gratuit. Desabonnement en un clic. Pas de spam.