Déployer une application sans monitoring, c’est voler sans instruments de bord. Vous ne saurez pas quand elle tombe, quelles erreurs les utilisateurs voient, ou quand la base de données est à saturation. Ce guide vous donne les bases pratiques du monitoring — pas une introduction exhaustive à l’observabilité, mais ce qu’un développeur doit mettre en place dès le premier déploiement.
Les trois piliers de l’observabilité
- Logs : événements textuels — « Utilisateur 42 a créé une commande », « Erreur de connexion à la DB »
- Métriques : données numériques dans le temps — temps de réponse, taux d’erreur, utilisation CPU/mémoire
- Traces : chemin d’une requête à travers plusieurs services — utile pour les architectures microservices
Pour commencer, concentrez-vous sur les logs et les métriques. Les traces viennent plus tard.
Sentry — la gestion des erreurs d’abord
Sentry est le premier outil à mettre en place. Il capture automatiquement les exceptions non gérées, vous notifie, et vous donne le contexte complet : stack trace, utilisateur concerné, données de la requête.
npm install @sentry/nextjs
# sentry.client.config.ts
import * as Sentry from '@sentry/nextjs'
Sentry.init({
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
tracesSampleRate: 0.1, // capturer 10% des transactions pour les performances
environment: process.env.NODE_ENV,
})
# Capturer une erreur manuellement avec contexte
try {
await riskyOperation()
} catch (error) {
Sentry.withScope(scope => {
scope.setUser({ id: userId, email: userEmail })
scope.setContext('operation', { type: 'payment', amount })
Sentry.captureException(error)
})
throw error
}
Sentry est gratuit jusqu’à 5000 erreurs/mois — largement suffisant pour un projet personnel ou une startup early-stage.
Logs structurés — écrire des logs utiles
// ❌ Logs textuels — difficiles à filtrer
console.log('User 42 created order for 99.90 euros')
// ✅ Logs structurés JSON — filtrables, agrégables
import { pino } from 'pino'
const logger = pino({ level: 'info' })
logger.info({
event: 'order.created',
userId: 42,
orderId: 'ORD-789',
amount: 99.90,
currency: 'EUR',
})
// En production, les logs JSON peuvent être ingérés par
// Loki, Datadog, CloudWatch, ou n'importe quel système d'agrégation
Stack monitoring avec Docker Compose
# docker-compose.monitoring.yml
services:
prometheus: # collecte des métriques
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana: # visualisation
image: grafana/grafana:latest
ports:
- "3001:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=secret
volumes:
- grafana_data:/var/lib/grafana
loki: # agrégation des logs
image: grafana/loki:latest
ports:
- "3100:3100"
volumes:
grafana_data:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'app'
static_configs:
- targets: ['app:3000'] # votre app expose /metrics
Les métriques à surveiller en priorité
- Uptime : est-ce que l’application répond ? (UptimeRobot gratuit suffit pour commencer)
- Taux d’erreur HTTP : % de requêtes qui retournent 5xx
- Latence p99 : le temps de réponse du 99ème percentile — révèle les outliers
- Utilisation mémoire : les memory leaks se voient sur un graphique sur 24h
- Espace disque : les logs remplissent les disques si non rotatés
Alertes — ne pas attendre de voir le problème
# Rotation des logs avec logrotate (Linux)
# /etc/logrotate.d/app
/var/log/app/*.log {
daily
rotate 7
compress
missingok
notifempty
}
# Alerte simple avec UptimeRobot
# 1. Créer un compte gratuit sur uptimerobot.com
# 2. Ajouter un monitor HTTP sur votre URL
# 3. Configurer les alertes email/Slack si down > 5 minutes
Offres développeur et SRE
Des postes pour développeurs qui pensent à la fiabilité de leurs applications — pas seulement au code qui tourne en local.
À lire aussi : Déploiement sur VPS — DevOps pour débutant — Sécurité web