温馨提示×

CentOS Node.js日志如何处理

小樊
41
2025-12-23 17:50:31
栏目: 编程语言

CentOS 上 Node.js 日志处理最佳实践

一 日志采集与输出

  • 在应用内使用成熟的日志库,推荐 WinstonBunyanLog4js,便于分级输出、结构化(如 JSON)与多目标输出(控制台、文件、远程)。示例(Winston):
    • 安装:npm i winston
    • 配置:
      • const winston = require(‘winston’); const logger = winston.createLogger({ level: ‘info’, format: winston.format.combine( winston.format.timestamp(), winston.format.json() ), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: ‘/var/log/myapp/app.log’ }) ] });
  • 结构化日志(JSON)便于后续检索、分析与可视化;生产环境建议将日志级别设为 info,调试阶段用 debug

二 日志轮转

  • 系统级方案 logrotate(推荐)
    • 安装:sudo yum install -y logrotate(CentOS 通常已预装)
    • 新建配置:sudo vim /etc/logrotate.d/nodejs-app
    • 示例配置(按天轮转、保留 7 天、压缩、自动重建):
      • /var/log/myapp/*.log { daily rotate 7 compress missingok notifempty create 0640 node node copytruncate dateext }
    • 说明:
      • copytruncate 适用于持续写入的 Node.js 文件句柄场景,避免重启应用;若应用支持信号重开日志(如 SIGUSR1),可去掉 copytruncate 并配合 postrotate 执行重开。
      • dateext 为归档文件添加日期后缀,便于追溯。
    • 测试:sudo logrotate -f /etc/logrotate.d/nodejs-app
  • 进程管理方案 PM2 内置日志轮转
    • 安装插件:pm2 install pm2-logrotate
    • 常用策略:pm2 set pm2-logrotate:max_size 10Mpm2 set pm2-logrotate:retain 7pm2 set pm2-logrotate:compress truepm2 set pm2-logrotate:rotateInterval "0 0 * * *"
    • 说明:PM2 会在 ~/.pm2/logs/ 下生成并轮转日志,适合使用 PM2 部署的场景。
  • 应用内轮转(备选)
    • 使用 winston-daily-rotate-file 等库在代码中按时间/大小切分,适合容器或无 systemd 场景,但对进程内文件句柄管理有要求。

三 集中式日志与远程传输

  • 使用 rsyslog 将日志发往远程日志服务器(UDP 514
    • 服务端启用 UDP 模块并重启:sudo systemctl restart rsyslog
    • 客户端配置 /etc/rsyslog.d/nodejs.conf
      • . @remote_log_server_ip:514
    • 应用侧可用 winston-syslog 将日志直接发往 syslog。
  • 使用 ELK Stack(Elasticsearch、Logstash、Kibana)Graylog 做集中存储、检索与可视化,适合大规模与多服务环境。

四 清理与维护

  • 自动清理
    • 基于时间的清理(cron + find):0 0 * * * find /var/log/myapp -type f -name "*.gz" -mtime +7 -delete
    • 说明:与 logrotate 的保留策略保持一致,避免重复删除或误删。
  • 监控与告警
    • 监控日志目录容量(如 /var/log)与 inode 使用率,防止因日志占满磁盘导致服务异常。
    • error 级别日志设定阈值告警,缩短故障发现时间。
  • 权限与安全
    • 运行 Node.js 的用户(如 node)应仅对日志目录具备写入权限;日志文件权限建议 0640,属主属组与运行用户一致,避免敏感信息泄露。

五 快速落地清单

  • 选择日志库与级别:如 Winston + JSON + info/debug 分级
  • 输出目标:控制台(便于本地调试)+ 文件(如 /var/log/myapp/app.log)。
  • 轮转策略:优先用 logrotate(daily/rotate 7/compress/copytruncate/dateext),PM2 场景用内置轮转插件。
  • 远程与集中:中小规模先用 rsyslog 发到集中服务器;规模扩大引入 ELK/Graylog
  • 清理与监控:cron 清理旧归档、容量与 inode 监控、error 告警。

0