首页主机资讯如何在CentOS上监控Node.js应用性能

如何在CentOS上监控Node.js应用性能

时间2025-10-15 09:13:03发布访客分类主机资讯浏览1131
导读:在CentOS上监控Node.js应用性能的方法可分为 进程管理工具、系统级工具、第三方APM工具、日志管理、内置模块及自定义方案 六大类,以下是具体实现步骤: 1. 使用PM2进程管理器(推荐) PM2是Node.js生态中最流行的进程管...

在CentOS上监控Node.js应用性能的方法可分为 进程管理工具、系统级工具、第三方APM工具、日志管理、内置模块及自定义方案 六大类,以下是具体实现步骤:

1. 使用PM2进程管理器(推荐)

PM2是Node.js生态中最流行的进程管理工具,提供性能监控、日志管理、自动重启等功能,适合生产环境使用。

  • 安装PM2:通过npm全局安装(需先确保Node.js环境已配置):
    sudo npm install pm2 -g
    
  • 启动应用:通过PM2启动Node.js应用并命名(便于后续管理):
    pm2 start app.js --name "my-node-app"
    
  • 监控资源使用:实时查看应用的CPU、内存、事件循环延迟等指标:
    pm2 monit
    
  • 查看应用状态:列出所有由PM2管理的应用及其运行状态:
    pm2 list
    
  • 日志管理:查看应用实时日志(支持多应用过滤):
    pm2 logs my-node-app
    
  • 设置开机自启:保存当前PM2进程列表并配置系统开机自动启动:
    pm2 save &
        &
     pm2 startup
    

2. 系统级监控工具(CentOS原生)

通过CentOS自带的命令行工具,可快速查看系统资源占用及Node.js进程状态:

  • top/htop:动态显示系统中运行的进程及其CPU、内存使用情况(htop需安装,更直观):
    sudo yum install htop -y  # 安装htop
    top  # 或 htop
    
  • vmstat:监控系统整体资源使用(进程、内存、IO、CPU等),每3秒刷新一次:
    vmstat 3
    
  • iostat:查看磁盘IO使用情况(需安装sysstat包):
    sudo yum install sysstat -y
    iostat -x 1  # 查看磁盘详细IO指标
    
  • free:查看系统内存使用情况(包括缓存、缓冲区):
    free -m  # 以MB为单位显示
    

3. 第三方APM工具(全面性能分析)

APM(应用性能管理)工具可提供端到端性能追踪、错误监控、慢查询分析等功能,适合复杂应用:

  • Prometheus + Grafana(开源组合)
    • Prometheus:收集Node.js应用的指标数据(需安装Node Exporter或使用prom-client库暴露指标);
    • Grafana:可视化Prometheus中的数据,创建仪表盘(如CPU、内存、请求延迟等)。
      部署步骤可参考之前关于Prometheus和Grafana的配置教程。
  • New Relic/Datadog(商业工具)
    • New Relic:通过安装newrelic Node.js模块(npm install newrelic --save),配置newrelic.js文件(填入许可证密钥),即可实时监控应用性能、错误日志及分布式追踪。
    • Datadog:通过Agent收集系统及应用指标,支持Node.js应用监控(需安装Datadog Agent并配置datadog.yaml)。

4. 日志管理(定位问题根源)

日志是排查性能问题的关键,可通过以下工具收集、分析Node.js日志:

  • ELK Stack(Elasticsearch + Logstash + Kibana)
    • Logstash:配置收集Node.js日志(如/var/log/nodejs/app.log),解析后发送到Elasticsearch;
    • Kibana:可视化日志数据,通过关键词(如ERRORTimeout)快速定位性能瓶颈。
      示例Logstash配置(/etc/logstash/conf.d/nodejs.conf):
    input {
    
      file {
        
        path =>
         "/path/to/your/nodejs/logs/*.log"
        start_position =>
     "beginning"
      }
    
    }
    
    output {
    
      elasticsearch {
        
        hosts =>
         ["localhost:9200"]
        index =>
     "nodejs-logs-%{
    +YYYY.MM.dd}
    "
      }
    
    }
        
    
  • 日志库增强:使用winstonmorgan记录结构化日志(如请求时间、状态码、响应时间),便于后续分析:
    const winston = require('winston');
    
    const logger = winston.createLogger({
    
      level: 'info',
      format: winston.format.json(),
      transports: [
        new winston.transports.File({
     filename: 'error.log', level: 'error' }
    ),
        new winston.transports.File({
     filename: 'combined.log' }
    )
      ]
    }
        );
        
    // 记录请求日志(配合Express中间件)
    app.use((req, res, next) =>
     {
        
      const start = Date.now();
        
      res.on('finish', () =>
     {
    
        logger.info({
    
          method: req.method,
          url: req.url,
          status: res.statusCode,
          responseTime: Date.now() - start
        }
        );
    
      }
        );
        
      next();
    
    }
        );
        
    

5. Node.js内置模块(基础监控)

通过Node.js原生模块可快速获取应用的基本性能指标:

  • process模块:获取CPU使用率、内存占用、事件循环延迟等信息:
    setInterval(() =>
     {
        
      const cpuUsage = process.cpuUsage();
         // 返回用户态/内核态CPU时间(微秒)
      const memoryUsage = process.memoryUsage();
     // 返回堆内存、RSS等指标
      console.log(`CPU Usage: ${
    cpuUsage.user / 1000000}
        秒`);
    
      console.log(`Memory Usage: ${
    Math.round(memoryUsage.heapUsed / 1024 / 1024 * 100) / 100}
        MB`);
    
    }
        , 5000);
         // 每5秒打印一次
    
  • os模块:获取系统级资源信息(如总内存、CPU核心数、系统负载):
    const os = require('os');
        
    const totalMem = os.totalmem();
         // 总内存(字节)
    const freeMem = os.freemem();
         // 空闲内存(字节)
    const loadAvg = os.loadavg();
     // 系统1/5/15分钟平均负载
    console.log(`Total Memory: ${
    (totalMem / 1024 / 1024).toFixed(2)}
        MB`);
    
    console.log(`Free Memory: ${
    (freeMem / 1024 / 1024).toFixed(2)}
        MB`);
    
    console.log(`System Load Avg: ${
    loadAvg.join(', ')}
        `);
        
    

6. 自定义监控脚本(灵活定制)

若需特定指标(如数据库查询时间、第三方API响应时间),可编写自定义脚本定期收集并上报数据:

  • 示例:监控HTTP请求响应时间
    const http = require('http');
        
    const start = Date.now();
        
    http.get('http://example.com', (res) =>
     {
        
      const duration = Date.now() - start;
    
      console.log(`Request to example.com took ${
    duration}
        ms`);
    
      // 可将数据发送到Prometheus、InfluxDB等存储
    }
        );
        
    
  • 上报数据到Prometheus:使用prom-client库暴露自定义指标(如HTTP请求计数、响应时间):
    const promClient = require('prom-client');
    
    const httpRequestDurationMicroseconds = new promClient.Histogram({
    
      name: 'http_request_duration_ms',
      help: 'Duration of HTTP requests in ms',
      buckets: [10, 50, 100, 500, 1000] // 定义桶范围
    }
        );
        
    
    app.use((req, res, next) =>
     {
        
      const start = Date.now();
        
      res.on('finish', () =>
     {
    
        httpRequestDurationMicroseconds.observe({
    
          method: req.method,
          path: req.path,
          status: res.statusCode
        }
        , Date.now() - start);
    
      }
        );
        
      next();
    
    }
        );
        
    
    // 启动Prometheus metrics endpoint
    app.get('/metrics', async (req, res) =>
     {
        
      res.set('Content-Type', promClient.register.contentType);
        
      res.end(await promClient.register.metrics());
    
    }
        );
        
    

以上方法可根据应用规模、监控深度、预算选择组合使用(如小型应用用PM2+系统命令,大型应用用Prometheus+Grafana+APM工具),实现对Node.js应用性能的全面监控。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何在CentOS上监控Node.js应用性能
本文地址: https://pptw.com/jishu/726675.html
Node.js在CentOS上如何实现自动化测试 MongoDB日志在CentOS怎么查看

游客 回复需填写必要信息