温馨提示×

如何在Linux上监控Node.js应用

小樊
52
2025-09-27 08:55:45
栏目: 编程语言

如何在Linux上监控Node.js应用
在Linux环境下,监控Node.js应用的运行状态(如CPU、内存、进程稳定性)和性能指标(如请求速率、响应时间),需结合进程管理、系统工具、第三方监控及日志分析等多层方案。以下是具体方法:

一、基础进程与系统监控

1. 使用pm2(进程管理与监控工具)

pm2是Node.js生态中最流行的进程管理器,支持进程守护、资源监控、日志管理,适合生产环境使用。

  • 安装与启动:全局安装pm2后,启动应用并指定名称(便于后续管理):
    npm install pm2 -g
    pm2 start app.js --name "my-node-app"
    
  • 核心监控功能
    • 实时监控资源使用:pm2 monit(显示CPU、内存、事件循环延迟等实时数据);
    • 查看应用状态:pm2 status(列出所有管理的应用,包括PID、状态、重启次数);
    • 日志管理:pm2 logs(实时查看应用日志),pm2 logs --lines 100(查看最近100行日志)。
  • 进阶功能:设置应用崩溃自动重启(--restart-delay参数)、集群模式提升性能(pm2 scale my-app 4)。

2. 使用系统自带命令行工具

Linux系统自带的工具可快速查看系统级资源占用,定位Node.js进程的性能瓶颈:

  • top/htop
    • top:实时显示进程的CPU、内存使用率(按P键按CPU排序,M键按内存排序);
    • htop(需安装):增强版top,支持颜色高亮、鼠标操作、进程树查看(安装命令:sudo apt install htop(Debian/Ubuntu)或sudo yum install htop(CentOS/RHEL))。
  • vmstat:查看系统整体资源使用情况(如CPU、内存、IO),每秒刷新一次:
    vmstat 1
    
  • iostat:监控系统输入/输出设备负载(需安装sysstat包):
    iostat -x 1
    
  • systemd(若应用作为服务运行):
    创建服务文件/etc/systemd/system/my-node-app.service,内容如下:
    [Unit]
    Description=Node.js Application
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/app.js
    Restart=always  # 崩溃自动重启
    User=www-data   # 指定运行用户
    Group=www-data  # 指定运行组
    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  # 查看状态
    

3. 使用nodemon(开发环境监控)

nodemon用于开发环境,监控文件变化并自动重启应用,避免手动重启:

npm install nodemon -g
nodemon app.js

二、第三方专业监控工具

1. Prometheus + Grafana(开源监控体系)

适用于需要自定义指标、长期存储、可视化的场景,支持分布式系统监控。

  • 组件说明
    • Prometheus:时间序列数据库,负责采集和存储指标;
    • Grafana:可视化工具,通过Dashboard展示Prometheus中的数据。
  • 配置步骤
    1. 安装Prometheus:从官网下载二进制文件,修改prometheus.yml配置文件,添加Node.js Exporter目标:
      scrape_configs:
        - job_name: 'node'
          static_configs:
            - targets: ['localhost:9100']  # Node.js Exporter默认端口
      
    2. 安装Node.js Exporter:采集Node.js应用的指标(如CPU、内存、事件循环延迟):
      wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
      tar xvfz node_exporter-*.tar.gz
      cd node_exporter-* && ./node_exporter &
      
    3. 安装Grafana:从官网下载,启动后登录(默认地址http://localhost:3000,账号admin,密码admin),添加Prometheus作为数据源,导入Node.js监控Dashboard(如ID:1860)。

2. New Relic/Datadog(商业APM工具)

适用于需要全栈监控、深度性能分析、告警的企业级场景,提供代码级追踪、数据库查询分析等功能。

  • 配置步骤(以New Relic为例)
    1. 注册New Relic账号,获取license_key
    2. 安装Node.js Agent:
      npm install newrelic --save
      
    3. 在应用入口文件(如app.js)顶部添加配置:
      const newrelic = require('newrelic');
      
    4. 登录New Relic控制台,查看应用性能数据(如响应时间、吞吐量、错误率)。

三、日志分析与告警

1. ELK Stack(Elasticsearch + Logstash + Kibana)

适用于集中式日志管理、复杂查询,帮助定位应用错误和性能问题。

  • 配置步骤
    1. 安装Elasticsearch(存储日志)、Logstash(采集和处理日志)、Kibana(可视化);
    2. 在Node.js应用中使用日志库(如winstonmorgan)输出结构化日志(JSON格式);
    3. 配置Logstash读取日志文件(如/var/log/node-app.log),解析后发送到Elasticsearch;
    4. 通过Kibana创建Dashboard,展示日志统计信息(如错误日志数量、请求响应时间分布)。

四、自定义监控脚本

若需监控特定业务指标(如订单数量、缓存命中率),可编写自定义脚本,定期采集数据并发送到监控系统(如Prometheus、邮件告警)。

  • 示例:使用node-cron定时采集内存使用率,写入文件或发送告警:
    const cron = require('node-cron');
    const fs = require('fs');
    
    cron.schedule('* * * * *', () => {  // 每分钟执行一次
      const memoryUsage = process.memoryUsage();
      const data = {
        timestamp: new Date().toISOString(),
        rss: memoryUsage.rss,
        heapUsed: memoryUsage.heapUsed,
        heapTotal: memoryUsage.heapTotal
      };
      fs.appendFileSync('/var/log/node-app/memory.log', JSON.stringify(data) + '\n');
    });
    

以上方法可根据实际需求组合使用:开发环境nodemon+top生产环境pm2+Prometheus+Grafana+ELK,确保应用稳定运行并及时发现潜在问题。

0