溫馨提示×

如何在Linux服務器上監控Node.js應用

小樊
36
2025-10-22 20:38:24
欄目: 云計算

如何在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 -g;pm2 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-reload;sudo systemctl start my-node-app;sudo 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 + 自定義監控腳本 + 分布式日志系統。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女