NodeJS 在生产环境1:部署 alinode 进行性能监控
介绍
alinode 是基于 Node 运行时的应用性能管理解决方案,是阿里云出品的 Node.js 应用服务解决方案,是一套基于社区 Node 改进的运行时环境和服务平台。在社区的基础上我们内建了强大的支持功能,帮助开发者迅速洞见性能细节,快速定位疑难杂症,直探问题根源。
主要功能有:
功能 | 描述 |
---|---|
内存使用率 | 可以系统地观察到服务器的内存使用情况 |
CPU使用率 | 可以直观反映服务器的CPU资源占用情况 |
Load情况 | Load1/5/15的值可以反映服务器的繁忙程度 |
异常日志监控 | AgentX可以监控异常日志文件,助你排查应用程序的bug |
内存堆监控 | 内存堆信息可以查看进程占用的总内存(rss),申请的堆大小(heap_total),使用的堆大小(heap_used) |
堆空间监控 | 堆空间信息可以细致到每一个新生代空间和老生代空间的使用数据 |
GC监控 | GC时间可以有效反馈进程的垃圾回收状况 |
HTTP监控 | HTTP监控可以反馈进程对http请求的响应情况 |
句柄监控 | 句柄监控可以得到事件循环中仍活跃的句柄数 |
定时器监控 | 定时器监控可以帮你有效查看进程中的定时器数量 |
堆快照生成 | 让运行中的进程生成当前的内存堆快照到磁盘上,以便分析 |
堆快照分析 | 堆快照分析可以帮您定位到内存泄漏之类的问题 |
CPU profile生成 | 让运行中的进程抓取3分钟的CPU profiling数据到磁盘中。3分钟后自动关闭CPU profiling,并不再影响应用的执行效率 |
CPU profile分析 | CPU profile分析可以精准定位生产环境中代码的运行性能问题 |
Basic Prof生成 | 让运行中的进程抓取3分钟的Basic prof数据到磁盘中,该操作等价于启动时的--prof标志。但这里可以在线打开,3分钟后自动关闭 |
Basic Prof分析 | Basic Prof在线分析可以找到应用中最耗时的函数是哪些 |
GC trace | 在线对进程进行3分钟的GC追踪,生成GC日志到磁盘中。3分钟后自动关闭 |
GC日志分析 | 对GC日志进行分析,得到GC运行的细节特征 |
火焰图 | 火焰图可以有效地反馈CPU分别消耗在什么地方 |
监控数据 | 所有的实时监控数据的存储 3天 30天 |
中间文件 | 如堆快照文件,cpu profile,gc log等文件的存储 |
特定环境部署 | 提供私有环境、企业环境下的服务部署 |
集成到企业系统 | 支持将alinode的功能集成到企业自有的内部系统中 |
申请
点击首页的“立即试用”,登录之后会跳转到控制台首页。点击添加应用:
- 应用:相当于分类的意思,每个应用下面可以有多个实例
- 实例:物理服务器,每个实例可以有多个 node 进程
- 进程:被性能监控的进程
新建应用完毕,点击左边的“应用设置”菜单
这里的 App ID 和 App secret 待会要用到。
安装
目前 alinode 尚属于 beta 阶段,可以先试用,部署步骤不是特别复杂。
安装 tnvm
tnvm(taobao node version manage)是淘宝使用的 node 版本管理,可以管理 nodejs、alinode 的版本,使用简单快捷,比其他同类工具方便很多。
wget -qO- https://raw.githubusercontent.com/aliyun-node/tnvm/master/install.sh
| bash
安装了 tnvm 之后还不能立即使用,必须 source 配置文件
source ~/.bashrc
也有可能是~/.profile
或~/.zshrc
等。
完成之后,可以使用
tnvm -v
安装 alinode
先列出可以安装的 alinode 版本(远程的 alinode)
➜ tnvm ls-remote alinode
alinode-v0.3.3
alinode-v0.3.4
alinode-v1.0.1
alinode-v1.1.1
alinode-v1.2.1
alinode-v1.2.2
alinode-v1.2.3
alinode-v1.3.0
alinode 与 nodeJS 版本对应关系
alinode | nodejs |
---|---|
1.3.0 | 4.2.6 |
1.2.3 | 4.2.4 |
1.2.2 | 4.2.3 |
1.2.1 | 4.2.3 |
1.1.1 | 4.2.2 |
1.0.1 | 4.2.1 |
1.0.0 | 4.2.1 |
0.3.3 | 0.12.7 |
使用
tnvm install alinode-v1.3.0
安装。
安装完成之后,使用
tnvm use alinode-v1.3.0
使用该版本的 alinode,使用 node 命令
➜ node
➜ process.alinode
'v1.3.0'
环境变量
ENABLE_NODE_LOG
:是否记录 node 日志。它会将 node 运行产生日志记录在这里,如 CPU 使用率等信息,文件名格式为node-YYYY-MM-DD.log
。NODE_LOG_DIR
:agentx 记录日志的目录。
echo '\nexport ENABLE_NODE_LOG=YES' >> ~/.bashrc
echo '\nexport NODE_LOG_DIR=~/.alinode/logs/' >> ~/.bashrc
source ~/.bashrc
设置完成之后,测试一下:
➜ echo $ENABLE_NODE_LOG
YES
安装命令集
命令集为一组 alinode 服务执行任务所需要的命令集合,alinode 服务有且仅有执行这些命令的权限。
git clone https://github.com/aliyun-node/commands ~/.alinode/scripts
下载下来即可。
安装 agentx
AgentX 是为 alinode 服务而研发的常驻代理服务,可以帮助执行一些监控和诊断的操作。它同时是一个 npm 命令行工具。
npm install -g agentx
安装完成之后:
➜ agentx -v
1.4.0
配置 agentx
mkdir -p ~/.alinode/agentx
cd ~/.alinode/agentx
vi configs.json
输入:
{
"server": "120.55.151.247:8080",
"appid": "应用的 App ID",
"secret": "应用的 App secret",
"cmddir": "刚才安装命令集的目录 /home/cloudcome/.alinode/scripts",
"logdir": "/home/cloudcome/.alinode/logs/",
"reconnectDelay": 10,
"heartbeatInterval": 60,
"reportInterval": 60,
"error_log": ["Node 业务层产生的错误日志,如/root/.logs/node-err.#YYYY#-#MM#-#DD#.log"]
}
需要改动的地方已用汉字标明了。配置中的#YYYY#
、#MM#
、#DD#
是通配符,如果您的异常日志是按时间生成的,请使用它。
到此需要安装的东西都已经全部安装完成了。
部署
启动 agentx
➜ nohup agentx ~/.alinode/agentx/configs.json &
nohup: 忽略输入并把输出追加到"nohup.out"
➜ exit
启动之后,就可以在 alinode 控制台看到监控信息。
重启 node 进程
如果你使用的是 pm2 管理进程的话,需要先 kill 掉
pm2 kill
然后重新启动你的应用
此时在控制台就可以看到所有进程都被监控了(如果没有的话,可能需要 2 - 10 分钟之后)。
问题
npm prefix
安装完 alinode,会自动修改 npm 默认的 prefix 参数(如果你有重新修改过,则不会有影响):
➜ npm config get prefix
/Users/cloudcome/.tnvm/versions/alinode/v1.3.0
此时需要手动修改为 npm 默认值:
➜ npm config set prefix /usr/local
如果你也安装了 cnpm,那么需要同样修改:
➜ cnpm config set prefix /usr/local
webstorm debug
alinode 是无法直接进行 webstorm 的 debug 模式的,需要使用原生 node。
更新到 alinode-v1.5.0 已解决该问题