Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

轻量级易部署Node性能监控工具:Easy-Monitor

$
0
0

Easy-Monitor

Easy-Monitor是一个轻量级的Node项目性能监控工具,能在线上生产环境运行,主要帮助开发者找出执行时间最久或者超出预期的一系列函数,以及运行过程中v8引擎无法优化的一系列函数。

这个项目源于之前做的解析v8-profiler日志命令行工具,有兴趣的可以看下之前的文章:

手把手测试你的JS代码性能

按照之前所说的方式,对于开发者来说依旧非常的麻烦,并且不能进行线上运行时的调试,所以就整合集成了下诞生了Easy-Monitor。

I. 特点

  • 轻量级
  • 运行时
  • 无状态
  • 支持线上的cluster模式和多项目部署

II. 三步快速开始

安装

在控制台执行下面的命令安装:

npm install easy-monitor

项目中引入

在你的项目入口文件中按照如下方式引入,传入你的项目名称:

const easyMonitor = require('easy-monitor');
easyMonitor('你的项目名称');

访问监控页面

打开你的浏览器,输入以下地址,即可看到进程相关信息:

http://127.0.0.1:12333

以上三步即可开启你的专属性能监控服务,非常简单!

III. 定制化

Easy-Monitor也为大家保留了一些重要的属性可以方便定制化,依靠执行 require('easy-monitor')(object)函数时传入一个对象,来替代默认传入的项目名称的字符串,这个传入的对象可以包含如下属性:

  • logLevel:Number类型,默认是2,用来设置日志级别:

    • 0:不输出任何日志
    • 1:输出error日志
    • 2:输出info日志
    • 3:输出debug日志
  • appName:String类型,默认是 process.title 获取到的值,用来设置项目名称

  • httpServerPort:Numver类型,默认是 12333,用来设置监控HTTP服务器的侦听端口

  • filterFunction:函数,默认将profiling的结果中过滤掉了包含node_modules、anonymous以及路径中不包含 “/” 的系统函数,开发者可以自己编写过滤函数来找出自己想要的结果,入参和返回值:

    • filePath:String类型,profiling结果函数所在的文件全路径
    • funcName:String类型,pfofiling结果函数的名称
    • 返回值:为true表示保留结果,false表示过滤掉
  • monitorAuth:函数,默认不鉴权,用来进行登入监控页面的鉴权,开发者可以自己编写鉴权函数,入参和返回值:

    • user:String类型,为用户名
    • pass:String类型,为用户键入密码
    • 返回值:Promise对象实例,resolve(true)表示鉴权通过,resolve(false)或者reject表示鉴权失败

IV. 监控页面一览

1. 首页

a. 查看整个项目

Index_Project.jpeg

如图,点击项目名称,则会对 整个项目所有的进程进行profiling操作,这个所有进程包含:

  • 单进程模式下则只有一个主进程
  • cluster模式下所有的子进程

b. 查看项目下某一个子进程

Index_Pid.jpeg

如图,在cluster模式下项目会有多个子进程,点击某一个特定的pid,则只会对 此pid对应的子进程进行profiling操作。

c. 多项目部署

Index_Multi.jpeg

如图,Easy-Monitor支持多项目部署,用法和单项目是一模一样的,可以参考前面的快速开始。那么多项目启动后,监控页面会展示出不同的项目名称和对应的子进程pid。

2. 监控详情页

a. 执行时间超出预期的函数列表

Detail_Long.jpeg

如图,可以追加 querystring参数的形式自定义预期时间以及展示的条数,如下:

  • ?timeout=你预期的时间(ms)
  • ?long_limit=你想展示的条数
  • ?timeout=你预期的时间(ms)&long_limit=你想展示的条数

b. 耗费时间最久的函数列表

Detail_Top.jpeg

如图,可以追加 querystring参数的形式自定义展示条数,如下:

  • ?top_limit=你想展示的条数

c. v8引擎无法优化的函数列表

Detail_Bail.jpeg

如图,可以追加 querystring参数的形式自定义展示条数,如下:

  • ?bail_limit=你想展示的条数

V. 测试

git clone下本代码后,使用npm安装依赖,然后执行如下测试脚本:

npm run test

即可看到覆盖率测试报告。

VI. 结语

最后项目地址为:Easy-Monitor

欢迎大家提issue,或者一起开发完善,如果感觉不错,赏个star也是很开心的事情~


Viewing all articles
Browse latest Browse all 14821

Trending Articles