温馨提示×

Node.js在Ubuntu上的日志管理

小樊
40
2025-11-16 12:14:04
栏目: 编程语言

Node.js 在 Ubuntu 上的日志管理实践

一 日志采集与输出

  • 使用内置 console.log / console.error 适合开发调试;生产环境建议使用结构化日志库,便于检索与分析。常见选择:Winston(多传输、易扩展)、Pino(高性能、JSON 友好)、Bunyan(结构化 JSON)、Log4js(功能丰富、可按天轮转)。示例(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’ }) ] }); if (process.env.NODE_ENV !== ‘production’) { logger.add(new winston.transports.Console({ format: winston.format.simple() })); } logger.info(‘Server started’, { port: 3000 });
  • 使用进程管理器 PM2 可统一采集与查看日志:
    • 安装:sudo npm install pm2 -g
    • 启动:pm2 start app.js --name my-app
    • 查看:pm2 logs my-app(支持实时 tail、按应用过滤)

二 日志轮转与保留策略

  • 应用内轮转(推荐与系统解耦):使用 winston-daily-rotate-file
    • 安装:npm install winston-daily-rotate-file
    • 配置示例:
      • const DailyRotateFile = require(‘winston-daily-rotate-file’); const transport = new DailyRotateFile({ filename: ‘logs/application-%DATE%.log’, datePattern: ‘YYYY-MM-DD-HH’, zippedArchive: true, maxSize: ‘20m’, maxFiles: ‘14d’ });
  • 系统级轮转:使用 logrotate(适合 systemd 或写入文件的应用)
    • 安装:sudo apt-get update && sudo apt-get install logrotate
    • 新建配置:sudo nano /etc/logrotate.d/nodejs
    • 配置示例(按天轮转、保留 7 天、压缩、空文件不轮转):
      • /var/log/nodejs/*.log { daily missingok rotate 7 compress notifempty create 0640 root adm }
    • 测试:sudo logrotate -f /etc/logrotate.d/nodejs
  • 若通过 systemd 托管应用,也可在 service 中指定 StandardOutput/StandardError 写入文件,再用 logrotate 管理(示例路径:/var/log/myapp/*.log

三 集中式日志与可视化

  • 使用 rsyslog 将应用日志接入系统日志并转发到集中式系统:
    • 安装:sudo apt-get install rsyslog
    • 配置:sudo nano /etc/rsyslog.d/50-default.conf
      • 添加:if $programname == 'nodejs' then /var/log/nodejs.log& stop
    • 重启:sudo systemctl restart rsyslog
  • 使用 ELK Stack(Elasticsearch + Logstash + Kibana)Graylog 做集中采集、检索与可视化;也可结合 Fluentd 统一采集转发

四 日志清理与保留期限

  • 临时清理:定位日志目录(如 /var/log/nodejs//var/log/syslog)后按需删除
    • 示例:sudo rm -rf /var/log/nodejs/*
    • 若日志写入 syslog,可先检索再清理:grep 'nodejs' /var/log/syslog | xargs sudo rm -f
  • 建议通过轮转策略控制保留期,避免直接删除正在写入的日志文件
  • 保留期限设置:
    • logrotate:通过 rotate 7(保留 7 份/天)或配合 maxage 控制天数
    • 应用内:如 winston-daily-rotate-file 的 maxFiles: '14d'(保留 14 天)

五 监控与告警

  • 日志可视化与检索:使用 Kibana 构建仪表盘、进行关键字与字段检索
  • 指标与可视化:结合 Prometheus(采集指标)与 Grafana(可视化)监控请求延迟、错误率、内存等,与日志联动排查

0