2022-06-24
일반적인 인스턴스 이외의 오토 스케일링된 인스턴스의 경우 로그를 따로 저장해야 하는 경우가 있다 이럴 경우 cloudwatch에 직접 로그 기록을 실시간으로 남긴다거나 아니면, 직접 파일을 s3 버킷에 남길 수 있는 방법이 있다. 이 방법을 알아보자.
- 버킷 권한
{
"Version": "2012-10-17",
"Id": "Policy1652407976899",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::자신의버킷명"
},
{
"Sid": "Stmt1652407974937",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": "arn:aws:s3:::자신의버킷명/*"
}
]
}
우선 버킷 자체의 권한을 확인한다. 버킷에는 기본적으로 퍼블릭 엑세스가 제한되어 있을 텐데, 그럴 경우 위와 같이 권한 설정이 버킷에 되어 있어야 한다. 버킷 > 권한 > 버킷 정책에서 확인 가능하다.
- IAM 계정 권한
자신의 ec2 인스턴스에서 위와 같은 명령어를 사용하여 계정이 등록되어 있는지 확인한다.
# aws configure list
s3에 계정이 등록이 안되어 있으면 아래 명령어를 통해 등록한다.
[aws configure 설정]
# aws configure
AWS Access Key ID [None] : 접속한 계정의 Accecss Key ID
AWS Secret Access Key [None] :접속한 계정의 Secret Key
Default region name [None] : 사용중인 region EX) ap-northeast-2
Default output format [None] : json 또는 text (잘 모르겠으면 json)
"해당 계정 IAM 역할에 s3 액세스 권한이 있는지 확인하는 것도 필요하다."
- 인스턴스 설정
인스턴스에서의 설정은 두 가지가 필요하다. 우선적으로 톰캣로그를 백업해서 s3에 올릴 스크립트를 등록해주고 이 후 이를 종료 런타임에 캐치 할 수 있도록 service를 등록해주면 된다.
# cd /usr/local/sbin/
# vi test123.sh
# chmod 755 test123.sh
위에 위치에 적당한 스크립트를 작성해준다. 스크립트는 작성은 톰켓 로그의 저장장소 및 s3 구조마다 너무 다르기 때문에 따로 예시는 참고만 한다.
보통의 스크립트 플로우는 1. 톰켓 로그가 저장된 디렉터리를 압축 > 2. 해당 압축된 걸 S3 업로드 이과정을 거치면 된다.
#!/bin/bash -e
bucket_name=""
time=$(date "+%Y%m%d%k%M%S-%N")
server_name=""
echo "##########start s3 log backup $bucket_name sync##########"
aws s3 ls $bucket_name
cd /로그 상위 디렉토리 && tar -cvzf $time-$server_name.gz log/ && mv -f $time-$server_name.gz /로그파일이 저장될 위치
aws s3 sync /로그파일이 저장될 위치 s3://$bucket_name/$server_name
cd /로그파일이 저장될 위치 && rm -rf $time-$server_name.gz
echo "##########end s3 log backup $bucket_name sync##########"
이후 아래 경로로 이동해서
# cd /etc/systemd/system/
# vi test123.service
서비스 확장 파일을 스크립트와 동일한 이름으로 만든다. 내용을 아래와 같은 형식으로 넣어 주면 된다.
[Unit]
Description=ec2 log s3 upload
DefaultDependencies=no
Before=shutdown.target halt.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/자신의스크립트명
[Install]
WantedBy=halt.target shutdown.target
이후 아래의 명령어를 통해 서비스를 활성화시켜주면 마무리된다.
# systemctl enable test123.service
# 아래 명령어로 시스템 등록 여부 확인
# systemctl list-unit-files | grep 자신의 서비스명