Мониторинг TypeScript-приложений: инструменты и библиотеки

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Мониторинг приложений TypeScript: от диагностики до observability

Разработка на TypeScript сегодня охватывает как серверную часть (Node.js, Deno, Bun), так и клиентскую (React, Angular, Vue). Однако чем сложнее приложение, тем важнее понимать, что происходит в production. Мониторинг TypeScript-приложений — это не просто сбор логов, а полноценная система observability, включающая метрики, трейсинг и алерты. В этой статье разберём ключевые библиотеки и подходы для настройки мониторинга.

Почему TypeScript требует особого подхода

TypeScript компилируется в JavaScript, поэтому стандартные инструменты для JS работают и с TS. Однако есть нюансы:

  • Стек ошибок может указывать на скомпилированный код, а не на исходный TS.
  • Source maps обязательны для корректного трейсинга ошибок.
  • Типизация позволяет более точно аннотировать метрики и спаны.

1. Sentry — король ошибок для фронтенда и бэкенда

Sentry — самая популярная платформа для отслеживания ошибок и производительности. Для TypeScript есть официальный SDK.

Установка:

npm install @sentry/node @sentry/tracing
# или для React:
npm install @sentry/react @sentry/tracing

Пример для 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, // профилирование
});

// Автоматический capture ошибок
app.get("/api/data", async (req, res) => {
  try {
    const data = await fetchData();
    res.json(data);
  } catch (err) {
    Sentry.captureException(err);
    res.status(500).send("Error");
  }
});

Особенности для TypeScript:

  • Поддержка source maps: загружайте их через sentry-cli или плагин webpack.
  • Типизация: SDK экспортирует типы для всех методов.
  • Профилирование: видно, какие функции тормозят.

2. OpenTelemetry — универсальный стандарт observability

OpenTelemetry (OTel) — это набор API и SDK для сбора трейсов, метрик и логов. Отлично подходит для микросервисов на TypeScript.

Установка:

npm install @opentelemetry/api @opentelemetry/sdk-node @opentelemetry/instrumentation-http @opentelemetry/instrumentation-express

Пример настройки трейсинга:

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();

// Приложение
import express from "express";
const app = express();
app.get("/", (req, res) => {
  res.send("Hello OTel!");
});
app.listen(3000);

Преимущества:

  • Вендор-нейтральность: данные можно отправлять в Jaeger, Zipkin, Datadog, Grafana.
  • Автоматическая инструментация популярных библиотек (Express, gRPC, MongoDB).
  • TypeScript-first: все SDK написаны на TS с полной типизацией.

3. Prometheus + клиент для метрик

Для сбора метрик (RPS, latency, memory) используйте Prometheus с клиентом prom-client.

Установка:

npm install prom-client

Пример с Express и TypeScript:

import express from "express";
import client from "prom-client";

const app = express();
const register = new client.Registry();

client.collectDefaultMetrics({ register });

const httpRequestDuration = new client.Histogram({
  name: "http_request_duration_seconds",
  help: "Duration of HTTP requests in seconds",
  labelNames: ["method", "route", "status"],
  buckets: [0.1, 0.5, 1, 2, 5],
});

register.registerMetric(httpRequestDuration);

app.get("/metrics", async (req, res) => {
  res.set("Content-Type", register.contentType);
  res.end(await                    

Рекомендаций