Monitoramento de aplicações TypeScript: da diagnose à observability
O desenvolvimento em TypeScript hoje abrange tanto o lado do servidor (Node.js, Deno, Bun) quanto o lado do cliente (React, Angular, Vue). No entanto, quanto mais complexa a aplicação, mais importante é entender o que está acontecendo em produção. O monitoramento de aplicações TypeScript não é apenas a coleta de logs, mas um sistema completo de observability, incluindo métricas, tracing e alertas. Neste artigo, abordaremos as principais bibliotecas e abordagens para configurar o monitoramento.
Por que o TypeScript exige uma abordagem especial
O TypeScript é compilado para JavaScript, portanto, as ferramentas padrão para JS funcionam também com TS. No entanto, existem nuances:
- O stack de erros pode apontar para o código compilado, e não para o TS original.
- Source maps são obrigatórios para o rastreamento correto de erros.
- A tipagem permite anotar métricas e spans com mais precisão.
1. Sentry — o rei dos erros para frontend e backend
Sentry é a plataforma mais popular para rastreamento de erros e desempenho. Para TypeScript, existe um SDK oficial.
Instalação:
npm install @sentry/node @sentry/tracing# ou para React:npm install @sentry/react @sentry/tracingExemplo para 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, // perfilamento});
// Captura automática de errosapp.get("/api/data", async (req, res) => { try { const data = await fetchData(); res.json(data); } catch (err) { Sentry.captureException(err); res.status(500).send("Error"); }});Recursos para TypeScript:
- Suporte a source maps: carregue-os via
sentry-cliou plugin webpack. - Tipagem: o SDK exporta tipos para todos os métodos.
- Perfilamento: veja quais funções estão lentas.
2. OpenTelemetry — padrão universal de observability
OpenTelemetry (OTel) é um conjunto de APIs e SDKs para coleta de traces, métricas e logs. É ideal para microsserviços em TypeScript.
Instalação:
npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/instrumentation-expressExemplo de configuração de tracing:
import { NodeSDK } from "@opentelemetry/sdk-node";import { ConsoleSpanExporter } from "@opentelemetry/sdk-trace-node";import { getNodeAutoInstrumentations } from "@opentelemetry/auto-instrumentations-node";
const sdk = new NodeSDK({ traceExporter: new ConsoleSpanExporter(), instrumentations: [getNodeAutoInstrumentations()],});
sdk.start();
// Aplicaçãoimport express from "express";const app = express();app.get("/", (req, res) => { res.send("Hello OTel!");});app.listen(3000);Vantagens:
- Neutralidade de fornecedor: os dados podem ser enviados para Jaeger, Zipkin, Datadog, Grafana.
- Instrumentação automática de bibliotecas populares (Express, gRPC, MongoDB).
- TypeScript-first: todos os SDKs são escritos em TS com tipagem completa.
3. Prometheus + cliente para métricas
Para coleta de métricas (RPS, latência, memória), use o Prometheus com o cliente prom-client.
Instalação:
npm install prom-clientExemplo com Express e TypeScript:
import ex