使用PM2进行进程与性能监控
PM2是Node.js生态中最流行的进程管理工具之一,集进程守护、实时监控、日志管理于一体,非常适合Ubuntu环境下监控Node.js应用。
sudo npm install pm2 -g
pm2 start app.js --name "my-node-app"
pm2 monit命令打开交互式界面,可实时查看应用的CPU、内存使用率、日志输出及进程状态;也可通过pm2 list查看所有进程的概览信息,pm2 show <app_name>获取特定进程的详细指标(如内存占用、重启次数、运行时间)。pm2 logs命令可实时查看应用日志,支持按进程名称过滤;还可将日志保存到文件(如pm2 logs > app.log),方便后续分析。系统级命令行工具监控
Ubuntu自带的命令行工具可直接查看系统资源占用,快速定位Node.js进程的资源消耗问题。
top更直观。安装后运行htop,可通过F3搜索“node”关键词,快速找到Node.js进程,查看其实时CPU、内存、线程使用情况。top命令实时显示系统进程的资源占用排名(按P键按CPU排序,M键按内存排序);uptime命令可快速查看系统平均负载(1分钟、5分钟、15分钟的平均进程数)。vmstat 1每秒输出系统内存、进程、IO、CPU等活动情况(重点关注free内存、si/so交换分区使用量);iostat 1监控磁盘IO性能(如tps每秒传输次数、await平均IO等待时间)。第三方监控工具(可视化与深度分析)
对于生产环境,需要更全面的监控(如指标趋势、告警、链路追踪),推荐以下工具组合:
prom-client库,定义指标(如HTTP请求耗时、活跃请求数、内存使用量),并暴露/metrics端点;② 配置Prometheus抓取该端点;③ 在Grafana中添加Prometheus数据源,导入Node.js监控模板(如“Node Exporter Full”),即可查看实时指标。newrelic、@datadog/datadog-api-client),配置API密钥,即可自动采集性能数据(如请求延迟、数据库查询时间、函数调用栈),无需修改大量代码。日志记录与分析
日志是监控的重要补充,通过记录应用关键事件(如请求、错误、数据库操作),可快速定位问题根源。
const winston = require('winston');
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
new winston.transports.Console(),
new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
new winston.transports.File({ filename: 'logs/combined.log' })
]
});
logger.info('Application started');
logger.error('Database connection failed');
健康检查与系统服务监控
/health接口,返回应用状态(如运行时间、内存使用、依赖服务状态),方便监控系统定期探测(如Prometheus的blackbox_exporter)。示例代码:app.get('/health', (req, res) => {
const healthStatus = {
uptime: process.uptime(),
memoryUsage: process.memoryUsage(),
status: 'ok',
timestamp: Date.now()
};
res.status(200).json(healthStatus);
});
/etc/systemd/system/my-node-app.service:[Unit]
Description=Node.js Application Service
After=network.target
[Service]
ExecStart=/usr/bin/node /path/to/your/app.js
WorkingDirectory=/path/to/your/app
User=your-user
Group=your-group
Environment=NODE_ENV=production
Restart=always
[Install]
WantedBy=multi-user.target
启动服务并设置开机自启:sudo systemctl start my-node-app && sudo systemctl enable my-node-app;通过sudo systemctl status my-node-app查看服务状态。