[AWS] [ubuntu] pm2 log 파일 관리 & s3 로 자동 백업

SINGING BIRD·2023년 11월 11일

1. pm2 log 를 S3 로 백업하게 된 이유

  • 서비스 운영중 pm2 log 파일 용량이 커져서 EC2 볼륨이 가득차는 이슈가 발생했습니다.
  • pm2 log 가 생성된 파일들을 S3 로 업로드 하고 EC2 내의 log 파일들은 삭제하는 스크립트를 작성하여서 해결하였습니다.

2. 서버 내에서 aws s3 cp 명령어를 실행할 수 있도록 세팅합니다.

AWS CLI 설치합니다.

sudo apt-get install awscli

AWS configure 를 설정하여 서버 내 명령어로 S3 로 접근할 수 있도록 합니다.

(IAM 에서 S3 로 접근할 수 있는 유저를 만든 뒤, 그 유저의 AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 를 입력하여 세팅합니다.)

aws configure


3. pm2-log-backup.sh 파일을 생성하고 다음과 같이 작성합니다.

(저는 /var/www/script 내에 생성하였습니다.)

#!/bin/bash

# error log
exec 2>> /var/www/script/pm2-log-backup.log

# script start datetime
echo "$(date): Script started" >> /var/www/script/pm2-log-backup.log

LOG_DIR="/root/.pm2/logs"
BUCKET_NAME="zebipay"
CURRENT_DATETIME=$(date +"%Y-%m-%d_%H:%M:%S")
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
FOLDER_NAME="$CURRENT_DATETIME"_"$INSTANCE_ID"

for file in $LOG_DIR/*; do
    if [[ -f "$file" ]]; then
        aws s3 cp "$file" "s3://$BUCKET_NAME/pm2-log-backup/$FOLDER_NAME/"
        if [ $? -eq 0 ]; then
            rm "$file"
        fi
    fi
done

# script end datetime
echo "$(date): Script executed" >> /var/www/script/pm2-log-backup.log

최상단에 #!/bin/bash 를 추가하여 bash 로 실행되도록 작성하였고, bash 로 실행되는 문법으로 작성하였습니다.

LOG_DIR 은 S3 로 백업하고 싶은 파일들이 있는 경로이고

BUCKET_NAME 은 S3 버킷 이름입니다.

CURRENT_DATETIME 은 현재 날짜시간으로, 버킷 내에 현재 시간을 이름으로 하는 폴더를 생성하도록 하였습니다.

에러 발생, 스크립트 시작지점, 스크립트 끝나는 지점을 pm2-log-backup.log 에 기록되도록 하여 script 가 실행되는 로그를 남겼습니다.


3. 크론탭 명령어를 실행하여 pm2-log-backup.sh 내용을 매일 1회 실행되도록 설정합니다.

sudo crontab -e
0 5 * * * bash /var/www/script/pm2-log-backup.sh
  • bash 명령어로 실행하여 bash 문법이 적용되도록 하였습니다.
  • sudo crontab -e 로 root 권한으로 크론탭을 실행하여 /root/.pm2/logs 경로의 파일들 (루트 권한으로 컨트롤 가능) 을 컨트롤 할 수 있도록 하였습니다.
  • 매일 오전 5시에 실행되도록 하였습니다. (유저가 가장 적은 시간)

4. 결과화면

  • pm2-log-backup-log 파일 내에 script 가 실행된 로그를 볼 수 있습니다.

  • pm2-log-backup 경로 내에 현재 시간으로 폴더가 생성되어 로그 파일들이 들어갑니다.

profile
good things take time

0개의 댓글