TypeScript 应用监控:工具与实践

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

TypeScript 应用监控:从错误到性能



TypeScript 应用监控是一套确保系统实时可观测性(observability)的实践和工具。与简单的日志记录不同,专业监控包括指标收集、请求追踪、错误聚合和自动告警。对于在服务器端(Node.js)和浏览器端运行的 TypeScript,拥有统一的监控系统至关重要。本文将介绍关键工具及其集成示例。



为什么要监控 TypeScript 应用?

TypeScript 编译为 JavaScript,这给调试带来了特殊性。带有类型的源代码会转变为动态 JS,类型错误可能仅在运行时出现。没有监控,您将面临以下风险:

  • 在生产环境中遗漏 TypeError 或 ReferenceError
  • 无法发现性能下降(慢请求、内存泄漏)
  • 丢失错误上下文(堆栈跟踪、用户数据、环境信息)


监控系统的主要组件

现代监控栈建立在三大支柱之上:日志(logs)、指标(metrics)和追踪(traces)。对于 TypeScript 应用,我们将介绍具体的库:



1. Sentry —— 错误追踪之王

Sentry 是一个用于错误和性能监控的 SaaS 平台。TypeScript 有官方包 @sentry/node 和 @sentry/react。它会自动捕获异常,收集堆栈跟踪和上下文信息。



安装:

npm install @sentry/node @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, // 追踪采样率 (0-1) profilesSampleRate: 1.0, // 性能分析采样率});

// 错误时手动调用app.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'); }});


优势:

  • 自动将错误与版本关联
  • 支持 TypeScript 的 source maps
  • 性能:监控慢事务


2. OpenTelemetry —— 可观测性标准

OpenTelemetry (OTel) 是一个用于收集遥测数据的开放标准。TypeScript 使用 @opentelemetry/sdk-node 包。OTel 可以收集追踪和指标,然后将其发送到任何系统(Jaeger、Prometheus、Datadog)。



与 Express 集成的示例:

import { NodeSDK } from '@opentelemetry/sdk-node';import { getNodeAutoInstrumentations } from '@opentelemetry/instrumentation-node';

const sdk = new NodeSDK({ instrumentations: [getNodeAutoInstrumentations()], // 导出器可以配置为 OTLP 或控制台});

sdk.start();

// 所有 Express 逻辑都会自动被追踪import express from 'express';const app = express();app.get('/data', (req, res) => { res.json({ status: 'ok' });});


OpenTelemetry 会自动检测流行的库:Express、MongoDB、Redis、gRPC。这提供了请求在服务间传递的完整视图。



3. Prometheus + Grafana —— 指标与可视化

为了在 TypeScript 中收集指标(RPS、延迟、错误),使用库

推荐