温馨提示×

CentOS环境下Node.js的日志管理

小樊
46
2025-11-26 04:31:14
栏目: 编程语言

CentOS环境下Node.js日志管理

一 核心要点与总体架构

  • 在应用内使用成熟的日志库,优先选择结构化输出(如 JSON),便于检索与分析。常见选择:WinstonPinoBunyanLog4js
  • 规范日志级别:DEBUG/INFO/WARN/ERROR/CRITICAL,按环境动态切换(开发输出 DEBUG,生产默认 INFO/ERROR)。
  • 实施日志轮转:应用侧用如 winston-daily-rotate-file,系统侧用 logrotate,避免单文件无限增长。
  • 集中化管理:将日志发送到 ELK Stack(Elasticsearch、Logstash、Kibana)GraylogFluentd 等,便于检索、告警与可视化。
  • 进程与系统日志:使用 PM2 统一托管与查看日志;若为 systemd 服务,用 journalctl 查看服务日志。

二 应用内日志库配置示例

  • 使用 Winston 写入按天轮转的错误与全量日志(JSON 格式,便于后续分析):
// 安装:npm i winston winston-daily-rotate-file
const winston = require('winston');
const DailyRotateFile = require('winston-daily-rotate-file');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),
    winston.format.json()
  ),
  transports: [
    new DailyRotateFile({
      filename: 'logs/error-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      level: 'error',
      zippedArchive: true,
      maxFiles: '14'
    }),
    new DailyRotateFile({
      filename: 'logs/combined-%DATE%.log',
      datePattern: 'YYYY-MM-DD',
      zippedArchive: true,
      maxFiles: '14'
    }),
    new winston.transports.Console({ format: winston.format.simple() })
  ]
});

logger.info('服务启动', { port: 3000 });
logger.error('数据库连接失败', { err: 'timeout' });
  • 其他可选库:Pino(高性能、低开销)、Bunyan(结构化 JSON)、Log4js(灵活的输出与布局)。

三 系统级日志轮转与保留策略

  • 使用 logrotate 管理应用日志文件(推荐在系统层面统一轮转):
    1. 创建配置:/etc/logrotate.d/nodejs_app
/path/to/your/nodejs/app/logs/*.log {
  daily
  rotate 7
  compress
  missingok
  notifempty
  create 0640 nodejs nodejs
  copytruncate
}
  1. 说明:
    • daily:按天轮转;rotate 7:保留 7 天;compress:压缩旧日志;missingok:日志不存在不报错;notifempty:空文件不轮转。
    • create 0640 nodejs nodejs:按实际运行用户/组设置权限与属主。
    • copytruncate:复制后截断原文件,避免应用句柄未释放导致轮转失败(若应用支持 reopen 信号,可改用 postrotate 发送信号)。
  2. 测试与生效:
    • 测试:sudo logrotate -d /etc/logrotate.d/nodejs_app(干跑)
    • 强制执行:sudo logrotate -f /etc/logrotate.d/nodejs_app
    • logrotate 默认由 cron 每日执行。

四 进程管理与系统日志查看

  • 使用 PM2 托管与查看日志(适合多实例与集群):
    • 安装:npm install -g pm2
    • 启动:pm2 start app.js --name myapp
    • 实时查看:pm2 logs myapp;查看最近 1000 行:pm2 logs myapp --lines 1000
    • 保存与分割:PM2 自带日志轮转(基于时间与大小),可通过配置文件设置保留天数与分割策略。
  • 使用 systemdjournalctl(若以服务运行):
    • 查看服务日志:journalctl -u your-nodejs-service.service -f
    • 按时间过滤:journalctl -u your-nodejs-service.service --since “2025-11-26 00:00:00”

五 集中式日志与可视化

  • 方案选型:
    • ELK Stack(Elasticsearch + Logstash + Kibana):采集、解析、存储与可视化一体化,适合复杂查询与仪表盘。
    • Graylog:集中式日志平台,易部署、检索能力强。
    • Fluentd:统一日志采集与转发,生态丰富。
  • 接入方式:
    • 应用内将日志以 JSON 输出到控制台或文件,由 Filebeat/rsyslog/Fluentd 采集并发送到 Logstash/Elasticsearch
    • 若需直接发送,可使用 winston-syslog 等传输器将日志发往 syslog/远程日志服务器

0