Debian Node.js 日志备份策略
策略总览
本地轮转与清理
使用 logrotate 管理 Node.js 应用日志(适用于直接写文件的场景):
sudo apt-get install logrotatesudo nano /etc/logrotate.d/nodejs-app/var/log/nodejs/*.log {
daily
rotate 7
compress
delaycompress
missingok
notifempty
create 0644 root adm
sharedscripts
postrotate
# 按实际进程信号选择其一
systemctl reload node-app.service >/dev/null 2>&1 || true
# 或 kill -USR1 $(cat /var/run/node.pid 2>/dev/null) || true
# 若用 pm2,可改为:pm2 reload app_name >/dev/null 2>&1
endscript
}
sudo logrotate -d /etc/logrotate.d/nodejs-appsudo logrotate -f /etc/logrotate.d/nodejs-appapp.log-YYYYMMDD.gz 与新 app.log,并确认应用日志继续写入新文件。若使用 PM2 管理进程,可直接启用内置日志轮转插件(与系统 logrotate 二选一,避免重复轮转):
pm2 install pm2-logrotate
pm2 set pm2-logrotate:max_size 10M
pm2 set pm2-logrotate:retain 30
pm2 set pm2-logrotate:compress true
pm2 set pm2-logrotate:rotateInterval "0 0 * * *"
pm2 restart all
离线归档与远程复制
/usr/local/bin/archive_nodejs_logs.sh#!/usr/bin/env bash
set -Eeuo pipefail
LOG_DIR="/var/log/nodejs"
ARCHIVE_BASE="/backup/logs"
DATE=$(date -d "last week" +%Y-%m-%d)
WEEK=$(date -d "last week" +%Y-W%V)
ARCHIVE_DIR="$ARCHIVE_BASE/weekly/$WEEK"
mkdir -p "$ARCHIVE_DIR"
# 归档上周已轮转的 .gz 文件(按周粒度)
find "$LOG_DIR" -maxdepth 1 -name "*.gz" -newermt "$DATE 00:00:00" ! -newermt "$(date +%Y-%m-%d) 00:00:00" \
-exec tar -czf "$ARCHIVE_DIR/nodejs-$WEEK.tar.gz" -C "$LOG_DIR" {} +
# 可选:清理已成功归档的原始 .gz(谨慎,确保归档成功再执行)
# find "$LOG_DIR" -maxdepth 1 -name "*.gz" -newermt "$DATE 00:00:00" ! -newermt "$(date +%Y-%m-%d) 00:00:00" -delete
# 简单校验
ls -lh "$ARCHIVE_DIR"
sudo chmod +x /usr/local/bin/archive_nodejs_logs.sh0 2 * * 0 /usr/local/bin/archive_nodejs_logs.sh >> /var/log/archive_nodejs.log 2>&1
/usr/local/bin/sync_logs_remote.sh#!/usr/bin/env bash
set -Eeuo pipefail
rsync -avz --delete /backup/logs/ backup-user@192.0.2.10:/backup/nodejs/
0 3 * * * /usr/local/bin/sync_logs_remote.sh >> /var/log/sync_logs_remote.log 2>&1
集中化与远程日志
/etc/rsyslog.conf 或 /etc/rsyslog.d/remote.conf):*.* @192.0.2.20:514 # UDP
*.* @@192.0.2.20:514 # TCP
sudo systemctl restart rsyslog监控与演练
/var/log/nodejs、/backup)并设置告警,避免磁盘被占满导致应用异常。tar -tzf /backup/logs/weekly/2025-W35/nodejs-2025-W35.tar.gz