본 글은 리눅스와 AWS에 대한 기본적인 지식이 있다는 전제하에 진행됩니다.
개요
이번 글에서는 Apache 웹 서버에서 나온 access_log를 자동으로 S3로 업로드하고 그렇게 업로드된 글루 + 아테나로 쿼리 해 보겠습니다.
다음과 같은 아키텍처로 진행됩니다.
이번 글에서는 S3에 로그파일 업로드까지 해보겠습니다.
EC2로 Apache WebServer 생성하기
AWS 콘솔에서 EC2 -> Instances로 들어가 Launch instances를 클릭하고
아래와 같이 보안 그룹을 설정하고 인스턴스를 생성해 줍니다.
인스턴스가 정상적으로 생성됐다면, 실행 중인 인스턴스에 접속하고 아래 명령어를 통해 아파치를 설치하고 실행시켜 줍니다
sudo yum -y install httpd
sudo systemctl restart httpd
생성한 인스턴스에 IAM Role 할당하기
인스턴스가 S3로 파일을 업로드하기 위해서는 권한이 필요합니다. 이에 필요한 권한을 주기 위해 IAM Role을 만들어 할당해주어야 합니다.
IAM -> Roles 로 들어가 Create role을 클릭하고
Use case에서 EC2를 선택하고
Permissions policies로 넘어가 AmazonS3FullAccess를 선택하고 생성합니다.
생성한 인스턴스에서 Actions -> Security -> Modify IAM role로 들어가 생성한 역할을 할당해줍니다.
로그파일 S3에 남기기
로그파일을 남기기 위한 AWS CLI를 사용키 위해 위에서 생성한 인스턴스에 접속해 다음과 같이 설정해 줍니다.
[ec2-user@ip-172-31-40-54 scripts]# aws configure
AWS Access Key ID [None]:
AWS Secret Access Key [None]:
Default region name [None]:ap-northeast-2
Default output format [None]:
설정이 완료되었다면, 우리는 쉘 스크립트와 crontab으로 로그를 남겨줄 겁니다.
vi를 통해 아래 파일들을 생성해줍니다.
AccessLogSends32Cron.sh
#!/bin/bash
# 로그를 s3 경로에 업로드하는 스크립트
aws s3 cp /etc/httpd/logs/access_log s3://log-yhw/access_log/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%M)/access_log
cat /dev/null > /etc/httpd/logs/access_log
aws s3 cp /etc/httpd/logs/error_log s3://log-yhw/error_log/$(date +%Y)/$(date +%m)/$(date +%d)/$(date +%M)/error_log
cat /dev/null > /etc/httpd/logs/error_log
SendGetRequest.sh
#!/bin/bash
# 지속적으로 로그를 남겨주는 스크립트
while :
do
curl $(curl ifconfig.me);
sleep 3
done
그리고 crontab -e 명령어로 크론탭 편집 페이지로 들어가줍니다.
🎉Crontab이란? 유닉스 계열 OS의 시간 기반 잡 스케쥴러다. 사용자가 원하는 작업을 고정된 날짜, 시간에 주기적으로 실행시킬 수 있다.
아래와 같이 크론탭을 추가해줍니다.
* * * * * sudo AccessLogSendS32Cron.sh 파일의 경로
# 예 ) * * * * * sudo /home/ec2-user/scripts/AccessLogSendS32Cron.sh
crontab: installing new crontab 이란 메시지가 나온다면 설정이 제대로 완료된 것 입니다.
설치가 완료되었다면 편안히 로그를 남기기 위해 데몬에서 SendGetRequest.sh 를 실행시켜주도록 하겠습니다.
sudo nohup sh SendGetRequest.sh 1> /dev/null 2>&1 &
# 종료할 때는 sudo pkill -f SendGetRequest.sh
그리고 나면 1분에 한번씩 다음과 같이 S3에 로그가 찍힙니다.
s3://{ Bucket-Name }/access_log/2022/06/20/09/26/access_log 년/월/일/시/분/로그 입니다.
이렇게 이번 글에서는 S3에 로그를 자동으로 업로드까지 해보았습니다. 다음엔 이 데이터를 Glue와 Athena로 ETL작업을 해 보겠습니다.