首页主机资讯如何在Linux服务器上监控Node.js应用

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

时间2025-10-23 16:34:03发布访客分类主机资讯浏览1283
导读:如何在Linux服务器上监控Node.js应用 监控Node.js应用的核心需求包括进程状态追踪、资源使用(CPU/内存)、性能指标分析、日志管理与故障预警。以下是Linux环境下常用的监控方法,覆盖从基础到高级的场景: 1. 基础系统工具...

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

监控Node.js应用的核心需求包括进程状态追踪、资源使用(CPU/内存)、性能指标分析、日志管理与故障预警。以下是Linux环境下常用的监控方法,覆盖从基础到高级的场景:

1. 基础系统工具:快速查看进程与资源使用

Linux自带的命令行工具可快速获取Node.js进程的基础状态,适合临时检查或脚本自动化:

  • top/htoptop命令实时显示系统中所有进程的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/iostatvmstat 1(每秒刷新)显示系统整体资源使用(如进程数、内存交换、IO等待);iostat(需安装sysstat包)监控磁盘IO负载,帮助定位I/O瓶颈。

2. 进程管理工具:实现稳定运行与便捷监控

生产环境需确保Node.js应用持续运行、自动重启,进程管理工具是关键:

  • PM2:最流行的Node.js进程管理器,支持性能监控、日志管理、负载均衡及集群部署。
    • 安装与启动:npm install pm2 -gpm2 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-reloadsudo systemctl start my-node-appsudo 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官方模板)。
  • New Relic/Datadog:商业APM工具,提供端到端性能监控(从前端到后端)、错误分析、分布式追踪及告警功能,适合中大型企业(如New Relic需安装newrelic Node.js agent,参考官方文档)。

4. 日志管理:集中收集与分析

日志是排查问题的关键,需将Node.js日志集中收集、存储及分析

  • 内置日志:使用console.logwinston/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
Node.js项目在Linux上如何进行版本控制 Node.js在Linux上如何配置Nginx反向代理

游客 回复需填写必要信息