Surveillance des applications TypeScript : guide complet des outils et bibliothèques
La surveillance est une partie essentielle du développement d'applications web modernes en TypeScript. Sans elle, vous travaillez à l'aveugle : les erreurs passent inaperçues, les performances chutent et les utilisateurs s'en vont. Dans cet article, nous allons examiner les bibliothèques et outils clés pour la surveillance des applications TypeScript, notamment Sentry, OpenTelemetry, Prometheus et la journalisation intégrée. Vous apprendrez à configurer la collecte d'erreurs, de métriques et le traçage en temps réel.
1. Sentry : suivi des erreurs en temps réel
Sentry est la plateforme de surveillance des erreurs la plus populaire. Elle prend en charge TypeScript nativement et permet de capturer les exceptions, de journaliser le contexte d'exécution et de recevoir des notifications en cas de plantage.
Installation et configuration de base
npm install @sentry/node @sentry/tracingExemple d'initialisation de Sentry dans une application TypeScript sur 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, profilesSampleRate: 1.0,});
// Envoi forcé d'une erreurapp.get("/debug-sentry", function mainHandler(req, res) { throw new Error("Erreur de test Sentry !");});Journalisation du contexte
Sentry permet d'ajouter des balises personnalisées et du contexte :
Sentry.setUser({ email: "user@example.com" });Sentry.setTag("environment", "production");Sentry.captureException(new Error("Erreur lors du traitement de la commande"));2. OpenTelemetry : standard pour le traçage et les métriques
OpenTelemetry est un standard ouvert pour la collecte de télémétrie : traces, métriques et journaux. Il prend en charge TypeScript et s'intègre facilement avec n'importe quel backend (Jaeger, Zipkin, Prometheus).
Installation des paquets
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/instrumentation-expressExemple de configuration du traçage
import { NodeSDK } from "@opentelemetry/sdk-node";import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";import { ConsoleSpanExporter } from "@opentelemetry/sdk-trace-node";
const sdk = new NodeSDK({ traceExporter: new ConsoleSpanExporter(), instrumentations: [getNodeAutoInstrumentations()],});
sdk.start();Désormais, chaque requête HTTP sera automatiquement encapsulée dans une span avec des métadonnées. Vous pouvez ajouter des spans personnalisées :
import { trace } from "@opentelemetry/api";
const tracer = trace.getTracer("my-service");
app.get("/api/data", async (req, res) => { const span = tracer.startSpan("processData"); try { const data = await fetchData(); span.setAttribute("data.size", data.length); res.json(data); } finally { span.end(); }});3. Prometheus + express-prom-bundle : métriques pour Node.js
Pour collecter des métriques de performance (RPS, temps de réponse, nombre d'erreurs), utilisez Prometheus avec la bibliothèque express-prom-bundle. Elle collecte automatiquement les métriques des applications Express.
Installation
npm install prom-client express-prom-bundleExemple de configuration
import express from "express";import promBundle from "express-prom-bundle";
const app = express();
const metricsMiddleware = promBundle({ includeMethod: true, includePath: true, includeStatusCode: true, customLabels: { project: "my-app" }, metricsPath: "/metrics",});
app.use(metricsMi