Easy-Monitor
Easy-Monitor是一个轻量级的Node项目性能监控工具,能在线上生产环境运行,主要帮助开发者找出执行时间最久或者超出预期的一系列函数,以及运行过程中v8引擎无法优化的一系列函数。
这个项目源于之前做的解析v8-profiler日志命令行工具,有兴趣的可以看下之前的文章:
按照之前所说的方式,对于开发者来说依旧非常的麻烦,并且不能进行线上运行时的调试,所以就整合集成了下诞生了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. 查看整个项目
如图,点击项目名称,则会对 整个项目所有的进程进行profiling操作,这个所有进程包含:
- 单进程模式下则只有一个主进程
- cluster模式下所有的子进程
b. 查看项目下某一个子进程
如图,在cluster模式下项目会有多个子进程,点击某一个特定的pid,则只会对 此pid对应的子进程进行profiling操作。
c. 多项目部署
如图,Easy-Monitor
支持多项目部署,用法和单项目是一模一样的,可以参考前面的快速开始。那么多项目启动后,监控页面会展示出不同的项目名称和对应的子进程pid。
2. 监控详情页
a. 执行时间超出预期的函数列表
如图,可以追加 querystring
参数的形式自定义预期时间以及展示的条数,如下:
?timeout=你预期的时间(ms)
?long_limit=你想展示的条数
?timeout=你预期的时间(ms)&long_limit=你想展示的条数
b. 耗费时间最久的函数列表
如图,可以追加 querystring
参数的形式自定义展示条数,如下:
?top_limit=你想展示的条数
c. v8引擎无法优化的函数列表
如图,可以追加 querystring
参数的形式自定义展示条数,如下:
?bail_limit=你想展示的条数
V. 测试
git clone下本代码后,使用npm安装依赖,然后执行如下测试脚本:
npm run test
即可看到覆盖率测试报告。
VI. 结语
最后项目地址为:Easy-Monitor
欢迎大家提issue,或者一起开发完善,如果感觉不错,赏个star也是很开心的事情~