CentOS下Java日志备份最佳实践
一 总体策略与分层
二 推荐方案与关键配置
应用内轮转(首选)
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/app.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/app-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<Configuration status="WARN">
<Appenders>
<RollingFile name="RollingFile" fileName="logs/app.log"
filePattern="logs/app-%d{yyyy-MM-dd}.log.gz">
<PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
<Policies>
<TimeBasedTriggeringPolicy interval="1" modulate="true"/>
<SizeBasedTriggeringPolicy size="10 MB"/>
</Policies>
<DefaultRolloverStrategy max="10"/>
</RollingFile>
</Appenders>
<Loggers>
<Root level="info"><AppenderRef ref="RollingFile"/></Root>
</Loggers>
</Configuration>
系统级轮转(logrotate兜底)
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0644 root root
copytruncate
}
logrotate -d /etc/logrotate.d/java # 语法与执行计划演练
logrotate -f /etc/logrotate.d/java # 强制轮转一次
离线归档与远程备份(定时脚本)
#!/usr/bin/env bash
set -euo pipefail
LOG_DIR="/var/log/myapp"
BACKUP_DIR="/backup/myapp"
DATE=$(date +%Y%m%d%H%M%S)
mkdir -p "$BACKUP_DIR"
tar -czf "$BACKUP_DIR/myapp-$DATE.tar.gz" -C "$LOG_DIR" .
find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +30 -delete
定时任务(每天02:00):0 2 * * * /usr/local/bin/backup_java_logs.sh
#!/usr/bin/env bash
set -euo pipefail
LOCAL_LOG_DIR="/var/log/myapp"
REMOTE_USER="backup"
REMOTE_HOST="10.0.0.10"
REMOTE_DIR="/backup/myapp"
DATE=$(date +%Y%m%d%H%M%S)
ssh "$REMOTE_USER@$REMOTE_HOST" "mkdir -p $REMOTE_DIR/$DATE"
tar -czf - -C "$LOCAL_LOG_DIR" . | ssh "$REMOTE_USER@$REMOTE_HOST" "tar -xzf - -C $REMOTE_DIR/$DATE"
ssh "$REMOTE_USER@$REMOTE_HOST" "find $REMOTE_DIR -type f -name '*.tar.gz' -mtime +7 -delete"
定时任务(每天02:30):30 2 * * * /usr/local/bin/backup_java_logs_remote.sh
三 监控与告警
groups:
- name: log_backup_rules
rules:
- alert: DiskSpaceLow
expr: node_filesystem_avail_bytes{mountpoint="/"} < 107374182400
for: 1h
labels: {severity: warning}
annotations:
summary: "Low disk space"
description: "Root filesystem available < 100GB"
四 恢复流程与演练
tar -xzf /backup/myapp/myapp-20250401.tar.gz -C /var/log/myapp-restore
# 校验后按需替换或合并到业务目录
scp -r user@remote:/backup/myapp/20250401 /tmp/restore
tar -xzf /tmp/restore/*.tar.gz -C /var/log/myapp-restore
五 安全与运维要点