Node.js 监控方案

May 15, 2020

介绍

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

一个实时事件日志记录和汇集的平台。