温馨提示×

Debian JS日志如何实现自动化管理

小樊
52
2025-12-04 12:53:34
栏目: 编程语言

Debian 上实现 JS 日志自动化管理

一 架构与总体思路

  • 在应用侧用 **Node.js 日志库(winston、morgan 等)**按大小或时间切分,避免单文件无限增长。
  • 在系统侧用 logrotate 做二次保护与统一轮转、压缩、保留策略。
  • 需要集中化时,引入 rsyslog/fluentd/logstash 将日志汇聚到 ELK/Graylog 做检索、可视化与告警。
  • 对系统级服务日志,用 journald 设置保留上限,防止系统日志撑满磁盘。
  • 日常排查用 tail、grep、journalctl 等命令高效检索。

二 应用侧日志切分与保留

  • 使用 winston 按文件大小自动滚动,示例:单个文件 2MB、最多保留 7 个历史文件。
  • 使用 morgan 输出 combined 格式到文件,再由系统工具统一轮转(适合 Express/Koa)。
  • 建议日志目录纳入应用运行用户的家目录或 /var/log/yourapp/,并设置合适的文件权限与属主,便于 logrotate 与系统服务管理。

示例(winston,按大小滚动):

// logger.js
const winston = require('winston');
const { createLogger, format, transports } = winston;
const { combine, timestamp, printf } = format;

const myFormat = printf(({ level, message, timestamp }) => {
  return `${timestamp} ${level}: ${message}`;
});

const logger = createLogger({
  level: 'info',
  format: combine(timestamp(), myFormat),
  transports: [
    new transports.File({
      filename: '/var/log/yourapp/app.log',
      maxsize: 2_000_000, // 2MB
      maxFiles: 7
    })
  ]
});

module.exports = logger;

三 系统侧自动化轮转与清理

  • 使用 logrotate 管理 Node.js 应用日志(推荐做法)
    • 新建配置:/etc/logrotate.d/yourapp
    • 示例策略:按天轮转、保留 7 天、压缩旧日志、延迟压缩、空文件不轮转、自动重建日志文件并设定权限属主。
    • 验证与强制执行:logrotate 通常由 cron.daily 定时运行,可手动调试与强制执行。
  • 如需清理系统级 journald 日志,设置保留上限(如 50M2 weeks),防止长期增长。
  • 不建议直接用 rm 删除正在写入的日志文件,优先用 logrotate 的 copytruncate 或让应用重新打开日志文件。

示例(/etc/logrotate.d/yourapp):

/var/log/yourapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 0640 youruser yourgroup
    copytruncate
}

调试与执行:

sudo logrotate -d /etc/logrotate.d/yourapp   # 干跑调试
sudo logrotate -f /etc/logrotate.d/yourapp   # 强制执行一次

四 集中化收集与自动化分析告警

  • 使用 rsyslog/fluentd/logstash 将应用日志汇聚到 Elasticsearch,用 Kibana 做可视化与仪表盘。
  • 简单场景可用 fluentd tail 插件采集文件并输出到 stdout 或 ES;复杂场景用 Logstash 做解析与丰富。
  • 自动化分析可编写 Node.js 脚本按关键字(如 ERROR)聚合与统计,并用 cron 定时运行与输出报告或触发告警。

示例(fluentd 采集到 stdout,便于调试):

<source>
  @type tail
  path /var/log/yourapp/app.log
  pos_file /var/log/fluentd-yourapp.log.pos
  tag nodejs
  <parse>
    @type json
  </parse>
</source>
<match nodejs>
  @type stdout
</match>

示例(cron 定时分析 ERROR):

0 2 * * * /usr/bin/node /opt/scripts/logAnalyzer.js >> /var/log/logAnalyzer.log 2>&1

五 日常运维命令与快速排障

  • 实时查看应用日志:tail -f /var/log/yourapp/app.log
  • 关键字过滤:grep -i error /var/log/yourapp/app.log
  • 查看 systemd 服务日志:journalctl -u yourapp.service -f
  • 清理 systemd 日志到保留上限:sudo journalctl --vacuum-time 2weeks–vacuum-size 100M
  • 图形化查看:gnomesystemlog(GNOME)、ksystemlog(KDE)

0