Surveillance des applications TypeScript : métriques et alertes de A à Z

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Introduction : Pourquoi la surveillance est cruciale pour les applications TypeScript

\n

TypeScript est un outil puissant pour créer des applications web évolutives, mais même le code de la plus haute qualité n'est pas à l'abri de pannes en production. Sans système de surveillance, vous risquez d'apprendre l'existence de problèmes par vos utilisateurs, plutôt que par des alertes automatiques. Dans cet article, nous allons parcourir le cycle complet de configuration de la surveillance : de la collecte de métriques à l'envoi de notifications.

\n

Nous aborderons les trois piliers clés de l'observabilité : les métriques (indicateurs numériques du système), les logs (enregistrements détaillés d'événements) et le tracing (suivi des requêtes). Une attention particulière sera portée à l'intégration avec des outils populaires — Prometheus, Grafana et Sentry.

\n\n

1. Métriques principales pour les applications TypeScript

\n

Avant de configurer les alertes, il faut déterminer quelles métriques sont critiques pour votre application. Divisons-les en trois groupes :

\n\n

1.1 Métriques métier

\n

Elles reflètent la santé de l'application du point de vue de l'utilisateur :

\n
    \n
  • Nombre de requêtes par seconde (RPS) — indique la charge sur le serveur
  • \n
  • Temps de réponse (latence) — percentiles p50, p95, p99
  • \n
  • Nombre d'erreurs — statuts 4xx et 5xx
  • \n
  • Utilisateurs actifs — sessions, connexions WebSocket
  • \n
\n\n

1.2 Métriques techniques

\n

Elles montrent l'état de l'infrastructure :

\n
    \n
  • CPU et Mémoire — charge du processeur et fuites mémoire
  • \n
  • Event Loop Lag — retards dans la boucle d'événements Node.js
  • \n
  • Garbage Collection — fréquence et durée du ramasse-miettes
  • \n
  • HTTP connection pool — nombre de connexions ouvertes
  • \n
\n\n

1.3 Exemple : collecte de métriques avec Prometheus en TypeScript

\n

Installons la bibliothèque prom-client pour Node.js :

\n
npm install prom-client @types/prom-client
\n\n

Créons un fichier metrics.ts :

\n
import client from 'prom-client';\nimport express, { Request, Response } from 'express';\n\n// Créer un registre de métriques\nconst register = new client.Registry();\nclient.collectDefaultMetrics({ register });\n\n// Métrique personnalisée : nombre de requêtes HTTP\nconst httpRequestCounter = new client.Counter({\n  name: 'http_requests_total',\n  help: 'Total number of HTTP requests',\n  labelNames: ['method', 'route', 'status_code'],\n  registers: [register],\n});\n\n// Histogramme du temps de réponse\nconst httpRequestDuration = new client.Histogram({\n  name: 'http_request_duration_seconds',\n  help: 'Duration of HTTP requests in seconds',\n  labelNames: ['method', 'route', 'status_code'],\n  buckets: [0.1, 0.5, 1, 2, 5],\n  registers: [register],\n});\n\n// Middleware pour collecter les métriques\nexport function metricsMiddleware(req: Request, res: Response, next: Function) {\n  const end = httpRequestDuration.startTimer();\n  res.on('finish', () => {\n    const labels = {\n      method: req.method,\n      route: req.route?.path || 'unknown',\n      status_code: res.statusCode.toString(),\n    };\n    httpRequestCounter.inc(labels);\n    end(labels);\n  });\n  next();\n}\n\n// Endpoint pour Prometheus\nexport function metricsEndpoint(req: Request, res: Response) {\n  res.set('Content-Type', register.contentType);\n  res.send(register.metrics());\n}
\n\n

2. Configuration des alertes : de la théorie à la pratique

\n

Les alertes doivent être intelligentes — trop de faux positifs fatiguent l'équipe. Utilisons la règle des "trois sigmas" pour les anomalies et des seuils pour les métriques critiques.

\n\n

2.1 Règles d'alerte dans Prometheus

\n

Créez un fichier alerts.yml :

\n
groups:\n  - name: typescript-app\n    rules:\n      - alert: HighErrorRate\n        expr: |\n          rate(http_requests_total{status_code=~"5.."}[5m]) \n          / \n          rate(http_requests_total[5m]) > 0.05\n        for: 2m\n        labels:\n          severity: critical\n        annotations:\n                

Blogs

Book Recommendations