温馨提示×

Node.js在CentOS上如何日志管理

小樊
47
2026-01-10 00:26:48
栏目: 编程语言

Node.js 在 CentOS 的日志管理实践

一 日志采集与结构化

  • 在应用内使用成熟的日志库,优先选择结构化输出(如 JSON),便于检索与分析。常见选择:WinstonPinoBunyanLog4js。示例(Winston,按天轮转):
    • 安装:npm i winston winston-daily-rotate-file
    • 配置:
      • const winston = require(‘winston’); const { createLogger, format, transports } = winston; const DailyRotateFile = require(‘winston-daily-rotate-file’); const logger = createLogger({ level: ‘info’, format: format.combine( format.timestamp({ format: ‘YYYY-MM-DD HH:mm:ss’ }), format.json() ), transports: [ new DailyRotateFile({ filename: ‘/var/log/myapp/application-%DATE%.log’, datePattern: ‘YYYY-MM-DD’, zippedArchive: true, maxSize: ‘20m’, maxFiles: ‘14d’ }), new transports.Console() ] });
      • logger.info(‘hello world’, { route: ‘/health’ });
  • 若使用 PM2 托管进程,可直接利用其内置日志能力(见下一节)。

二 日志轮转与清理

  • 使用系统自带的 logrotate(CentOS 通常已预装):
    • 新建配置:sudo vim /etc/logrotate.d/node-app
    • 示例(按天轮转、保留 7 天、压缩、空文件不轮转、自动创建新文件并设置权限):
      • /var/log/myapp/*.log { daily rotate 7 compress missingok notifempty create 0640 myapp myapp }
    • 测试:sudo logrotate -f /etc/logrotate.d/node-app
  • 使用 PM2 内置日志轮转(适合 PM2 场景):
    • 启用:pm2 install pm2-logrotate
    • 常用策略:pm2 set pm2-logrotate:max_size 10M(单文件达 10MB 轮转)、pm2 set pm2-logrotate:retain 7(保留 7 个历史)、pm2 set pm2-logrotate:compress true(压缩)、pm2 set pm2-logrotate:rotateInterval "0 0 * * *"(每日 00:00 轮转)
  • 不使用 PM2 时的轻量替代:cron + find 清理旧日志
    • 示例(删除 7 天前的 .log):0 0 * * * find /var/log/myapp -type f -name "*.log" -mtime +7 -delete
  • 选择建议:使用 PM2 时优先用其内置轮转;裸进程或无侵入需求时优先用 logrotate;极简环境可用 cron

三 集中式日志与可视化

  • 将日志汇聚到集中式平台,便于检索、告警与可视化:
    • ELK Stack(Elasticsearch + Logstash + Kibana):强大的全文检索与可视化能力,适合复杂分析与仪表盘。
    • Graylog:企业级集中式日志管理,部署相对简单。
    • Splunk:商业方案,功能完备、生态成熟。
    • Grafana Loki:与 Grafana 深度集成,成本友好,适合云原生与微服务。
  • 若服务由 systemd 托管,也可结合 journalctl 统一查看服务标准输出与错误输出,作为系统侧补充。

四 落地配置示例

  • 场景:Node.js + PM2 + logrotate + ELK
    • 应用内(Winston,JSON,便于 Logstash 解析):
      • 安装:npm i winston winston-daily-rotate-file
      • 配置要点:输出到 /var/log/myapp/app.logerror.log,按天轮转、压缩、保留 14 天;控制台同步输出便于本地排查。
    • 进程侧(PM2):
      • 启动:pm2 start app.js -n myapp
      • 日志轮转:pm2 install pm2-logrotatepm2 set pm2-logrotate:max_size 10Mpm2 set pm2-logrotate:retain 7pm2 set pm2-logrotate:compress truepm2 set pm2-logrotate:rotateInterval "0 0 * * *"
    • 系统侧(logrotate,兜底清理与权限统一):
      • /var/log/myapp/*.log { daily; rotate 7; compress; missingok; notifempty; create 0640 myapp myapp }
    • 集中式(ELK):
      • Filebeat 采集 /var/log/myapp/*.log → Logstash(解析 JSON、补充字段) → Elasticsearch(存储与检索) → Kibana(仪表盘与告警)。

0