监控 TypeScript 应用:指标与告警
在现代 Web 开发中,监控 TypeScript 应用不是奢侈品,而是必需品。没有它,您可能只有在用户反馈时才知道系统故障。在本文中,我们将探讨如何为 TypeScript 项目设置有效的监控,跟踪哪些指标,以及如何配置告警,以便在问题变得严重之前收到通知。
为什么监控 TypeScript 应用如此重要?
TypeScript 作为 JavaScript 的超集,常用于构建复杂的企业级系统和基于 Node.js 的服务器端解决方案。然而,JavaScript 在底层动态特性可能导致意外的运行时错误。监控可以:
- 早期发现问题 — 在影响用户之前。
- 分析性能 — 识别代码中的瓶颈。
- 预测故障 — 基于指标趋势。
- 提升代码质量 — 了解哪些模块是“问题最多”的。
TypeScript 应用的关键指标
要使监控有效,需要收集正确的指标。我们将它们分为三个主要组别。
1. 技术指标(RED 方法)
RED(Rate, Errors, Duration)方法非常适合微服务和 API:
- Rate(请求频率) — 每秒请求数(RPS)。
- Errors(错误) — 错误百分比(4xx, 5xx)。
- Duration(响应时间) — 请求处理时间(p50, p95, p99)。
使用 prom-client 库收集指标的示例:
import client from 'prom-client';import express from 'express';
const app = express();
// 创建指标const httpRequestDuration = new client.Histogram({ name: 'http_request_duration_seconds', help: 'Duration of HTTP requests in seconds', labelNames: ['method', 'route', 'status_code'], buckets: [0.1, 0.5, 1, 2, 5]});
const httpRequestsTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status_code']});
// 用于收集指标的中间件app.use((req, res, next) => { const end = httpRequestDuration.startTimer(); res.on('finish', () => { const labels = { method: req.method, route: req.path, status_code: res.statusCode }; httpRequestsTotal.inc(labels); end(labels); }); next();});
// Prometheus 端点app.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});
app.listen(3000, () => console.log('Server running on port 3000'));2. 业务指标
这些指标反映业务健康状况:
- 成功交易数量。
- 平均购物车大小(针对电子商务)。
- 数据库响应时间。
- 活跃用户数量。
用于跟踪订单的自定义指标示例:
const ordersCreated = new client.Counter({ name: 'orders_created_total', help: 'Total number of orders created', labelNames: ['status']});
// 在代码中的某处export function createOrder(data: OrderData): Order { // 创建订单的逻辑 ordersCreated.inc({ status: 'success' }); return order;}3. 基础设施指标
对于 Node.js/TypeScript 应用,以下指标至关重要:
- 内存使用情况(heap, RSS)。
- CPU 负载。
- 打开的文件描述符数量。
- 活跃连接数。
- 垃圾回收(GC)。
收集内存指标的示例:
博客
书籍推荐
推荐阅读