Monitoring et observabilité
Guide pour surveiller votre application en production.
Métriques essentielles
Disponibilité (Uptime)
Target : 99.5% (max 3,5h downtime/mois)Outils :
- Vercel Analytics
- Pingdom
- UptimeRobot
Performance
Response time : < 500ms
First Contentful Paint (FCP) : < 2.5s
Cumulative Layout Shift (CLS) : < 0.1Erreurs
Error rate : < 0.1%
500 errors : < 0.01%Vercel Analytics
Activer
- Vercel Dashboard → Project Settings → Analytics
- Cliquez Enable Analytics
- Les données collectent automatiquement
Voir les données
- Vercel Dashboard → Analytics
- Affiche :
- Web Vitals (FCP, LCP, CLS, TTFB)
- Response times
- Regions
Sauvegarder les logs
Vercel Archive les logs 24h par défaut
Pour plus long : intégrer Datadog ou LogRocket
Erreurs et logs
Voir les logs Vercel
# Terminal
vercel logs --follow
# Ou Dashboard → LogsExceptions tracking
Intégrez Sentry ou Rollbar :
npm install @sentry/nextjsConfiguration :
// sentry.client.config.ts
import * as Sentry from "@sentry/nextjs"
Sentry.init({
dsn: process.env.NEXT_PUBLIC_SENTRY_DSN,
environment: process.env.NODE_ENV,
})En .env.production.local :
NEXT_PUBLIC_SENTRY_DSN="https://..."Logs structurés
// logger.ts
export function logError(msg: string, err: Error) {
console.error(JSON.stringify({
timestamp: new Date(),
level: 'error',
message: msg,
error: err.message,
stack: err.stack,
}))
}Base de données
Connexions
Monitor :
SELECT * FROM pg_stat_activity;Idéal : 10-50 connexions actives Critique : > 100 connexions
Performances
-- RequĂŞtes lentes
SELECT query, mean_time FROM pg_stat_statements
ORDER BY mean_time DESC
LIMIT 10;Target : < 100ms par requĂŞte
Sauvegardes
âś… Automatiques quotidiens (ou plus) âś… Point-in-time recovery âś… Testez les restaurations âś… Gardez au moins 30 jours
Backup Render/Railway
Dashboard → Backups
- Manual backup
- Point-in-time restore
Stripe monitoring
Voir les paiements
Stripe Dashboard → Payments
Vérifiez :
- Paiements réussis
- Remboursements
- Disputes
Webhooks
Vérifiez les événements Stripe :
Stripe → Webhooks → [Endpoint]
- Affiche les événements envoyés
- Response status (2xx = OK)
- Retry count
Alertes
Stripe → Settings → Alerts
Configurez les alertes pour :
- Paiements échoués
- Chargements refusés
- Fraudes détectées
Health checks
Créez un endpoint de health check :
// pages/api/health.ts
export default async function handler(req, res) {
try {
// Ping database
await prisma.$executeRaw`SELECT 1`
return res.status(200).json({
status: 'healthy',
timestamp: new Date(),
})
} catch (err) {
return res.status(503).json({
status: 'unhealthy',
error: err.message,
})
}
}Pingez régulièrement :
curl https://monsite.com/api/healthAlertes
UptimeRobot
- UptimeRobot.com → Create Monitor
- URL :
https://monsite.com/api/health - Interval : 5 minutes
- Slack notification
Vercel Alerts
Vercel envoie des alertes pour :
- Deploy failures
- High error rates
- Performance degradation
Dashboard de monitoring
Crée un dashboard Grafana :
CPU usage
Memory usage
Request count
Error rate
Response time
Database connectionsMonitoring production checklist
- ✅ Analytics Vercel activé
- âś… Endpoint /api/health
- âś… Uptime monitoring (UptimeRobot)
- âś… Error tracking (Sentry)
- ✅ Database backups configurées
- ✅ Logs archivés
- âś… Alertes Stripe
- âś… Notifications Slack
Incidents
Procédure
- Déctecter l’incident via alerts
- Cliquer sur le lien d’alerte
- Ouvrir les logs
- Identifier la cause
- Déployer un fix
- Vérifier la résolution
- Post-mortem (si critique)
Rollback rapide
# Vercel
vercel rollback
# Ou manuellement
git revert <commit>
git pushPerformance tuning
Analyze bundle
npm install -D @next/bundle-analyzer
# next.config.mjs
const withBundleAnalyzer = require('@next/bundle-analyzer')()
module.exports = withBundleAnalyzer({
enabled: process.env.ANALYZE === 'true',
})
# Puis
ANALYZE=true npm run buildDatabase optimization
- Ajouter des indexes
- Revoir les queries lentes
- Connection pooling (PgBouncer)
Caching
// pages/api/expensive.ts
export default async function handler(req, res) {
res.setHeader('Cache-Control', 's-maxage=60, stale-while-revalidate=300')
return res.status(200).json({ ... })
}Coûts
Vercel Analytics
- Gratuit jusqu’à 1000 events/jour
- Payant après
Sentry
- Gratuit jusqu’à 5k events/mois
- $29/mois après
UptimeRobot
- Gratuit (50 monitors)
- $9.99/mois pour plus
Prochaines étapes
→ Troubleshooting
Last updated on