목표 : 시스템에서 발생되는 각종 Log 데이터를 매일 AWS S3에 자동으로 백업

적용 기술 : AWS S3, Logrotate, Crontab, Shell Script

1. S3 Buket 생성

2. Logrotate 설정

vi /etc/logrotate.d/rsyslog

/var/log/syslog
{
        su root root
        rotate 31
        daily
        missingok
        notifempty
        nocompress
        delaycompress
        dateext
        dateyesterday
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
        su root root
        rotate 31
        daily
        missingok
        notifempty
        nocompress
        dateext
        dateyesterday
        delaycompress
        sharedscripts
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

3. Backup Shell Script 작성

CAT 명령으로 Backup.sh 파일을 생성합니다.
cat > backup.sh

#!/bin/bash
  
HOSTNAME=`hostname -f`
DAY=$(date +"%Y%m%d" -d '1 days ago')

cd ~
mkdir $DAY
cp /var/log/auth.log-$DAY ./$DAY
cp /var/log/syslog-$DAY ./$DAY
cp /var/log/kern.log-$DAY ./$DAY
cp /var/log/messages-$DAY ./$DAY

tar zcvf $DAY.tar.gz ./$DAY

rm -R ./$DAY

aws s3 mv $DAY.tar.gz s3://Comtec-log-archive/$(date +"%Y" -d '1 days ago')/$HOSTNAME/$(date +"%m" -d '1 days ago')month/ --storage-class STANDARD_IA

실행 권한 할당
chmod 755 backup.sh

4. Crontab 설정

매일 00시 00분에 실행

# m h dom mon dow user command
0 0 * * * root logrotate -f /etc/logrotate.d/rsyslog
0 0 * * * root sh backup.sh

5. 데이터 백업 확인

[AWS] 시스템로그 S3에 백업하기