Surveillance des applications TypeScript : des erreurs à la performance
La surveillance des applications TypeScript est un ensemble de pratiques et d'outils assurant l'observabilité (observability) du système en temps réel. Contrairement à la simple journalisation, la surveillance professionnelle inclut la collecte de métriques, le traçage des requêtes, l'agrégation des erreurs et l'alerte automatique. Pour TypeScript, fonctionnant à la fois sur le serveur (Node.js) et dans le navigateur, il est essentiel de disposer d'un système d'observation unifié. Dans cet article, nous analyserons les outils clés et des exemples de leur intégration.
Pourquoi surveiller les applications TypeScript ?
TypeScript est compilé en JavaScript, ce qui impose des particularités pour le débogage. Le code source typé se transforme en JS dynamique, et les erreurs de type peuvent n'apparaître qu'à l'exécution. Sans surveillance, vous risquez :
- De manquer une
TypeErrorou uneReferenceErroren production - De ne pas remarquer une dégradation des performances (requêtes lentes, fuites mémoire)
- De perdre le contexte de l'erreur (stack trace, données utilisateur, environnement)
Composants principaux d'un système de surveillance
La pile de surveillance moderne repose sur trois piliers : logs, métriques (metrics) et traces. Pour les applications TypeScript, nous examinerons des bibliothèques spécifiques :
1. Sentry — le roi du suivi des erreurs
Sentry est une plateforme SaaS pour la surveillance des erreurs et des performances. Pour TypeScript, les paquets officiels @sentry/node et @sentry/react sont disponibles. Il intercepte automatiquement les exceptions, collecte les stack traces et le contexte.
Installation :
npm install @sentry/node @sentry/tracingInitialisation de base dans Node.js :
import * as Sentry from '@sentry/node';import { ProfilingIntegration } from '@sentry/profiling-node';
Sentry.init({ dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0', integrations: [new ProfilingIntegration()], tracesSampleRate: 1.0, // fréquence de collecte des traces (0-1) profilesSampleRate: 1.0, // profilage des performances});
// Appel manuel en cas d'erreurapp.get('/api/users', async (req, res) => { try { const users = await getUsers(); res.json(users); } catch (error) { Sentry.captureException(error); res.status(500).send('Internal Server Error'); }});Avantages :
- Liaison automatique des erreurs avec les versions
- Prise en charge des source maps pour TypeScript
- Performance : surveillance des transactions lentes
2. OpenTelemetry — le standard de l'observabilité
OpenTelemetry (OTel) est un standard ouvert pour la collecte de télémétrie. Pour TypeScript, le paquet @opentelemetry/sdk-node est utilisé. OTel permet de collecter des traces et des métriques, puis de les envoyer vers n'importe quel système (Jaeger, Prometheus, Datadog).
Exemple d'intégration avec Express :
import { NodeSDK } from '@opentelemetry/sdk-node';import { getNodeAutoInstrumentations } from '@opentelemetry/instrumentation-node';
const sdk = new NodeSDK({ instrumentations: [getNodeAutoInstrumentations()], // l'exportateur peut être configuré sur OTLP ou la console});
sdk.start();
// Toute la logique Express est automatiquement tracéeimport express from 'express';const app = express();app.get('/data', (req, res) => { res.json({ status: 'ok' });});OpenTelemetry instrumente automatiquement les bibliothèques populaires : Express, MongoDB, Redis, gRPC. Cela donne une image complète du parcours d'une requête à travers les services.
3. Prometheus + Grafana — métriques et visualisation
Pour la collecte de métriques (RPS, latence, erreurs) en TypeScript, on utilise la bibliothèque
Aussi dans la bibliothèque
Files d'attente de tâches pour Rust : Aperçu des bibliothèques et outils populaires
Files d'attente de tâches pour Rust : aperçu et exemples d'utilisation
Travailler avec S3 et les stockages cloud en Swift (iOS/macOS) : AWSS3 et Amplify
Travailler avec Markdown en C# (.NET) : bibliothèques et exemples