共计 3598 个字符,预计需要花费 9 分钟才能阅读完成。
原文博客: http://www.52cik.com/2018/10/…
alinode 是阿里云产品 Node.js 性能平台 的前身。以前是收费项目,2018 年初集成到阿里云后就完全免费了,我也是第一时间接入测试并上线使用。在群里安利了不少小伙伴,但真正使用的不是很多,因为大部分都不知道 node 是怎么跑起来的。说多了都是泪,所以打算写个简单教程,让小白也可以分分钟上手 alinode 这种神兵利器。
基础知识
先来了解下 alinode 是个啥东西吧,这里我找了些资料。
有朴灵大大在 阿里 D2 前端技术论坛——2015 融合 上的分享 alinode 与 Node 应用性能管理(1)、alinode 与 Node 应用性能管理(2)。
还有 Node.js 性能平台官方文档 以及 云栖社区 Node.js 性能平台官方博客。
好了,文档比较多,如果你懒的看,那我简单一句话帮你概括下。alinode 就是朴灵大大修改了 node 源码,可以将 cpu、内存、GC 等数据导出的 node 版本。目前没有开源,不过他们准备尽快开源。
由于没有开源,所以一些小伙伴不放心,生怕有后门,泄露公司机密。其实完全没必要担心,这种事情简单抓包就可以看出有没有后门了。而且我也有幸在机缘巧合下看到了 alindoe 源码,对比了官方源码后可以很负责任的告诉你完全没有后门。
如何使用
如果你会在线上安装 node 并且启动你的应用,那么你就会使用。原理是一样的,剩下的,不管你怎么启动项目,直接启动,用 pm2 或者其他方法,都无所谓。
安装使用 (tnvm 版本)
官网推荐使用 tnvm 安装,就是 nvm 的淘宝镜像版本,并且加入了 alinode 而已。
# 安装版本管理工具 tnvm,安装过程出错参考:https://github.com/aliyun-node/tnvm
wget -O- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh | bash
source ~/.bashrc # 加载配置,使当前环境立即生效
tnvm ls-remote alinode # 查看需要的版本
tnvm install alinode-v3.12.0 # 安装需要的版本
tnvm use alinode-v3.12.0 # 使用需要的版本
npm install @alicloud/agenthub -g # 安装 agenthub
安装好 alinode 后,还安装了一个 @alicloud/agenthub 模块。官网介绍:agenthub 是由 Node.js 性能平台提供的 agent 命令程序,用于协助您的 Node 应用性能数据上报和问题诊断。
简单说就是将 alinode 生成的 cpu 内存 GC 等数据上传到 Node.js 性能平台 上,这样我们就可以在平台上看到监控数据了。
好了到此安装完成,然后就是创建应用和使用了。
安装使用 (docker 版本)
官网提供了 docker 镜像 docker pull registry.cn-hangzhou.aliyuncs.com/aliyun-node/alinode。但也一直被吐槽太 TM 大了,都是些啥啊,咋就这么大,,其实官网 node 镜像也一样大。
但在 9 月份的时候,他们提供了 alpine 版本,截止目前才 79.5MB 大小,非常接近官网 node 的 alpine 版本镜像。快来试试吧 docker pull registry.cn-hangzhou.aliyuncs.com/aliyun-node/alinode:3-alpine。
由于没有提供 Dockerfile,不少小伙伴也是心慌慌,简直就是个黑盒,所以也是一直观望状态。于是我花了一点时间分析了官网镜像,并提取了 Dockerfile 模板,方便大家使用,而且可以随心所欲的魔改。
模板在这 alinode Dockerfile 官网镜像模板,里面有详细分析原理和提取 Dockerfile 的文章,想知道原理的可以看看。好了,现在 Dockerfile 也有了,没有理由不用了吧。
那么开始使用 docker alindoe,由于大家使用 docker 的姿势不同,所以还是参考官网文档。如果你使用 pm2 的,也可以试试我魔改过的版本 docker-alinode
创建应用,监控 node 项目
上面简单说了 tnvm 和 docker 的安装使用方法,但还没说具体怎么使用。接下来正式开始接入 alinode 平台了。
创建应用
打开 https://node.console.aliyun.com,没有账号的,去注册个账号,反正免费的。
创建应用。
复制 App ID 和 App Secret 的值。
在你的项目根目录创建一个配置,配置名随便,我这里用 alinode.config.json 演示,写入如下配置。
{
“appid”: “76675”,
“secret”: “0342cccd7ed8fc29a0f97e59f871d020533385f3”
}
ps: 详细配置,请参阅 @alicloud/agenthub 模块
我这里的目录结构如下:
├── node_modules
├── alinode.config.json
├── app.js
├── package.json
└── yarn.lock
tnvm 版本使用
先执行 agenthub start alinode.config.json 命令,开启上报工具。然后启动你的应用:
ENABLE_NODE_LOG=YES node app.js # 直接启动
# 或者
ENABLE_NODE_LOG=YES pm2 start pm2.js # PM2 启动
# 或者其他任何方式,但要加上 ENABLE_NODE_LOG=YES 开启日志。
我之前尝试将 ENABLE_NODE_LOG 写到 pm2 配置中,结果无效,然后也没去研究为什么,如果有大佬知道原因还请告知。
然后等待 1 分钟后,即可在平台上看到监控数据了。agenthub 默认上报时间是可以改的,自己根据官网文档修改吧。
docekr 版本使用
docker 版本可以省略创建 alinode.config.json 配置文件,直接参数配置。
官方镜像
docker run -d \
-p 8000:8000 \
-w /app \
-v $PWD:/app \
-e “APP_ID=76675” \
-e “APP_SECRET=0342cccd7ed8fc29a0f97e59f871d020533385f3” \
-h my-alinode \
–name my-alinode \
registry.cn-hangzhou.aliyuncs.com/aliyun-node/alinode:3-alpine \
node app.js
使用我封装的镜像,内置 pm2
docker run -d \
-p 8000:8000 \
-v $PWD:/app \
-e “APP_ID=76675” \
-e “APP_SECRET=0342cccd7ed8fc29a0f97e59f871d020533385f3” \
-h my-alinode \
–name my-alinode \
toomee/alinode:3-alpine \
pm2-runtime start app.js
ps: docker 中使用 pm2-runtime 而不是 pm2 命令。ps: 如果你的 pm2 配置是 ecosystem.config.js,那么可以省略最后一行。
查看监控数据
启动后等待 1 分钟,即可看到监控数据。
如图,已经有数据了。
我们压测一下,然后看看数据。
点击实例面板,可以看到进程基本信息,这里只有一个进程,如果你开了多进程,都会在这里显示的。下面的 进程指标分布中 好像显示所有 node 进程,可以看到他把 agenthub 进程也显示出来了。
由于测试项目刚启动没啥数据,所以用我们线上项目截了张图。
可以看到 内存 cpu 会有两条曲线,一条是系统占用量,一条是 node 占用量。
还有 异常日志、Trace、模块依赖 你会发现没数据,根据 agenthub 官网配置配置好后,即可看到数据。慢 HTTP 日志 是访问你要用和你请求后台接口的那些较慢的请求记录。
有了这些数据,就可以帮助我们优化应用以及快速定位到问题了。
抓取性能数据
在 进程数据 页面右下角有个 抓取性能数据 区域,这些就是帮助我们排查 cpu 莫名标高,内存泄漏 等问题的工具。这里就不介绍了,等有空的时候单独写几篇,或者看 官方博客 上的例子。
小结
至此 alinode 基本使用算是差不多了。
哪怕高级功能暂时不会用,那用 alinode 来当个监控也不错啊,在报警面板中配置报警规则,比如 cpu 飚高,load 飚高后报警,支持钉钉机器人推送,非常方便。
这次介绍了 alinode 的 tnvm 和 docker 版本的使用方法。目的是安利更多的人来使用,为了你们的项目健康,也为了 alinode 和 node 社区的发展。如果有一天 node 官网内置了 alinode 的功能,并提供的 web 监控平台 源码,那就可以搭建属于自己的监控环境了。
等到 alindoe 开源后,这一天应该不会远的。