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或第三方告警服务)。