Node.js 应用监控:工具与库

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

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

开始课程

JavaScript (Node.js) 应用监控:工具与库



监控 Node.js 应用是维护服务稳定性、性能和可用性的关键任务。如果没有持续的指标收集、错误追踪和代码性能分析,您可能会面临意外宕机、运行缓慢和内存泄漏的风险。在本文中,我们将介绍用于监控 Node.js 的最佳工具和库,包括流行的开源解决方案。



为什么需要监控 Node.js?

Node.js 是一个异步环境,擅长处理 I/O 操作,但也有一些需要关注的特性:

  • 单线程模型:阻塞代码可能导致整个进程停止。
  • 内存泄漏:由闭包和引用管理不当引起。
  • 事件循环:其延迟(lag)直接影响响应速度。
  • 异步代码错误:未处理的 Promise 可能被忽略。


工具的主要类别

为了全面监控 Node.js 应用,您需要来自三个类别的工具:

  • 指标收集 (Metrics):CPU、内存、每秒请求数、响应时间。
  • 性能分析 (Profiling):分析瓶颈和事件循环。
  • 错误追踪 (Error Tracking):自动收集和聚合异常。


1. Prometheus + prom-client (指标收集)

Prometheus 是现代基础设施中指标收集的事实标准。对于 Node.js,使用 prom-client 库。它允许您创建直方图、计数器和仪表指标。



安装:

npm install prom-client express


导出指标的示例 (server.js):

const express = require('express');const client = require('prom-client');const app = express();

// 为响应时间创建直方图const httpRequestDurationMicroseconds = new client.Histogram({ name: 'http_request_duration_ms', help: 'Duration of HTTP requests in ms', labelNames: ['method', 'route', 'status'], buckets: [50, 100, 200, 500, 1000, 2000]});

// 用于测量时间的中间件app.use((req, res, next) => { const end = httpRequestDurationMicroseconds.startTimer(); res.on('finish', () => { end({ method: req.method, route: req.route?.path || 'unknown', status: res.statusCode }); }); next();});

// Prometheus 端点app.get('/metrics', async (req, res) => { res.set('Content-Type', client.register.contentType); res.end(await client.register.metrics());});

app.get('/', (req, res) => res.send('Hello World!'));app.listen(3000, () => console.log('Server running on port 3000'));


现在,您可以配置 Prometheus 从 /metrics 收集指标,并在 Grafana 中将其可视化。



2. PM2 (进程管理器和基本监控)

PM2 不仅是 Node.js 的进程管理器,还内置了监控系统。它允许您跟踪进程状态、在崩溃时重启进程以及收集基本指标。



安装:

npm install pm2 -g


使用监控启动应用:

pm2 start server.js --name "my-app"pm2 monit  # 打开监控面板


将指标导出到 Prometheus (通过 pm2-metrics):

npm install pm2-metricspm2 start server.js --name "my-app"pm2-metrics --port 9200  # 打开 /metrics 端点


3. Clinic.js (性能分析和诊断)

Clinic.js 是一套工具

推荐