温馨提示×

如何在Ubuntu中监控Node.js错误日志

小樊
56
2025-10-26 09:24:59
栏目: 编程语言

如何在Ubuntu中监控Node.js错误日志

在Ubuntu系统中,监控Node.js错误日志可通过直接查看日志文件、使用进程管理器、集成系统日志或第三方工具等方式实现,以下是具体方法:

1. 直接查看应用程序日志文件

若Node.js应用将错误日志输出到文件(如通过console.error()重定向或第三方日志库配置),可使用以下命令实时监控:

  • tail -f命令:实时显示日志文件新增内容,适用于简单的日志跟踪。例如,若错误日志路径为/var/log/myapp-error.log,执行tail -f /var/log/myapp-error.log,终端会持续输出最新的错误信息。
  • multitail工具:支持同时监控多个日志文件,提供颜色高亮和分屏显示,提升多日志监控效率。安装命令:sudo apt-get install multitail;监控命令:multitail /var/log/myapp-error.log

2. 使用PM2进程管理器监控

PM2是Node.js常用的进程管理工具,可自动捕获应用错误日志并提供实时查看、轮转、重启等功能:

  • 安装PM2:全局安装PM2,sudo npm install pm2 -g
  • 启动应用并记录日志:通过PM2启动应用时,可指定错误日志路径(如pm2 start app.js --name my-app --error logs/my-app-error.log);若未指定,PM2会默认将错误日志保存到~/.pm2/logs/<app-name>-error.log
  • 查看实时错误日志:执行pm2 logs my-appmy-app为应用名称),即可实时查看应用的错误输出;若需过滤错误日志,可结合grep命令,如pm2 logs my-app | grep 'ERROR'

3. 集成系统日志(journalctl)

若将Node.js应用作为系统服务运行(如通过systemd创建服务),可通过journalctl命令查看系统日志中的Node.js错误信息:

  • 创建systemd服务:编写服务文件(如/etc/systemd/system/my-nodejs-app.service),内容示例:
    [Unit]
    Description=My Node.js App
    After=network.target
    
    [Service]
    ExecStart=/usr/bin/node /path/to/app.js
    Restart=always
    User=<your-user>
    Group=<your-group>
    StandardOutput=syslog
    StandardError=syslog
    SyslogIdentifier=my-nodejs-app
    
    [Install]
    WantedBy=multi-user.target
    
  • 查看服务日志:执行journalctl -u my-nodejs-app -t-u指定服务名,-t显示日志标签),即可查看与该服务相关的所有日志(包括错误)。

4. 使用第三方日志库增强错误记录

通过第三方日志库(如Winston、Bunyan)可定制错误日志的格式、级别和存储路径,便于后续分析:

  • Winston示例:安装Winston(npm install winston),配置错误日志输出到文件:
    const winston = require('winston');
    const logger = winston.createLogger({
      level: 'error', // 仅记录error及以上级别日志
      format: winston.format.json(), // JSON格式便于解析
      transports: [
        new winston.transports.File({ filename: 'logs/error.log' }), // 错误日志文件
        new winston.transports.Console() // 可选:同时输出到控制台
      ]
    });
    
    // 在代码中捕获错误并记录
    try {
      // 业务代码
    } catch (error) {
      logger.error('An error occurred:', error); // 记录错误堆栈
    }
    
  • Bunyan示例:安装Bunyan(npm install bunyan),配置JSON格式错误日志:
    const bunyan = require('bunyan');
    const logger = bunyan.createLogger({
      name: 'my-app',
      streams: [
        { level: 'error', path: 'logs/app-error.log' } // 错误日志写入文件
      ]
    });
    
    logger.error('Database connection failed:', { error: err.message }); // 记录带上下文的错误
    

通过这些库,可实现错误日志的结构化存储,便于后续用ELK Stack、Graylog等工具进行分析。

5. 日志轮替(避免日志过大)

为防止错误日志文件无限增长,可使用logrotate工具自动轮替日志:

  • 创建logrotate配置文件:在/etc/logrotate.d/下新建文件(如nodejs),内容示例:
    /path/to/your/nodejs/app/logs/*.log {
      daily          # 每天轮替
      missingok      # 若日志文件不存在也不报错
      rotate 7       # 保留最近7天的日志
      compress       # 压缩旧日志(节省空间)
      notifempty     # 若日志为空则不轮替
      create 0640 <user> <group> # 创建新日志文件并设置权限(替换为运行应用的用户和组)
    }
    

执行sudo logrotate -f /etc/logrotate.d/nodejs可手动触发轮替。

通过以上方法,可全面监控Ubuntu中Node.js应用的错误日志,及时发现并解决问题。根据实际需求选择合适的方式(如简单监控用tail -f,生产环境用PM2+日志库+logrotate),提升运维效率。

0