Publie le 24 mars 2026 Par

Monitoring et logs d’une application web : Sentry, Prometheus, Grafana — par où commencer

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 VPSDevOps pour débutantSécurité web

Categories : DevOps & Cloud