如何在Linux服务器上监控Node.js应用
导读:如何在Linux服务器上监控Node.js应用 监控Node.js应用的核心需求包括进程状态追踪、资源使用(CPU/内存)、性能指标分析、日志管理与故障预警。以下是Linux环境下常用的监控方法,覆盖从基础到高级的场景: 1. 基础系统工具...
如何在Linux服务器上监控Node.js应用
监控Node.js应用的核心需求包括进程状态追踪、资源使用(CPU/内存)、性能指标分析、日志管理与故障预警。以下是Linux环境下常用的监控方法,覆盖从基础到高级的场景:
1. 基础系统工具:快速查看进程与资源使用
Linux自带的命令行工具可快速获取Node.js进程的基础状态,适合临时检查或脚本自动化:
- top/htop:
top
命令实时显示系统中所有进程的CPU、内存占用(按P
键按CPU排序,M
键按内存排序);htop
是其增强版(需安装:sudo apt install htop
),提供更直观的界面、进程树及滚动日志功能,可通过F3
键搜索“node”进程快速定位。 - ps命令:通过
ps aux | grep node
过滤出所有Node.js进程,查看其PID、CPU/内存占比及启动命令;结合watch -n 1 "ps aux | grep node"
可每秒刷新一次进程状态。 - vmstat/iostat:
vmstat 1
(每秒刷新)显示系统整体资源使用(如进程数、内存交换、IO等待);iostat
(需安装sysstat
包)监控磁盘IO负载,帮助定位I/O瓶颈。
2. 进程管理工具:实现稳定运行与便捷监控
生产环境需确保Node.js应用持续运行、自动重启,进程管理工具是关键:
- PM2:最流行的Node.js进程管理器,支持性能监控、日志管理、负载均衡及集群部署。
- 安装与启动:
npm install pm2 -g
;pm2 start app.js --name "my-app"
(指定应用名称)。 - 核心命令:
pm2 status
(查看所有进程状态)、pm2 monit
(实时监控CPU/内存/日志)、pm2 logs
(查看实时日志)、pm2 save
(保存当前进程列表)、pm2 startup
(设置开机自启)。
- 安装与启动:
- Systemd:将Node.js应用配置为系统服务,实现开机自启、状态管理与日志收集(适合需要深度集成的场景)。
- 创建服务文件:
sudo vi /etc/systemd/system/my-node-app.service
,内容如下:[Unit] Description=My Node.js Application After=network.target [Service] ExecStart=/usr/bin/node /path/to/your/app.js WorkingDirectory=/path/to/your/app User=www-data Group=www-data Restart=always Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
- 启用与查看:
sudo systemctl daemon-reload
;sudo systemctl start my-node-app
;sudo systemctl enable my-node-app
(开机自启);sudo systemctl status my-node-app
(查看状态);journalctl -u my-node-app -f
(查看实时日志)。
- 创建服务文件:
3. 第三方APM工具:深度性能分析与可视化
对于生产环境,需更全面的性能指标(如请求延迟、数据库查询耗时、错误堆栈)、可视化 dashboard及告警,推荐以下工具:
- PM2内置监控:
pm2 monit
提供实时CPU/内存/日志监控,pm2 plus
(付费)支持应用性能分析、错误跟踪及用户会话监控。 - Prometheus + Grafana:开源组合,适合自定义监控场景。
- Prometheus:收集Node.js应用的指标(需安装
prometheus-node-exporter
或使用pm2-prometheus
插件); - Grafana:配置Prometheus为数据源,创建 dashboard 展示CPU、内存、请求速率等指标(参考Grafana官方模板)。
- Prometheus:收集Node.js应用的指标(需安装
- New Relic/Datadog:商业APM工具,提供端到端性能监控(从前端到后端)、错误分析、分布式追踪及告警功能,适合中大型企业(如New Relic需安装
newrelic
Node.js agent,参考官方文档)。
4. 日志管理:集中收集与分析
日志是排查问题的关键,需将Node.js日志集中收集、存储及分析:
- 内置日志:使用
console.log
或winston
/morgan
等日志库记录关键事件(如请求、错误),例如:const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.File({ filename: '/var/log/node-app/error.log', level: 'error' } ), new winston.transports.File({ filename: '/var/log/node-app/combined.log' } ), ], } );
- 日志收集工具:
- ELK Stack(Elasticsearch+Logstash+Kibana):Logstash收集日志,Elasticsearch存储并索引,Kibana可视化分析(适合大规模日志场景);
- Graylog:开源日志管理工具,支持实时日志收集、搜索及告警(配置GELF格式接收Node.js日志);
- Loki+Promtail+Grafana:轻量级日志方案,适合与Prometheus集成(Promtail收集日志,Loki存储,Grafana展示)。
5. 自定义监控脚本:灵活扩展监控维度
若需监控特定业务指标(如订单量、缓存命中率),可编写自定义脚本,定期采集数据并发送至监控系统:
- 示例:使用
process.memoryUsage()
获取内存使用情况,process.cpuUsage()
获取CPU占用,通过axios
发送至Prometheus Pushgateway或直接写入InfluxDB:setInterval(() => { const memory = process.memoryUsage(); const cpu = process.cpuUsage(); console.log(`Memory: ${ Math.round((memory.heapUsed / 1024 / 1024) * 100) / 100} MB`); console.log(`CPU: ${ Math.round((cpu.user / 1000000) * 100) / 100} ms`); } , 5000);
- 结合
cron
定时任务,定期执行脚本并将结果写入日志或数据库(如*/5 * * * * /usr/bin/node /path/to/monitor.js > > /var/log/node-monitor.log
)。
以上方法可根据应用规模、团队技术栈及预算选择组合使用。例如:
- 小型项目:PM2 + htop + 简单日志文件;
- 中型企业:PM2 + Prometheus + Grafana + ELK;
- 大型企业:New Relic/Datadog + 自定义监控脚本 + 分布式日志系统。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 如何在Linux服务器上监控Node.js应用
本文地址: https://pptw.com/jishu/733555.html