Node.js 监控方案
May 15, 2020NodeJsEggJs
介绍
Node.js 在前端的地位越发重要,在前端的另一面后面也逐渐展露手脚。但是,仅仅一些 Demo 只能覆盖企业级应用的部分场景,服务在生产环境的稳定运行依靠的是完善的监控、日志、流程等基础设施。
虽然社区有很多强大的监控系统,但是适合 Egg.js 的稳定且开源的方案并不多,于是二次开发了 egg-exporter
项目收集 Egg.js 性能指标。
使用
指标
Node.js 监控的指标衡量的服务的负载、处理能力、健康状态,下面来介绍一下性能指标的定义。
内存
用于判断在服务器中的占用情况,是否存在内存泄露问题。内存的基本指标可以通过 process.memoryUsage() 方法来获取。
rss
进程驻留内存:Resident Set Size 实际使用物理内存(包含共享库占用的内存)。external
外部内存:V8 管理的,绑定到 Javascript 的 C++ 对象的内存使用情况heapTotal
V8 申请到的堆内存总大小heapUsed
V8 的堆内存使用大小
堆空间分布情况
- new space used,新生代空间的内存使用大小
- old space used,老生代空间的内存使用大小
- map space used,隐藏类空间的内存使用大小
- code space used,代码空间的内存使用大小
- large object space used,大对象空间的内存使用大小
HTTP
- Apdex 性能指数
- QPS
- 响应时间
- 状态码 & 错误率
- 字节大小(吞吐量)
以下指标统计暂不支持
CPU
- 使用率
- 负载(1、5、15)分钟的平均负载(系统还是进程?)
GC 统计
- 垃圾回收时间占比
- 增量回收时长
- 全量回收时长
- 释放空间大小
事件循环延迟
进程存活时长
- 进程生命周期,运行时长。
定时任务
- 时长
- 频率
- 成功率
开源方案
swagger-stats
支持监控 koa 与 express 框架的服务,指标展示看板很人性化,也支持 Prometheus。不过,Egg.js 支持度不好。
egg-prometheus
egg.js 监控插件,采集指标少,仅 http 与 rpc 性能指标,适合二次开发。
Pandora.js
阿里开源 Node.js 监控工具,在 egg.js 上使用过一段时间,但服务不够稳定。
Sandbox
阿里 Node.js 应用程序监视,Docker Compose 的 Sandbox 部署配置。
PM2
通用 Node.js 进程守护工具,附带监控指标。
Express Status Monitor
Express 框架的监控插件。
prom-client
Prometheus 的 Node.js 客户端,可以创建指标类型,用于生成标准的 metrics。
node-prometheus-gc-stats
基于 prom-client 的,用于采集 GC 信息。
appmetrics
node.js 应用指标,支持 prometheus,另外 appmetrics-dash 提供看板功能。
appmetrics-prometheus-client
收集指标集并将其公开 metrics,以便 Prometheus 服务器抓取。
easy-monitor
轻量级实时 Node.js 内核性能监控分析工具,查看文 档。
监控平台
alinode
阿里家 Node.js 监控平台,参考文档
sematext
国外一家提供监控基础设施的服务商。
sentry
一个实时事件日志记录和汇集的平台。