Node.js 在 Linux 上如何监控
小樊
43
2025-11-20 20:04:39
Node.js 在 Linux 上的监控实践
一 监控分层与总体思路
- 应用进程与业务指标:使用 PM2 管理进程、查看资源、收集日志,或在代码中用 process 模块输出关键指标。
- 系统资源层:用 top/htop、vmstat、iostat、free、df 观察 CPU、内存、磁盘 I/O、文件系统。
- 日志链路:用 Winston/Bunyan/Pino 做结构化日志,结合 ELK(Elasticsearch/Logstash/Kibana)/Graylog/Splunk 做检索与可视化。
- 指标与可视化:自建 Prometheus + Grafana 看板,或使用 New Relic、Datadog 等 APM。
- 性能剖析:用 node --inspect/Chrome DevTools 做 CPU/内存分析,定位热点与泄漏。
二 快速上手 PM2 与应用内监控
- 安装与启动
- 安装:sudo npm install -g pm2
- 启动:pm2 start app.js --name my-app
- 常用:pm2 list(查看)、pm2 monit(资源监控)、pm2 logs my-app(日志)、pm2 startup(开机自启)、pm2 save(持久化)
- 进程守护与服务编排
- 使用 systemd 管理 Node 服务,配置 Restart=always 实现崩溃自启,配合 pm2 做多实例与负载均衡。
- 应用内指标示例
- 使用 process.memoryUsage()、process.cpuUsage() 输出常驻内存、堆、CPU 时间等,便于与系统层指标对齐排查。
三 系统级监控与网络诊断
- 资源总览与进程定位:top/htop(按 CPU%/MEM% 排序,定位 Node 进程)。
- 深入系统:vmstat 3(进程/内存/IO/CPU 概览)、iostat -x(磁盘 I/O 瓶颈)、free -m(内存使用)、df -h(磁盘空间)。
- 历史与综合:sar -u 1 3(CPU)、sar -r 1(内存),需安装 sysstat。
- 网络与进程流量:nethogs(按进程看带宽)、iftop(按连接看实时流量)。
四 日志与 APM 的可观测性方案
- 结构化日志
- 库选型:Winston/Bunyan/Pino;输出 JSON,携带 requestId、userId 等上下文,便于检索与聚合。
- 传输与存储:控制台/文件/HTTP 等传输,集中到 ELK/Graylog/Splunk 做分析与告警。
- APM 与可视化
- 商业与托管:New Relic、Datadog 提供事务追踪、错误聚合、依赖地图与仪表盘。
- 自建可观测性:Prometheus 采集指标(如 HTTP 延迟、事件循环延迟、内存/GC 等自定义指标),Grafana 做可视化与阈值告警。
五 性能剖析与故障定位
- CPU/内存热点定位
- 启动:node --inspect app.js,用 Chrome DevTools 的 Performance/Memory 面板采集与快照分析。
- 辅助:结合 PM2 monit 与系统 top/htop 观察资源变化,快速验证修复效果。
- 快速排查清单
- 先看 PM2 日志 与 异常堆栈 → 再看 系统资源(CPU/内存/磁盘/网络)→ 用 DevTools 做 CPU 采样/内存快照 → 回归 业务指标(延迟、吞吐、错误率)确认恢复。