Ne découvrez jamais que votre site est en panne par un message furieux d'un client. Mettez en place une surveillance synthétique 24/7 avec sondes mondiales, configurez des alertes instantanées sur Telegram/Slack et offrez de la transparence via une page de statut publique.
Endpoint de santé dédié vérifiant en 50 ms la connexion active à la base de données.
Pings HTTP réguliers (toutes les 60s) depuis l'Europe, les USA et l'Asie (BetterStack/UptimeRobot).
Notification sur Telegram, Slack ou appel téléphonique dès que 2 sondes échouent d'affilée.
Page indépendante (status.learnweb.com) affichant la disponibilité et informant des maintenances.
// Implémentation robuste d'un endpoint /health dans Express :
import express from 'express';
import { db } from './database';
const router = express.Router();
router.get('/health', async (req, res) => {
const startTime = Date.now();
const healthStatus = {
uptime: process.uptime(),
timestamp: new Date().toISOString(),
status: 'UP',
checks: {
database: 'UNKNOWN',
memory: 'OK'
},
latencyMs: 0
};
try {
// 1. Tester la réactivité réelle de la base de données
await db.raw('SELECT 1');
healthStatus.checks.database = 'UP';
// 2. Vérifier la consommation mémoire
const memUsage = process.memoryUsage().heapUsed / 1024 / 1024;
if (memUsage > 500) { // Plus de 500 Mo consommés
healthStatus.checks.memory = 'WARNING_HIGH_USAGE';
}
healthStatus.latencyMs = Date.now() - startTime;
return res.status(200).json(healthStatus);
} catch (error: any) {
// Si la base ne répond pas : renvoyer un statut HTTP 503 Service Unavailable
healthStatus.status = 'DOWN';
healthStatus.checks.database = 'DOWN';
healthStatus.latencyMs = Date.now() - startTime;
return res.status(503).json(healthStatus);
}
});
export default router; Si votre sonde externe interroge simplement https://learnweb.com/, elle teste uniquement le serveur web Nginx ou le cache CDN. Même si votre base de données est complètement écroulée, la page d'accueil statique peut renvoyer 200 OK !
L'endpoint /health interroge explicitement les composants critiques (BDD, cache Redis, passerelle de paiement) et renvoie 503 Service Unavailable dès qu'un élément vital flanche.
| Service | Intervalle de Test Gratuit | Canaux d'Alerte | Page de Statut Offerte ? |
|---|---|---|---|
| BetterStack (Uptime) | Toutes les 3 minutes | Email, SMS, Slack, Telegram, Webhook | ✅ Oui, personnalisable et responsive |
| UptimeRobot | Toutes les 5 minutes | Email, Application mobile, Webhook | ✅ Oui, sous-domaine dédié |
| Checkly | Toutes les 60 secondes | Slack, PagerDuty, SMS | ✅ Oui, spécialisé sur les scénarios Playwright |
| Grafana Cloud | Temps réel continu | Slack, Discord, PagerDuty | ✅ Oui, orienté métriques techniques CPU/RAM |