在 Node.js 应用的开发和运维过程中,监控是非常重要的一环。PM2 是一个流行的 Node.js 进程管理工具,而 PMX 是一个 PM2 的扩展模块,可以提供更加细粒度的监控能力。本文将介绍如何在 PM2 中使用 PMX 对 Node.js 应用进行细粒度监控。
安装 PM2 和 PMX
首先需要安装 PM2 和 PMX。可以使用 npm 进行安装:
npm install -g pm2 pmx
配置 PMX
安装完 PMX 后,需要在 Node.js 应用的入口文件中引入 PMX 模块,并配置 PMX:
const pmx = require('pmx'); pmx.init({ http: true, // 启用 HTTP API network: true, // 启用网络监控 transactions: true, // 启用事务监控 ignore_routes: [/socket\.io/] // 忽略某些路由 });
在这个例子中,我们开启了 HTTP API、网络监控和事务监控,并忽略了包含 "socket.io" 的路由。
监控指标
PMX 提供了丰富的监控指标,可以帮助我们了解 Node.js 应用的运行情况。以下是一些常用的监控指标:
- Event Loop Latency:事件循环延迟
- Memory:内存使用情况
- HTTP Requests/sec:每秒 HTTP 请求次数
- HTTP Response Time:HTTP 响应时间
- Transactions/sec:每秒事务次数
- Transactions Response Time:事务响应时间
- Network Throughput:网络吞吐量
- Network Errors/sec:每秒网络错误次数
可以使用 PMX 的 HTTP API 获取这些监控指标。例如,以下代码可以获取当前应用的 Event Loop Latency:
-- -------------------- ---- ------- ----- --- - --------------- ---------- ---- ---------------------- ------- ----- -- ----- ---- -- - ----- ------- - -------------------------------------------- ---------- ------- --- ---
在这个例子中,我们创建了一个 HTTP API,当收到 GET 请求时,返回当前应用的 Event Loop Latency。pmx.getProbeData('event-loop-latency') 可以获取 Event Loop Latency 的监控数据,mean 表示平均值。
示例代码
以下是一个完整的示例代码,演示如何使用 PMX 对 Node.js 应用进行细粒度监控:
-- -------------------- ---- ------- ----- --- - --------------- ----- ---- - ---------------- ---------- ----- ----- -------- ----- ------------- ----- -------------- -------------- --- ----- ------ - ----------------------- ---- -- - ----- ----- - ----------- ------------------ ---------------- --------------- -------------- ---------- ----- -------- - ---------- - ------ ---------------- - ------- ----------- ---- -------- ------- --------------- ----- -------- --- --- ------------------- -- -- - ------------------- --------- -- ------------------------ --- ---------- ---- ---------------------- ------- ----- -- ----- ---- -- - ----- ------- - -------------------------------------------- ---------- ------- --- --- ---------- ---- ---------- ------- ----- -- ----- ---- -- - ----- ------ - --------------------------------- ---------- ------ --- --- ---------- ---- -------- ------- ----- -- ----- ---- -- - ----- ---- - ------------------------- ---------- ---- --- --- ---------- ---- ---------------- ------- ----- -- ----- ---- -- - ----- ------------ - --------------------------------- ---------- ------------ --- ---
在这个例子中,我们创建了一个 HTTP 服务器,并在每次请求结束后使用 pmx.emit('http', ...) 发送 HTTP 监控数据。我们还创建了四个 HTTP API,分别获取 Event Loop Latency、内存使用情况、HTTP 监控数据和事务监控数据。
结论
PMX 提供了丰富的监控能力,可以帮助我们了解 Node.js 应用的运行情况。在 PM2 中使用 PMX 可以实现更加细粒度的监控,帮助我们快速发现和解决问题。本文介绍了如何在 PM2 中使用 PMX 进行细粒度监控,并提供了示例代码供参考。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67641921856ee0c1d4267cf2