温馨提示×

如何备份Ubuntu JS日志数据

小樊
44
2025-12-29 15:27:47
栏目: 编程语言

Ubuntu JS日志备份实用方案

一 定位日志路径与准备

  • 常见存放位置:
    • Node.js 应用日志:应用配置的输出目录,如 /var/log/my_js_app//opt/myapp/logs/
    • 系统日志:/var/log/(如 syslog、auth.log 等)。
  • 快速确认日志目录:
    • 查看目录内容:ls /var/log
    • 查找包含 node/应用名的日志:sudo find /var/log -type f -name "*.log" | grep -i node
  • 备份目录准备(示例):sudo mkdir -p /backup/nodejs-logs && sudo chown $USER:$USER /backup/nodejs-logs
  • 权限提示:系统日志多为 root:adm,必要时使用 sudo 或在脚本中提升权限。

二 方法一 使用 logrotate 做本地轮转与保留(推荐)

  • 安装(如未安装):sudo apt-get update && sudo apt-get install logrotate
  • 创建配置:sudo nano /etc/logrotate.d/nodejs
  • 示例配置(按实际路径修改):
    /var/log/nodejs/*.log {
        daily
        rotate 7
        compress
        delaycompress
        missingok
        notifempty
        create 0640 root adm
        copytruncate
        dateext
    }
    
  • 参数要点:
    • daily/rotate 7/compress:按天轮转并保留 7 天压缩归档。
    • copytruncate:复制后截断原文件,避免重启应用;若应用支持信号重载,可用 postrotate … endscript 发送 USR1 触发重新打开日志。
  • 测试与生效:
    • 语法检查:sudo logrotate -d /etc/logrotate.conf
    • 强制执行:sudo logrotate -f /etc/logrotate.conf
  • 适用场景:日常本地“切割+保留”,与远程备份配合实现长期留存。

三 方法二 手动打包压缩与定时备份(tar + cron)

  • 备份脚本示例:/usr/local/bin/backup-node-logs.sh
    #!/bin/bash
    set -e
    LOG_DIR="/var/log/nodejs"
    BACKUP_DIR="/backup/nodejs-logs"
    TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
    mkdir -p "$BACKUP_DIR"
    tar -czvf "$BACKUP_DIR/nodejs-$TIMESTAMP.tar.gz" -C "$LOG_DIR" .
    # 可选:仅保留最近 N 天
    find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +7 -delete
    
  • 赋权:sudo chmod +x /usr/local/bin/backup-node-logs.sh
  • 定时任务(每天 02:00):crontab -e
    0 2 * * * /usr/local/bin/backup-node-logs.sh >> /var/log/backup-node-logs.log 2>&1
    
  • 适用场景:需要按时间点归档、便于下载/离线保存与审计。

四 方法三 远程备份与多副本(rsync + 可选 rsnapshot)

  • rsync 增量同步到远程主机:
    rsync -avz --delete /var/log/nodejs/ user@remote:/backup/nodejs-logs/
    
    • 定时(每天 00:00):0 0 * * * rsync -avz --delete /var/log/nodejs/ user@remote:/backup/nodejs-logs/
  • 本地快照式多版本(可选):
    • 安装:sudo apt-get install rsnapshot
    • 配置 /etc/rsnapshot.conf(示例片段):
      snapshot_root   /backup/rsnapshot
      link_dest       1
      verbose         1
      loglevel        1
      logfile         /var/log/rsnapshot.log
      
      backup  /var/log/nodejs/   nodejs/
      
    • 定时(每日):0 2 * * * /usr/bin/rsnapshot daily
  • 适用场景:异地容灾、历史版本回溯、节省存储(硬链接)。

五 方法四 若使用 PM2 的日志轮转

  • 启用插件:pm2 install pm2-logrotate
  • 常用参数:
    • pm2 set pm2-logrotate:max_size 100M
    • pm2 set pm2-logrotate:retain 30
    • pm2 set pm2-logrotate:compress true
  • 适用场景:PM2 托管的应用,无需改动应用代码即可完成按大小滚动与压缩。

六 恢复与校验及注意事项

  • 恢复方式:
    • 从 tar 归档恢复:sudo tar -xzvf /backup/nodejs-logs/nodejs-2025-08-01.tar.gz -C /var/log/nodejs
    • 用 rsync 回拷:sudo rsync -aAXv /backup/nodejs-logs/ /var/log/nodejs/
  • 校验与清理:
    • 校验可读性:tar -tzvf file.tar.gzzcat file.log.gz | head
    • 定期清理旧备份:find /backup -name "*.tar.gz" -mtime +30 -delete
  • 关键注意事项:
    • 权限与属主:系统日志多为 root:adm,恢复时注意权限一致性。
    • 应用写入方式:使用 copytruncate 可避免重启;若用信号重载(如 USR1),确保应用支持。
    • 远程备份:优先使用 SSH 密钥免密登录,保障安全与可自动化。
    • 保留策略:按合规与磁盘容量设置 rotate 或保留天数(如 7–30 天)。
    • 定期演练:定期恢复抽查,确保备份可用。

0