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、延迟、错误),使用库