跳到主要内容

认识

2024年04月19日
柏拉文
越努力,越幸运

一、认识


要实现一个高效且全面的 Node.js 服务监控,我们需要关注多个关键指标,以确保服务的性能、健康状态和可用性。以下是构建 Node.js 服务监控系统的步骤,包括设计、实现和优化的要点。

二、监控指标


2.1 性能指标

  • 事件循环延迟 (Event Loop Delay):监控 Node.js 事件循环的延迟,评估系统性能。事件循环延迟是监控 Node.js 性能的一个关键指标,直接反映了系统是否出现性能瓶颈。使用 perf_hooks.monitorEventLoopDelay 来获取事件循环延迟的详细统计(需要 Node.js 10.10 以上版本)。如果版本不支持,可以使用 process.hrtime() 来手动计算事件循环延迟。

  • 垃圾回收 (GC):监控垃圾回收的行为和对应用性能的影响。使用 perf_hooks.PerformanceObserver 监控垃圾回收的持续时间、频率和类型。监控 GC 可帮助我们理解内存清理和优化的需要。

  • 内存使用情况:包括堆内存和非堆内存的使用,帮助监控内存泄漏和资源消耗。使用 process.memoryUsage() 来获取内存使用情况(rss, heapUsed, heapTotal, external)。使用 v8.getHeapStatistics() 获取 V8 堆的信息。

  • CPU 使用率:监控 CPU 的整体使用情况,识别是否存在 CPU 密集型操作。使用 os.cpus()process.cpuUsage() 监控 CPU 使用率。可以计算每个核的使用情况,获取 CPU 使用时间,帮助识别 CPU 密集型任务。

  • CPU 负载:通过 CPU 负载来判断系统资源是否充足,避免过载。通过 Node.js 中的 os.loadavg() 方法获取系统的负载平均值(即 1 分钟、5 分钟和 15 分钟的负载平均值)

2.2 服务状态

  • 平均响应时间 (ART):监控服务的响应速度,及时发现性能瓶颈。使用中间件来测量每个请求的响应时间, 帮助定位慢请求

  • 每秒事务数 (TPS):衡量系统的处理能力,反映应用的吞吐量。使用中间件来监控请求数,计算每秒事务数(TPS)。

  • 每秒请求数 (QPS):用于监控服务的请求量,及时发现流量异常。使用中间件来监控请求数,计算每秒请求数(QPS)。

  • 真实请求数 (Real QPS):仅统计成功的请求数,用于评估服务的实际处理能力。使用中间件来监控请求数,计算每秒真实请求数(QPS)。

2.3 系统资源

  • 句柄数 (Handlers):监控系统打开的文件句柄和网络连接数,确保资源不会被耗尽。通常指的是进程中打开的各种资源,如文件描述符、TCP/UDP 套接字、进程的 I/O 等等。每个句柄都占用一些内存,并且可以影响系统的性能。process._getActiveHandles() 返回当前 Node.js 进程的所有活动句柄(如 TCPUDP、定时器、请求等)

三、监控工具


基于 Node.js 的监控需要一个合适的监控工具来收集、分析和展示指标。

3.1 Prometheus + Grafana

Prometheus 用于收集指标数据,Grafana 用于可视化。