[AWS] Lambda 함수 모니터링 설정 방법

HYEOB KIM·2022년 6월 10일
1

aws

목록 보기
28/62

개요

  • Lambda에서는 함수에서 처리하는 모든 요청에 대한 로그를 CloudWatch > 로그 그룹을 통해 CloudWatch에 저장할 수 있습니다.
  • CloudWatch에서 Lambda 함수를 모니터링할 수 있습니다.

작동 방식

  • LambdaCloudWatch Logs와 자동으로 통합되며 코드의 모든 로그를 /aws/lambda/<함수 이름>라는 이름으로 Lambda 함수와 연결된 CloudWatch Logs 그룹에 푸시합니다.

참고

  • 함수 호출 후 로그가 표시되는데 5~10분 정도 소요될 수 있습니다.

사전 작업

Lambda 함수가 CloudWatch > 로그 그룹에 로그를 업로드하려면 실행 역할을 부여해야 합니다.
Lambda용 역할을 하나 생성합니다.

Lambda에서 제공하는 AWSLambdaBasicExecutionRole AWS 관리형 정책역할에 연결합니다.

기존에 역할이 있는 경우 AWSLambdaBasicExecutionRole를 기존 역할에 연결해주면 됩니다.

AWS CLI를 통해 기존 역할에 정책 연결 방법

$ aws iam attach-role-policy --role-name <역할 이름> --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

로그를 반환하는 함수 생성(python)

python으로 로그를 반환하는 함수를 생성해보겠습니다.

[Lambda 콘솔] > [함수] > [함수 생성]

사전에 생성한 실행 역할을 지정해주겠습니다.

함수를 생성하고, AWS 공식 문서 - 로그를 반환하는 함수(python)을 참고해 코드 소스에 아래의 코드를 입력합니다.

# lambda_function.py

import os

def lambda_handler(event, context):
    print('## ENVIRONMENT VARIABLES')
    print(os.environ)
    print('## EVENT')
    print(event)

테스트 이벤트 생성

  • Lambda에서 함수를 테스트로 호출해보고 싶다면, 테스트 이벤트를 생성하고 Test 버튼을 눌러 테스트 해볼 수 있습니다.

Test 버튼을 눌러 테스트 이벤트를 구성합니다.

테스트 이벤트를 만들면, 코드가 실행되고 아래와 같이 Function Logs가 발생합니다.

START RequestId: 630633a4-e81c-413d-ad13-48d142cdffce Version: $LATEST
## ENVIRONMENT VARIABLES
environ({'AWS_LAMBDA_FUNCTION_VERSION': '$LATEST', 'AWS_SESSION_TOKEN': 'IQoJb3JpZ2luX2VjECAaDmFwLW5vcnRoZWFzdC0yIkYwRAIgC4LHBBwksyV0I4rOmHFqcH+VJNcuIW0jgAY2r3wQTMcCICk4u7xe/gTGD6TfO1vTUgDRFNN9AFyS5BIwSrtpjYtzKqECCCkQAxoMNzk3NTg3OTIyMDA2Igz4HKLkOvmIYw2g/jQq/gFFiinoUz3T8XfZizSjtdU0XPZQ2xZcGPpGdCXCmwY4GhOmSfzxeaaJoepH7V0vUYZ5139Gu4HkOibGpGfmFVSdU7jf3tQZxq7TYSXmXytGh7J8AAsSTMLgaM9moyIFRO9m+WWAxH2skVyhspiUAIgBlEdWjHJu6Tw2jpY7WNvgi7ccaemn21BAcSEeRnXLCZmwiy+hGcmlM7CnLNrcYV48WEtjFQca21o7afMyBgJF0MfKHMel/ttov1R4XOFWCsfdHzsDfV1La0qyHok05CyUY7ECH5Gx7MrKu65aDrlZmEZSDjmepeB4hB87Vp6eP7ueEFbXDRjJgj1mDH+lKTD58IuVBjqbATEmYKoOw1dyAtLTA94gMrVg6I5Kt3pn95iV0qFWRjsM/L3xjy/elKljSj2VfaDJ7GNY6dLnAWwtlIYmhvwnu7RClnUUKkDYgq9rC6bu0Zdb5RUSfkdKowZCFY2hLv+O2nOnaBDaYxj1IVN/BWB5PTtTFhFznNaV+2Qcjeh69f5hCOghLCpfSlDzDthdezo/fKAHINfJvKXPToiY', 'AWS_LAMBDA_LOG_GROUP_NAME': '/aws/lambda/test-hyeob-lambda-cloudwatch', 'LD_LIBRARY_PATH': '/var/lang/lib:/lib64:/usr/lib64:/var/runtime:/var/runtime/lib:/var/task:/var/task/lib:/opt/lib', 'LAMBDA_TASK_ROOT': '/var/task', 'AWS_LAMBDA_LOG_STREAM_NAME': '2022/06/10/[$LATEST]76fd299ada384374804e6c6fb0a464a2', 'AWS_LAMBDA_RUNTIME_API': '127.0.0.1:9001', 'AWS_EXECUTION_ENV': 'AWS_Lambda_python3.9', 'AWS_LAMBDA_FUNCTION_NAME': 'test-hyeob-lambda-cloudwatch', 'AWS_XRAY_DAEMON_ADDRESS': '169.254.79.129:2000', 'PATH': '/var/lang/bin:/usr/local/bin:/usr/bin/:/bin:/opt/bin', 'AWS_DEFAULT_REGION': 'ap-northeast-2', 'PWD': '/var/task', 'AWS_SECRET_ACCESS_KEY': 'Z+Vx7jMY4QiRUI27sEpGAyNDyH5Du4xTu2MU9+ga', 'LAMBDA_RUNTIME_DIR': '/var/runtime', 'LANG': 'en_US.UTF-8', 'AWS_LAMBDA_INITIALIZATION_TYPE': 'on-demand', 'AWS_REGION': 'ap-northeast-2', 'TZ': ':UTC', 'AWS_ACCESS_KEY_ID': 'ASIA3TM7R3RLEF27RDQB', 'SHLVL': '0', '_AWS_XRAY_DAEMON_ADDRESS': '169.254.79.129', '_AWS_XRAY_DAEMON_PORT': '2000', 'AWS_XRAY_CONTEXT_MISSING': 'LOG_ERROR', '_HANDLER': 'lambda_function.lambda_handler', 'AWS_LAMBDA_FUNCTION_MEMORY_SIZE': '128', 'PYTHONPATH': '/var/runtime', '_X_AMZN_TRACE_ID': 'Root=1-62a2f879-6c93843e77fea6f332586fe9;Parent=7601babc006e0bcc;Sampled=0'})
## EVENT
{'key1': 'value1', 'key2': 'value2', 'key3': 'value3'}
END RequestId: 630633a4-e81c-413d-ad13-48d142cdffce
REPORT RequestId: 630633a4-e81c-413d-ad13-48d142cdffce	Duration: 1.33 ms	Billed Duration: 2 ms	Memory Size: 128 MB	Max Memory Used: 35 MB	Init Duration: 121.61 ms

Python 런타임은 각 호출에 대해 START, ENDREPORT 줄을 로깅합니다.

보고서 행은 다음과 같은 세부 정보를 제공합니다.

보고서 로그

  • RequestId – 호출의 고유한 요청 ID입니다.

  • Duration – 함수의 핸들러 메서드가 이벤트를 처리하는 데 걸린 시간입니다.

  • Billed Duration – 호출에 대해 청구된 시간입니다(가격과 연관).

  • Memory Size - 함수에 할당된 메모리 양입니다.

  • Max Memory Used – 함수에서 사용한 메모리 양입니다.

  • Init Duration – 제공된 첫 번째 요청의 경우 런타임이 핸들러 메서드 외부에서 함수를 로드하고 코드를 실행하는 데 걸린 시간입니다.

  • XRAY TraceId – 추적된 요청의 경우 AWS X-Ray 추적 ID입니다.

  • SegmentId - 추적된 요청의 경우 X-Ray 세그먼트 ID입니다.

  • 샘플링 완료(Sampled) – 추적된 요청의 경우 샘플링 결과입니다.

CloudWatch에서 로그 보기

  1. Lambda 콘솔 > 함수
  2. 함수를 선택합니다.
  3. 모니터링을 선택합니다.
  4. CloudWatch에서 로그 보기를 선택합니다.

CloudWatch > 로그 그룹 > /aws/lambda/<Lambda 함수 이름>로 이동됩니다.

로그 스트림을 클릭해보면 이전의 Function Logs의 내용이 보이는 것을 확인할 수 있습니다.

각 로그 스트림은 함수의 인스턴스에 해당합니다. 로그 스트림은 Lambda 함수를 업데이트할 때, 그리고 여러 동시 호출을 처리하기 위해 추가 인스턴스가 생성될 때 나타납니다.

특정 호출에 대한 로그를 찾으려면 AWS X-Ray로 함수를 계측하는 것이 좋습니다. X-Ray요청 및 로그 스트림에 대한 세부 정보를 기록합니다.

이렇게 CloudWatch > 로그 그룹 > /aws/lambda/<Lambda 함수 이름>Lambda 함수의 호출에 대한 로그를 기록하고 조회할 수 있습니다.

profile
Devops Engineer

0개의 댓글