[AWS] AWS Cloud Watch로 Amazon SQS 모니터링하기

김강욱·2024년 5월 17일
0

AWS

목록 보기
3/3
post-thumbnail

이번 포스팅에서는 AWS Cloud WatchAmazon SQS에서 발생한 이벤트를 로그로 확인해보는 시간을 가지도록 하겠습니다.

우선 Amazon SQSAWS Cloud Watch를 연동해줘야 합니다. 연동해주기 위해 사용할 것은 바로 AWS Lambda 함수입니다.

AWS Lambda 함수는 기본적으로 생성되면 자동으로 AWS CloudWatch Logs와 연동이 됩니다. AWS Lambda 함수의 실행 로그가 자동으로 AWS CloudWatch Logs에 기록되기 때문에 AWS Lambda 함수 코드 내에서 logging 모듈을 사용하여 로그를 생성하면 해당 로그를 AWS CloudWatch Logs에서 모니터링 할 수 있습니다.

1. AWS Lambda 함수 생성

AWs Lambda 함수를 생성해보도록 하겠습니다. 먼저 AWS 공식 사이트에 로그인 하신 후 검색에 Lambda를 입력하시면 다음과 같은 화면이 보이실 겁니다.

함수 생성을 클릭하시고 함수 이름과 사용하실 언어를 선택하시고 생성해주시면 됩니다. 저는 파이썬으로 선택하여 진행해보도록 하겠습니다.

이렇게 생성을 완료하시면 아래와 같이 함수가 생성된 것을 확인하실 수 있습니다.

함수를 클릭하시고 내부로 들어가면 함수의 코드를 입력할 수 있는 공간이 보이실 겁니다.

해당 코드 블럭에 실행시키고 싶은(로깅하고 싶은) 코드를 작성하시면 됩니다. 저는 간단하게 메시지 ID와 메시지 본문에 대한 내용을 로깅해보겠습니다.

import json
import logging

# CloudWatch Logs 설정
logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
    logger.info("Received event: %s", json.dumps(event))
    
    for record in event['Records']:
        message_body = record['body']
        message_id = record['messageId']
        
        # 메시지 수신 로그
        logger.info("Received message with ID: %s", message_id)
        logger.info("Message Body: %s", message_body)
        
        try:
            
            # 메시지 처리 성공 로그
            logger.info("Successfully processed message with ID: %s", message_id)
        except Exception as e:
            # 메시지 처리 실패 로그
            logger.error("Failed to process message with ID: %s. Error: %s", message_id, str(e))
            raise e  # 예외를 다시 발생시켜 Lambda가 실패를 감지하도록 함

작성한 AWS Lambda 함수는 SQS 대기열에 메시지가 도착할 때 자동으로 실행되며 해당 함수가 대기열에서 메시지를 가져와서 처리하게 됩니다.

AWS Lambda 함수에서 메시지 처리가 완료되면 SQS 대기열에서 해당 메시지가 자동으로 삭제됩니다.

AWS Lambda 함수의 코드를 업데이트한 후 "Deploy" 버튼을 눌러 변경 사항을 적용하셔야 합니다!!

2. AWS Lambda 함수의 IAM 역할 설정

위에서 작성한 AWS Lambda 함수가 AWS SQS 메시지를 읽고 AWS CloudWatch Logs에 기록할 수 있도록 필요한 권한을 설정해줘야 합니다.

먼저 AWS Management Console에서 IAM 메뉴에 들어갑니다.

이후 해당 화면에서 역할을 눌러 들어가줍니다.

다음과 같은 역할들이 있는데 그 중에서 위에서 생성해준 Lambda 함수를 클릭해줍니다.

해당 화면에서 권한 추가를 클릭 하시고 정책 연결에 들어가셔서 AmazonSQSFullAccessCloudWatchLogsFullAccess 정책을 추가해줍니다.

각각의 정책은 Lambda 함수가 SQS 대기열과 CloudWatchLogs에 접근하기 위한 권한을 부여하는 정책입니다.

3. SQS 트리거 설정

Lambda 함수 생성 및 권한 설정이 완료되었다면 이제 SQS의 설정에서 Lambda 트리거 설정을 할 차례입니다.

SQS 대기열에 들어가보시면 하단에 Lambda 트리거 구성할 수 있는 공간이 보이실 겁니다. Lambda 함수 트리거 구성을 클릭합시다.

함수 선택 창에서 아까 생성해준 Lambda 함수를 클릭해주시고 저장을 눌러 트리거 구성을 완료합니다.

4. Lambda 함수의 CloudWatchLogs 그룹 확인해보기

이제 CloudWatchLogs에서 해당 함수에 대한 로그 그룹이 있는지 확인해봅시다. 먼저 AWS Management Console에서 CloudWatch 메뉴에 들어가줍니다.

좌측 메뉴바에서 로그 그룹을 클릭하시면 생성해준 Lambda 함수 관련 로그 그룹이 생성된 것을 확인하실 수 있습니다. 해당 로그 그룹을 클릭하시면 화면 하단의 로그 스트림에서 출력된 로그들을 확인하실 수 있습니다.

📝 테스트 해보기

이제 SQS에 메시지를 전송하여 Lambda 함수의 로그가 제대로 출력되는지 테스트해보도록 하겠습니다.

SQS 대기열에 들어가서 다음과 같이 메시지를 전송하겠습니다.

SQS 대기열에 메시지가 0개로 확인되네요. Lambda 함수가 제대로 메시지를 가져갔을 거라 예상이 됩니다.

이제 CloudWatch로 가서 로그를 확인해봅시다. 로그 그룹에서 Lambda 함수 관련 로그 그룹을 클릭하시고 화면 하단에 로그 스트림을 확인해봅니다. 새로 생성된 로그 스트림이 보이는데 클릭해서 들어가줍니다.

정상적으로 로그가 출력되는 것을 확인하실 수 있습니다. SQS 대기열에서 받은 메시지 내용도 한번 확인해보겠습니다.

메시지 바디에 추가해줬던 메시지 형태 그대로 수신받은 것을 확인하실 수 있습니다.


이렇게 해서 Amazon Lambda 함수를 생성하고 SQS 트리거 설정을 통해 AWS CloudWatchLogs에서 SQS 메시지 수신, 삭제 시 로그 출력을 확인해볼 수 있었습니다.

profile
TO BE DEVELOPER

0개의 댓글

관련 채용 정보