alinode 新手村生存指南

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 而已。

1
2
3
4
5
6
7
8
9
10
# 安装版本管理工具 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 演示,写入如下配置。

1
2
3
4
{
"appid": "76675",
"secret": "0342cccd7ed8fc29a0f97e59f871d020533385f3"
}

ps: 详细配置,请参阅 @alicloud/agenthub 模块

我这里的目录结构如下:

1
2
3
4
5
├── node_modules
├── alinode.config.json
├── app.js
├── package.json
└── yarn.lock

tnvm 版本使用

先执行 agenthub start alinode.config.json 命令,开启上报工具。
然后启动你的应用:

1
2
3
4
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 配置文件,直接参数配置。

官方镜像

1
2
3
4
5
6
7
8
9
10
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

1
2
3
4
5
6
7
8
9
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 开源后,这一天应该不会远的。