ubuntu

如何在Ubuntu监控Node.js日志

小樊
45
2025-10-13 14:10:34
栏目: 编程语言

如何在Ubuntu上监控Node.js日志

在Ubuntu系统中,监控Node.js日志可通过命令行工具进程管理器集中式日志管理方案实现,以下是具体方法:

1. 基础命令行工具监控

1.1 使用tail实时查看日志文件

若Node.js应用将日志输出到文件(如/var/log/myapp.log),可通过tail -f命令实时跟踪日志更新:

tail -f /var/log/myapp.log

该命令会持续显示日志文件的最后几行,新内容会实时追加显示。适用于快速查看实时日志的场景。

1.2 使用journalctl查看系统日志

若Node.js应用以系统服务运行(如通过systemd管理),可使用journalctl查看其日志:

journalctl -u your-nodejs-service-name -f

其中your-nodejs-service-name是服务的名称(启动时通过--name指定或服务文件中的Name字段)。-f参数表示实时跟踪日志。适用于系统级日志管理。

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

PM2是Node.js常用的进程管理工具,内置日志管理和监控功能:

2.1 安装与启动

npm install pm2 -g  # 全局安装PM2
pm2 start app.js --name my-app  # 启动应用并命名为"my-app"

2.2 查看日志

pm2 logs my-app  # 查看"my-app"的实时日志(合并stdout和stderr)
pm2 logs my-app --lines 50  # 查看最后50行日志

2.3 日志轮转

PM2默认自动轮转日志(保留7天,每文件最大10MB),也可手动配置:

pm2 set pm2-logrotate:max_size 10M  # 单个日志文件最大10MB
pm2 set pm2-logrotate:retain 7      # 保留最近7天日志

PM2会将日志存储在~/.pm2/logs/目录下(文件名为应用名-out.log应用名-err.log)。适用于生产环境的进程管理和日志监控。

3. 配置日志轮转(避免日志膨胀)

当日志文件过大时,需通过logrotate工具定期轮转、压缩和清理日志:

3.1 安装logrotate

sudo apt-get install logrotate

3.2 创建配置文件

/etc/logrotate.d/目录下创建my-app配置文件:

sudo nano /etc/logrotate.d/my-app

添加以下内容(以/var/log/myapp.log为例):

/var/log/myapp.log {
    daily           # 每天轮转
    rotate 7        # 保留7天日志
    compress        # 压缩旧日志(如.gz格式)
    missingok       # 若日志不存在也不报错
    notifempty      # 若日志为空则不轮转
    create 0640 root adm  # 新日志文件权限和所有者
}

3.3 测试配置

sudo logrotate -f /etc/logrotate.d/my-app  # 强制立即轮转

适用于需要自动化管理日志大小的场景。

4. 使用第三方日志管理工具(集中式监控)

对于分布式或大规模应用,建议使用ELK Stack(Elasticsearch+Logstash+Kibana)或Fluentd实现集中式日志收集、分析和可视化。

4.1 ELK Stack配置

4.2 Fluentd配置

适用于需要高吞吐量和灵活集成的场景。

5. 使用日志库增强日志功能

通过WinstonBunyan等日志库,可实现日志分级(info/error/debug)、多输出目标(文件/控制台/远程服务器)和格式化(JSON/文本):

5.1 Winston示例

npm install winston
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' }),
    new winston.transports.Console()
  ]
});
logger.info('This is an info log');
logger.error('This is an error log');

5.2 Bunyan示例

npm install bunyan
const bunyan = require('bunyan');
const logger = bunyan.createLogger({
  name: 'myapp',
  streams: [
    { level: 'info', stream: process.stdout },
    { level: 'error', path: 'app-error.log' }
  ]
});
logger.info('This is an info log');
logger.error('This is an error log');

适用于需要结构化日志和高级功能的场景。

以上方法可根据需求选择:基础监控用tailjournalctl,生产环境用PM2,大规模应用用ELK/Fluentd,复杂日志需求用Winston/Bunyan。

0
看了该问题的人还看了