Node.js 监控:你应该追踪的关键 Metrics

Cat Eatting Cookies

了解在 Node.js 应用程序中哪些 metrics 重要,它们为何重要,以及如何在生产环境中有效地追踪它们。

May 19th, ‘25 Faiz Shaikh Faiz Shaikh

分享: LinkedIn [ Reddit ](https://last9.io/blog/node-js-key-metrics/<https:/www.reddit.com/submit?url=https%3A%2F%2Flast9.io%2Fblog%2Fnode-js-key-metrics%2F&title=Monitoring Node.js: Key Metrics You Should Track>)[ X ](https://last9.io/blog/node-js-key-metrics/<https:/x.com/intent/tweet?url=https://last9.io/blog/node-js-key-metrics/&text=Understand which metrics matter in Node.js applications, why they’re important, and how to track them effectively in production.>) Monitoring Node.js: Key Metrics You Should Track

内容

有效的 Node.js 监控需要追踪运行时 metrics(内存、CPU)、应用程序 metrics(请求率、响应时间)和业务 metrics(用户行为、转化率)。本指南涵盖了要追踪的内容、如何收集它们以及如何设置有意义的告警。

为什么 Node.js Metrics 很重要?

你已经构建了一个 Node.js 应用程序并将其部署到生产环境。如果没有适当的 metrics,当用户报告“应用程序感觉很慢”时,故障排除将变得困难。

良好的 metrics 将模糊的抱怨转化为可操作的数据点,例如“支付服务正在经历 500 毫秒的响应时间,高于 120 毫秒的基线”。

💡 要更深入地了解现代应用程序中的可观测性,请查看 Last9's APM Observability Guide

你应该追踪哪些运行时 Metrics?

运行时 metrics 显示 Node.js 本身的性能如何。它们提供了问题的早期预警信号。

监控内存使用情况

Node.js 内存管理和垃圾回收可能很棘手。观察这些 metrics 以识别内存问题:

// 在你的应用程序中记录内存使用情况的基本方法
const logMemoryUsage = () => {
 const memUsage = process.memoryUsage();
 console.log({
  rss: `${Math.round(memUsage.rss / 1024 / 1024)} MB`,
  heapTotal: `${Math.round(memUsage.heapTotal / 1024 / 1024)} MB`,
  heapUsed: `${Math.round(memUsage.heapUsed / 1024 / 1024)} MB`,
  external: `${Math.round(memUsage.external / 1024 / 1024)} MB`
 });
};

测量 CPU 利用率

Node.js 默认是单线程的。CPU metrics 帮助你了解资源使用情况:

💡 也在 JVM 上运行服务?这是一个你需要追踪的关键 metrics的分解。

分析 Event Loop Metrics

Event loop 是 Node.js 性能的核心。这些 metrics 帮助监控其健康状况:

Metric | 警告阈值 | 严重阈值 | 含义
---|---|---|---
Event Loop Lag | > 100ms | > 500ms | 应用程序难以足够快地处理回调
CPU Usage | > 70% 持续 | > 90% 持续 | 接近 CPU 限制
Memory Growth | 几个小时内稳步增长 | 接近堆限制 | 可能存在内存泄漏

应用程序 Metrics 如何提高性能?

运行时 metrics 显示 Node.js 的性能。应用程序 metrics 显示你的代码的性能。

追踪 HTTP 请求 Metrics

对于 Web 应用程序和 API,请监控:

监控数据库和外部服务性能

你的应用程序连接到其他服务:

Last9 帮助关联跨服务的这些 metrics,以识别数据库减速如何影响你的 Node.js 应用程序的性能。

Metrics 如何与业务价值相关联?

为了向非技术利益相关者展示价值,请追踪业务 metrics:

如何实现 Metrics 收集

以下是如何开始从你的 Node.js 应用程序收集 metrics:

利用内置的 Node.js API

Node.js 具有用于基本 metrics 的内置工具:

// health-check.js
const os = require('os');
app.get('/health', (req, res) => {
 res.json({
  uptime: process.uptime(),
  memory: process.memoryUsage(),
  cpu: {
   load: os.loadavg(),
   cores: os.cpus().length
  }
 });
});

实施可观测性客户端

对于生产应用程序,请使用更全面的解决方案。Last9 的 OpenTelemetry 兼容客户端效果很好:

// 使用 OpenTelemetry 和 Last9 的示例
const { NodeTracerProvider } = require('@opentelemetry/node');
const { ConsoleSpanExporter } = require('@opentelemetry/tracing');
const { CollectorTraceExporter } = require('@opentelemetry/exporter-collector');
const provider = new NodeTracerProvider();
const exporter = new CollectorTraceExporter({
 url: 'https://ingest.last9.io',
 headers: {
  'x-api-key': 'YOUR_API_KEY'
 }
});
provider.addSpanProcessor(
 new SimpleSpanProcessor(exporter)
);
provider.register();
// 用于 Express、MongoDB 等的自动插桩
require('@opentelemetry/auto-instrumentations-node').registerInstrumentations({
 tracerProvider: provider
});

此设置自动捕获 HTTP 请求、数据库调用和外部服务交互。

💡 有关使用 Node.js 设置 OpenTelemetry 的完整分步指南,请参阅 Last9's Getting Started with OpenTelemetry JavaScript guide

你应该考虑哪些自定义 Metrics?

通用 metrics 提供了一个基础,但每个应用程序都有值得追踪的独特方面:

捕获用户体验 Metrics

// 追踪在结帐过程中花费的时间
app.post('/api/checkout', (req, res) => {
 const startTime = Date.now();
 processOrder(req.body)
  .then(result => {
   // 记录结帐时间
   metrics.timing('checkout.time', Date.now() - startTime);
   metrics.increment('checkout.success');
   res.json(result);
  })
  .catch(err => {
   metrics.increment('checkout.error');
   res.status(500).json({ error: err.message });
  });
});

测量缓存效率

// 追踪缓存命中/未命中率
function getCachedData(key) {
 return cache.get(key)
  .then(data => {
   if (data) {
    metrics.increment('cache.hit');
    return data;
   }
   metrics.increment('cache.miss');
   return fetchAndCacheData(key);
  });
}

你应该如何配置有效的告警?

监控的目标是知道何时出现问题。Last9 帮助设置智能告警:

建立多阈值告警

使用分级告警级别而不是二进制好/坏:

  1. Warning : "API 延迟超过 200 毫秒,持续 5 分钟"
  2. Error : "API 延迟超过 500 毫秒,持续 3 分钟"
  3. Critical : "API 错误率超过 5%,持续 1 分钟"

💡 有关为高基数环境设置有效告警的更多详细信息,请查看 Last9's Alert Studio

设计基于相关的告警

对模式而不是单个阈值发出警报:

实施异常检测

对于具有可变负载的 Node.js 应用程序尤其有用:

Last9 的异常检测可以学习你的应用程序的正常行为模式,减少误报,同时捕获实际问题。

💡 现在,使用 AI 和 Last9 MCP 从你的 IDE 立即修复生产 Node.js 日志问题。将实时生产环境上下文(日志、metrics 和追踪)带入你的本地环境,以更快地调试和解决问题。

你应该避免哪些常见错误?

避免这些常见的监控错误:

正确解释内存“锯齿”模式

Node.js 垃圾回收在内存使用中创建锯齿模式。 这是正常的! 查找峰值中的趋势,而不是下降中的趋势。

将 Event Loop Metrics 与性能相关联

繁忙的 event loop 并不总是意味着麻烦。 在优化之前,将其与响应时间和错误率相关联。

选择百分位数而不是平均值

平均响应时间可能会隐藏问题。 100 毫秒的平均值可能意味着所有请求都花费 100 毫秒,或者 95% 的请求花费 50 毫秒,而 5% 的请求花费 1000 毫秒。 始终查看 p95/p99 值。

监控 Socket.IO 通信

对于使用 Socket.IO 的应用程序,还要监控:

何时在生产环境之外使用 Metrics?

Metrics 不仅仅适用于实时系统:

评估新功能

比较新代码前后的 metrics 以尽早发现性能变化。

使用 Metrics 执行负载测试

将负载测试结果与内部 metrics 相关联,以在它们到达生产环境之前找到瓶颈。

比较 A/B 测试性能

使用 metrics 来比较同一功能的不同实现。

💡 想了解更多关于 Node.js 的零代码插桩选项? 请查看我们的 guide on Zero Code Instrumentation

如何开始使用 Node.js Metrics?

这是你进行有效 Node.js 监控的行动计划:

  1. 配置基本运行时 metrics(内存、CPU、event loop)
  2. 实施应用程序级别 metrics(HTTP、数据库、外部服务)
  3. 定义将性能与结果联系起来的业务 metrics
  4. 设置智能、多阈值告警
  5. 为不同的利益相关者创建仪表板
  6. 根据实际事件定期审查和改进你的 metrics

💡 要快速开始使用 Express 应用程序,请查看我们的 OpenTelemetry Express guide,该指南展示了如何在代码更改最少的情况下对 Node.js 应用程序进行插桩。

总结

监控 Node.js 没有一种万能的方法,但了解哪些 metrics 反映了应用程序中的实际问题是一个好的开始。 专注于帮助你更快地调试并做出明智的决定——其他一切都是噪音。

💡 如果您想进一步讨论您的具体用例,我们的 Discord community 是开放的——我们有一个专门用于开发者讨论和支持的频道。

常见问题解答

Node.js 的垃圾回收如何影响我的 metrics?

垃圾回收会导致执行中的定期暂停,表现为延迟 metrics 中的峰值和内存使用中的锯齿模式。 这些是正常的,但过多的 GC 可能表明存在内存问题。 监控 GC 频率和持续时间。

收集这些 metrics 的开销是多少?

现代监控解决方案添加的开销极小(通常 <1% CPU)。 从基本 metrics 开始,然后扩展。 Last9 的代理旨在最大限度地减少影响,同时提供良好的可见性。

我应该插桩所有 API 端点吗?

从你的最关键路径开始。 对于电子商务网站,这可能是产品浏览、购物车和结帐流程。 根据客户影响添加更多内容。

如何在微服务架构中追踪 Node.js metrics?

相关性是关键。 在服务中使用一致的追踪 ID 和可以连接相关 metrics 的平台。 Last9 可以帮助你完成此操作,让你可以在整个系统中追踪请求。

我应该追踪多少个 metrics?

专注于可操作的 metrics。 如果一个 metric 不能帮助你决定采取什么行动,那么它可能不值得追踪。 质量胜于数量。

日志、metrics 和追踪有什么区别?

如何将 Node.js metrics 与用户体验相关联?

在后端 metrics 的同时实施真实用户监控 (RUM)。 这捕获了实际用户体验,并允许你将后端性能与前端 metrics(如页面加载时间)相关联。

适用于 Node.js 应用程序的良好告警策略是什么?

基于影响的多级告警:

将不同级别路由到适当的渠道(警告通过电子邮件,关键警报通过 PagerDuty)。