Node.js 监控:可观测性工具与库

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

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

开始课程

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



在现代 Web 开发中,监控 Node.js 应用不仅仅是一个选项,而是一种必要。没有它,就无法保证稳定性、性能以及快速发现错误。在本文中,我们将详细解析在 Node.js 生态系统中构建可观测性系统的关键工具和库。



为什么需要 Node.js 监控?

Node.js 是一个具有非阻塞 I/O 的单线程环境。这意味着一个错误或内存泄漏就可能导致整个应用瘫痪。监控有助于:

  • 跟踪指标(CPU、内存、请求数量、响应时间)。
  • 发现异常(错误突然增加、性能下降)。
  • 进行分析(代码瓶颈、内存泄漏)。
  • 配置告警(Slack、Telegram、电子邮件通知)。


用于 Node.js 监控的主要库



1. Prometheus Client (prom-client)

这是 Node.js 的标准指标导出器,与流行的指标收集系统 Prometheus 兼容。该库允许创建自定义计数器、直方图和汇总指标。

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

// 创建请求计数器const httpRequestsTotal = new client.Counter({ name: 'http_requests_total', help: 'Total number of HTTP requests', labelNames: ['method', 'route', 'status']});

// 用于收集指标的中间件app.use((req, res, next) => { const start = Date.now(); res.on('finish', () => { httpRequestsTotal.inc({ 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.listen(3000);


2. 用于 Node.js 的 OpenTelemetry

OpenTelemetry 是用于收集遥测数据(追踪、指标、日志)的现代标准。对于 Node.js,可以使用 @opentelemetry/sdk-node 包。它会自动检测流行的库(Express、HTTP、gRPC)并收集分布式追踪。

const { NodeSDK } = require('@opentelemetry/sdk-node');const { ConsoleSpanExporter } = require('@opentelemetry/sdk-trace-node');const { getNodeAutoInstrumentations } = require('@opentelemetry/auto-instrumentations-node');

const sdk = new NodeSDK({ traceExporter: new ConsoleSpanExporter(), instrumentations: [getNodeAutoInstrumentations()]});

sdk.start();

// Express 自动追踪示例const express = require('express');const app = express();app.get('/', (req, res) => res.send('Hello'));app.listen(3000);


3. PM2 — 带监控的进程管理器

PM2 不仅管理 Node.js 进程的启动,还提供内置监控。命令 pm2 monit 实时显示 CPU、内存和重启次数。对于高级监控,请使用 pm2-plus 或 pm2-metrics。

// ecosystem.config.jsmodule.exports = {  apps: [{    name: 'my-app',    script: 'app.js',    instances: 2,    exec_mode: 'cluster',    env: {      NODE_ENV: 'production'    }  }]};


4. Clinic.js — 性能分析与诊断

Clinic.js 是一套用于深入分析 Node.js 性能的工具。它包括 Doctor(快速诊断)、Bubbleprof(异步延迟)和 Flame(CPU 火焰图)。

// 安装:npm install -g clinic// 启动性能分析                    

推荐