본문 바로가기
CSP (Cloud Service Provider)/AWS

cloudwatch logs를 s3로 전송하는 방법

by BTC_MAN 2023. 5. 26.

베하~

안녕하세요 3대 5000의 man, xoxo 입니다.

지난 주에 이어 이번주에는 cloudwatch의 로그를 s3에 저장하는 방법에 대해 알아보겠습니다.


클라우드 워치에 로그그룹에 로그를 계속해서 저장할 수 있지만 해당 로그를 활용하거나 외부로 전송을 하기 위해서는 s3에 저장하는 것이 편리합니다.

뿐만 아니라 log group에 많은 로그를 저장해 두면 log insight를 활용하는데 많은 비용이 발생할 수 있습니다.

따라서 장기간 동안 로그를 저장하기 위해서는 s3에 저장하는 것이 효율적입니다.

 

그럼 이제 본격적으로 cloudwatch의 로그를 s3에 저장하는 방법에 대해 알아보겠습니다.

 

1. S3 버킷 생성

Create Bucket를 하여 버킷을 생성합니다. 버킷 이름은 고유한 값을 가져야 하고 중복될 수 없는 것 아시죠?

2. 클라우드 워치 로그그룹에 있는 로그를 확인

클라우드 워치로 들어가 s3에 저장하고 싶은 로그 그룹을 확인합니다.

3. 람다생성

생성한 버킷 이름과 로그그룹의 이름을 잘 기억해 둡니다.

지난주에 설명했던 것과 같이 람다를 생성합니다 .

람다를 생성할 때에는 반드시 s3와 cloudwatch에 대한 권한이 들어간 role을 사용해야 합니다.

아래와 같이 파이썬을 사용하고, 기존에 생성되어 있는 role을 사용하도록 하겠습니다.

 

4. 람다 코드 작성

import boto3
import json
import time
from datetime import datetime, timedelta

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # 현재 날짜와 시간을 UTC 표준시간 기준으로 설정
    now_utc = datetime.utcnow()
    date_utc = now_utc.date().strftime('%Y-%m-%d')
    time_utc = now_utc.time().strftime('%H:%M:%S')

    # S3 클라이언트 생성
    s3_client = boto3.client('s3')
    
    # CloudWatch Logs 클라이언트 생성
    logs_client = boto3.client('logs')

    # 버킷과 폴더 이름 설정
    bucket_name = '버킷이름'
    prefix = 'ap-northeast-2/'
    folder_name = f'{date_utc}/'

    file_name = f'({date_utc}-{time_utc}).log'
    file_path = prefix + folder_name + file_name
    
    # 로그 그룹 이름 설정
    log_group_name = '로그그룹 이룸'

    # 로그 검색 기간 설정
    end_time = int(time.time() *1000)
    start_time = end_time- 3600000
    response = logs_client.filter_log_events(logGroupName=log_group_name, startTime=start_time, endTime=end_time)

    if len(response['events']) > 0:
        log_data = ""
        for event in response['events']:
            log_data += json.dumps(event) + '\n'
        
        # 로그 데이터를 S3 버킷에 저장
        s3_client.put_object(Bucket=bucket_name, Key=file_path, Body=log_data.encode())
    # 로그 이벤트가 없는 경우
    else:
        print('No log events found for the last hour.')

 

5. 결과

아래와 같이 날짜별 로그가 저장될 수 있도록 설정했습니다.

다들 위의 내용을 참고하여 로그를 적절히 저장하고 활용하면 아주 많은 도움이 될 것입니다.

 

다음주에는 AWS를 3주 동안 진행했으니 GCP composer 업데이트 방법을 알아보도록 하겠습니다.

'CSP (Cloud Service Provider) > AWS' 카테고리의 다른 글

[AWS] RDS 읽기 전용 복제본 생성 시 오류 발생 유무  (0) 2023.05.30
[AWS] Athena  (0) 2023.05.28
[AWS] AWS Lambda  (0) 2023.05.26
[AWS] MSK (Kafka)  (0) 2023.05.26
[AWS] AWS Secrets Manager와 KMS의 차이  (0) 2023.05.25

댓글