Linux環境下Node.js日志備份策略
Node.js應用需通過日志庫將日志輸出到文件,便于后續備份。常用庫包括:
winston-daily-rotate-file插件實現日志輪轉。pino-rotate實現輪轉。const winston = require('winston');
const { DailyRotateFile } = require('winston-daily-rotate-file');
const logger = winston.createLogger({
transports: [
new DailyRotateFile({
filename: '/var/log/nodejs/app-%DATE%.log',
datePattern: 'YYYY-MM-DD',
zippedArchive: true,
maxSize: '20m',
maxFiles: '14d'
})
]
});
此配置會將日志按天分割,保留14天,舊日志自動壓縮。
日志輪轉可避免單個文件過大占用磁盤空間。常用方法:
logrotate工具,配置文件示例(/etc/logrotate.d/nodejs):/var/log/nodejs/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 root adm
sharedscripts
postrotate
/usr/sbin/killall -HUP node # 重啟Node.js進程以應用新日志文件
endscript
}
說明:每天輪轉1次,保留7天,壓縮舊日志,若日志文件不存在則不報錯。winston-daily-rotate-file、pino-rotate),直接在應用層實現輪轉,更靈活。將日志備份到遠程或本地存儲,確保數據安全。常用方法:
/path/to/backup_logs.sh):#!/bin/bash
LOG_DIR="/var/log/nodejs"
BACKUP_DIR="/backup/nodejs"
DATE=$(date +%Y%m%d)
mkdir -p "$BACKUP_DIR"
tar -czvf "$BACKUP_DIR/app-$DATE.tar.gz" -C "$LOG_DIR" .
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -exec rm {} \; # 刪除30天前的備份
添加定時任務(每天凌晨2點執行):crontab -e
輸入:0 2 * * * /path/to/backup_logs.sh
#!/bin/bash
BACKUP_DIR="/backup/nodejs"
REMOTE_USER="user"
REMOTE_IP="192.168.1.100"
REMOTE_DIR="/remote/backup/nodejs"
rsync -avz "$BACKUP_DIR/" "$REMOTE_USER@$REMOTE_IP:$REMOTE_DIR"
添加定時任務(每天凌晨3點執行)。將日志發送到集中式系統,便于統一管理與分析。常用方案:
filebeat或rsyslog),存儲到Elasticsearch,通過Kibana可視化分析。const winston = require('winston');
const { LogstashTransport } = require('winston-logstash-transport');
const logger = winston.createLogger({
transports: [
new LogstashTransport({
host: 'logstash-server-ip',
port: 5044
})
]
});
此配置會將日志發送到Logstash服務器。
gpg加密備份文件,防止未授權訪問。示例命令:gpg --symmetric --cipher-algo AES256 /backup/nodejs/app-20250930.tar.gz
chmod 700 /backup/nodejs),僅允許管理員訪問。Monit監控日志文件大小,超過閾值時發送告警。配置示例(/etc/monit/monitrc):check file nodejs_logs with path /var/log/nodejs/*.log
if size > 100M then alert
mailx或第三方告警服務)。