FED

©FrontEndDev.org
2015 - 2024
web@2.23.0 api@2.21.1

NodeJS 在生产环境1:部署 alinode 进行性能监控

介绍

alinode 是基于 Node 运行时的应用性能管理解决方案,是阿里云出品的 Node.js 应用服务解决方案,是一套基于社区 Node 改进的运行时环境和服务平台。在社区的基础上我们内建了强大的支持功能,帮助开发者迅速洞见性能细节,快速定位疑难杂症,直探问题根源。

官网 http://alinode.aliyun.com/

主要功能有:

功能描述
内存使用率可以系统地观察到服务器的内存使用情况
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 版本对应关系

alinodenodejs
1.3.04.2.6
1.2.34.2.4
1.2.24.2.3
1.2.14.2.3
1.1.14.2.2
1.0.14.2.1
1.0.04.2.1
0.3.30.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 已解决该问题