Monitoreo de aplicaciones TypeScript: guía completa de herramientas y bibliotecas
El monitoreo es una parte esencial del desarrollo de aplicaciones web modernas en TypeScript. Sin él, trabaja a ciegas: los errores pasan desapercibidos, el rendimiento disminuye y los usuarios se van. En este artículo, analizaremos las bibliotecas y herramientas clave para el monitoreo de aplicaciones TypeScript, incluyendo Sentry, OpenTelemetry, Prometheus y el registro integrado. Aprenderá a configurar la recopilación de errores, métricas y trazado en tiempo real.
1. Sentry: seguimiento de errores en tiempo real
Sentry es la plataforma más popular para el monitoreo de errores. Es compatible con TypeScript de forma nativa y permite capturar excepciones, registrar el contexto de ejecución y recibir notificaciones de fallos.
Instalación y configuración básica
npm install @sentry/node @sentry/tracingEjemplo de inicialización de Sentry en una aplicación TypeScript en 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,});
// Envío forzado de un errorapp.get("/debug-sentry", function mainHandler(req, res) { throw new Error("¡Error de prueba de Sentry!");});Registro de contexto
Sentry permite agregar etiquetas y contexto personalizados:
Sentry.setUser({ email: "user@example.com" });Sentry.setTag("environment", "production");Sentry.captureException(new Error("Error al procesar el pedido"));2. OpenTelemetry: estándar para trazado y métricas
OpenTelemetry es un estándar abierto para la recopilación de telemetría: trazas, métricas y registros. Es compatible con TypeScript y se integra fácilmente con cualquier backend (Jaeger, Zipkin, Prometheus).
Instalación de paquetes
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/instrumentation-expressEjemplo de configuración de trazado
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();Ahora cada solicitud HTTP se envolverá automáticamente en un span con metadatos. Puede agregar spans personalizados:
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étricas para Node.js
Para recopilar métricas de rendimiento (RPS, tiempo de respuesta, cantidad de errores), use Prometheus junto con la biblioteca express-prom-bundle. Esta recopila automáticamente métricas de aplicaciones Express.
Instalación
npm install prom-client express-prom-bundleEjemplo de configuración
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