认识
一、认识
要实现一个高效且全面的 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
进程的所有活动句柄(如TCP
、UDP
、定时器、请求等)
三、监控工具
基于 Node.js
的监控需要一个合适的监控工具来收集、分析和展示指标。
3.1 Prometheus + Grafana
Prometheus
用于收集指标数据,Grafana
用于可视化。