使用PM2进行进程管理与实时监控
PM2是Node.js生态中最流行的进程管理工具之一,提供了进程守护、日志管理、实时性能监控等功能,非常适合Debian环境下的Node.js应用监控。
sudo npm install pm2 -g。pm2 start app.js --name "my-node-app"启动应用(将app.js替换为你的入口文件),--name参数用于指定应用名称,便于后续管理。pm2 list命令查看所有由PM2管理的应用状态,包括进程ID、运行状态、CPU/内存使用率、重启次数等信息。pm2 monit命令进入实时监控模式,可直观查看应用的CPU、内存占用趋势,以及日志输出(支持实时滚动)。pm2 logs my-node-app查看应用日志,pm2 flush清空日志,pm2 save保存当前进程列表(防止重启后丢失)。集成Prometheus+Grafana实现指标收集与可视化
Prometheus是一款开源的监控系统,擅长收集和存储时间序列数据;Grafana则是可视化工具,可将Prometheus中的数据转化为直观的图表。
prometheus_2.34.0.linux-amd64.deb),通过sudo dpkg -i命令安装。编辑配置文件/etc/prometheus/prometheus.yml,添加Node.js应用的抓取任务:scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['localhost:9100'] # 假设Node.js应用暴露了/metrics端点
重启Prometheus服务使配置生效:sudo systemctl restart prometheus。prom-client库(npm install prom-client),编写代码暴露指标(如请求次数、响应时间、内存使用量):const promClient = require('prom-client');
const collectDefaultMetrics = promClient.collectDefaultMetrics;
collectDefaultMetrics(); // 收集默认系统指标(CPU、内存等)
// 自定义指标:HTTP请求计数
const httpRequestCounter = new promClient.Counter({
name: 'http_requests_total',
help: 'Total number of HTTP requests',
labelNames: ['method', 'route', 'status']
});
// 在Express路由中记录指标
app.get('/', (req, res) => {
httpRequestCounter.inc({ method: req.method, route: '/', status: 200 });
res.send('Hello World');
});
grafana-8.2.0.linux-amd64.tar.gz),解压后启动服务(sudo ./bin/grafana-server)。访问http://localhost:3000登录(默认账号admin,密码admin),添加Prometheus作为数据源(配置URL为http://localhost:9090)。1860),即可查看CPU使用率、内存占用、请求延迟等指标的实时图表。利用系统自带工具进行基础监控
Debian系统自带的工具可快速查看系统资源使用情况,辅助定位Node.js应用的性能瓶颈。
top更直观。安装命令:sudo apt install htop,运行后可通过方向键排序(如按CPU或内存使用率),查看Node.js进程的资源占用。vmstat 1(每秒刷新一次),重点关注r(运行队列长度)、free(空闲内存)、us(用户态CPU使用率)等指标。iostat -x 1,查看%util(磁盘利用率)、await(IO等待时间)等指标,判断是否因IO瓶颈导致应用变慢。借助第三方APM工具实现深度性能分析
第三方APM(应用性能管理)工具提供更全面的性能洞察,包括请求链路追踪、错误分析、数据库查询监控等。
npm install newrelic --save),配置newrelic.js文件(填写license key),重启应用后,New Relic会自动收集性能数据(如响应时间、数据库查询耗时、错误堆栈)。通过Web控制台查看应用拓扑图、慢请求分析等。sudo apt install datadog-agent),配置datadog.yaml文件(开启Node.js集成),在应用中安装dd-trace库(npm install dd-trace),通过require('dd-trace').init()初始化。Datadog支持监控请求延迟、异常、资源使用等,并提供告警功能。使用Easy-Monitor进行轻量级监控
Easy-Monitor是基于Egg.js的Node.js性能监控工具,适合中小型应用,提供进程监控、错误日志、依赖安全等功能。
easy-monitor(npm install easy-monitor -g),在项目入口文件(如app.js)中引入:require('easy-monitor')('your-project-name')。http://localhost:12333即可查看监控面板,包括CPU/内存使用率、请求统计、错误日志等。内置模块实现自定义监控
Node.js内置的process和os模块可用于获取应用的基本性能指标,适合需要自定义监控的场景。
process.memoryUsage()获取内存占用情况(单位:字节),包括rss(常驻内存)、heapUsed(堆已使用)、heapTotal(堆总大小)。示例:setInterval(() => {
const memory = process.memoryUsage();
console.log(`Memory Usage: RSS=${(memory.rss / 1024 / 1024).toFixed(2)}MB, Heap=${(memory.heapUsed / 1024 / 1024).toFixed(2)}MB`);
}, 5000); // 每5秒打印一次
process.cpuUsage()获取CPU时间(单位:微秒),结合os.cpus()计算CPU使用率。示例:const os = require('os');
let startCpu = process.cpuUsage();
setInterval(() => {
const endCpu = process.cpuUsage(startCpu);
const userCpu = (endCpu.user / 1000000).toFixed(2); // 用户态CPU时间(秒)
const systemCpu = (endCpu.system / 1000000).toFixed(2); // 内核态CPU时间(秒)
const totalCpu = parseFloat(userCpu) + parseFloat(systemCpu);
console.log(`CPU Usage: User=${userCpu}s, System=${systemCpu}s, Total=${totalCpu}s`);
}, 5000);
os.totalmem()(总内存)、os.freemem()(空闲内存)、os.loadavg()(系统负载)获取系统级资源信息。