TypeScript 应用监控:工具与库

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

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

开始课程

TypeScript 应用监控:从诊断到可观测性



如今,TypeScript 开发既涵盖服务器端(Node.js、Deno、Bun),也涵盖客户端(React、Angular、Vue)。然而,应用越复杂,了解生产环境中发生的情况就越重要。TypeScript 应用监控不仅仅是收集日志,而是一个完整的可观测性系统,包括指标、链路追踪和告警。本文将介绍用于配置监控的关键库和方法。



为什么 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, // 性能分析});

// 自动捕获错误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 —— 通用的可观测性标准

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 优先:所有 SDK 均使用 TS 编写,具有完整的类型支持。


3. Prometheus + 指标客户端

要收集指标(RPS、延迟、内存),请使用 Prometheus 及其客户端 prom-client。



安装:

npm install prom-client


Express 和 TypeScript 示例:

import ex                    

推荐