AWS Lambda¶
AWS Lambda의 표시 지표에는 콜드 스타트 시간, 실행 시간, 동시 실행 수, 메모리 사용량이 포함되며, 이러한 지표는 Lambda 함수의 응답 속도, 확장성, 자원 활용도를 반영합니다.
구성¶
Func 설치¶
추천: Guance 통합 - 확장 - 관리형 Func를 사용하세요. 사전 조건은 모두 자동으로 설치됩니다. 스크립트 설치를 계속 진행하세요.
Func를 자체 배포하는 경우 Func 자체 배포를 참고하세요
설치 스크립트¶
안내: 요구 사항에 맞는 Amazon Cloud AK를 미리 준비하세요(간단히 하려면 CloudWatch 읽기 전용 권한
CloudWatchReadOnlyAccess를 직접 부여해도 됩니다)
관리형 버전 활성화 스크립트¶
- Guance 콘솔에 로그인합니다
- 【통합】 메뉴를 클릭하고 【클라우드 계정 관리】를 선택합니다
- 【클라우드 계정 추가】를 클릭하고 【AWS】를 선택한 뒤 화면에 필요한 정보를 입력합니다. 이전에 클라우드 계정 정보가 이미 설정되어 있다면 이 단계는 건너뜁니다
- 【테스트】를 클릭합니다. 테스트가 성공하면 【저장】을 클릭하고, 실패하면 관련 구성 정보가 올바른지 확인한 뒤 다시 테스트합니다
- 【클라우드 계정 관리】 목록에서 추가된 클라우드 계정을 확인할 수 있습니다. 해당 클라우드 계정을 클릭해 상세 페이지로 이동합니다
- 클라우드 계정 상세 페이지의 【통합】 버튼을 클릭한 뒤
미설치목록에서AWS Lambda를 찾아 【설치】 버튼을 클릭하면 설치 화면이 열리고 설치를 진행할 수 있습니다
수동 활성화 스크립트¶
-
Func 콘솔에 로그인한 뒤 【스크립트 마켓】을 클릭하여 Guance 스크립트 마켓으로 들어가고,
integration_aws_lambda를 검색합니다 -
【설치】를 클릭한 뒤 다음 매개변수를 입력합니다. AWS AK ID, AK Secret, 계정명.
-
【배포 시작 스크립트】를 클릭하면 시스템이
Startup스크립트 세트를 자동으로 생성하고, 해당 시작 스크립트를 자동으로 구성합니다. -
활성화한 후에는 「관리 / 자동 트리거 구성」에서 해당 자동 트리거 구성을 확인할 수 있습니다. 【실행】을 클릭하면 즉시 한 번 실행되며, 정기 실행 시간을 기다릴 필요가 없습니다. 잠시 후 실행 작업 기록과 해당 로그를 확인할 수 있습니다.
검증¶
- 「관리 / 자동 트리거 구성」에서 해당 작업의 자동 트리거 구성이 존재하는지 확인하고, 작업 기록과 로그를 함께 살펴 이상 여부를 점검합니다
- Guance의 「인프라 / 사용자 정의」에서 자산 정보가 있는지 확인합니다
- Guance의 「지표」에서 해당 모니터링 데이터가 있는지 확인합니다
지표¶
Amazon CloudWatch 구성을 완료하면 기본 지표 집합은 다음과 같습니다. 설정을 통해 더 많은 지표를 수집할 수 있습니다:
Amazon CloudWatch Lambda 지표 상세
호출 지표¶
| 지표 | 설명 |
|---|---|
Invocations |
성공적으로 호출된 경우와 함수 오류를 일으킨 호출을 포함한 함수 코드의 호출 횟수입니다. 호출 요청이 제한되거나 호출 오류를 유발한 경우에는 호출이 기록되지 않습니다. Invocations 값은 과금 대상 요청 수와 같습니다. |
Errors |
함수 오류를 유발한 호출 횟수입니다. 함수 오류에는 코드에서 발생한 예외와 Lambda 런타임에서 발생한 예외가 포함됩니다. 런타임은 시간 초과 및 구성 오류와 같은 문제로 인한 오류를 반환합니다. 오류율을 계산하려면 Errors 값을 Invocations 값으로 나누면 됩니다. 오류 지표의 타임스탬프는 오류가 발생한 시간이 아니라 함수를 호출한 시간을 반영합니다. |
DeadLetterErrors |
비동기 호출에서 Lambda가 이벤트를 DLQ(Dead Letter Queue)로 보내려 했지만 실패한 횟수입니다. 리소스 오구성이나 크기 제한으로 인해 데드 레터 오류가 발생할 수 있습니다. |
DestinationDeliveryFailures |
비동기 호출 및 지원되는 이벤트 소스 매핑에서 Lambda가 이벤트를 대상에 보내려 했지만 실패한 횟수입니다. 이벤트 소스 매핑의 경우 Lambda는 스트림 소스(DynamoDB 및 Kinesis)의 대상을 지원합니다. 권한 오류, 리소스 오구성 또는 크기 제한으로 인해 전송 오류가 발생할 수 있습니다. 구성한 대상이 Amazon SQS FIFO 큐나 Amazon SNS FIFO 주제와 같이 지원되지 않는 대상 유형이면 이 오류가 발생할 수 있습니다. |
Throttles |
제한된 호출 요청 수입니다. 모든 함수 인스턴스가 요청을 처리 중이고 수평 확장에 사용할 수 있는 동시성이 없으면 Lambda는 다른 요청을 거부하고 TooManyRequestsException 오류를 반환합니다. 제한된 요청과 기타 호출 오류는 Invocations 또는 Errors에 포함되지 않습니다. |
ProvisionedConcurrencyInvocations |
프로비저닝된 동시성을 사용하여 함수 코드를 호출한 횟수입니다. |
ProvisionedConcurrencySpilloverInvocations |
모든 프로비저닝된 동시성이 사용 중일 때 표준 동시성을 사용하여 함수 코드를 호출한 횟수입니다. |
RecursiveInvocationsDropped |
Lambda가 함수가 무한 재귀 루프의 일부임을 감지하여 함수 호출을 중단한 횟수입니다. Lambda 재귀 루프 감지는 지원되는 AWS SDK가 추가한 메타데이터를 추적해, 함수가 요청 체인의 일부로 몇 번 호출되었는지 모니터링합니다. 함수가 요청 체인의 일부로 16회를 초과해 호출되면 Lambda는 다음 호출을 중단합니다. |
성능 지표¶
성능 지표는 단일 함수 호출의 성능에 대한 자세한 정보를 제공합니다. 예를 들어 Duration 지표는 함수가 이벤트를 처리하는 데 걸린 시간(밀리초)을 나타냅니다. 함수가 이벤트를 얼마나 빠르게 처리하는지 확인하려면 Average 또는 Max 통계를 사용해 이 지표들을 보세요.
| 지표 | 설명 |
|---|---|
Duration |
함수 코드가 이벤트를 처리하는 데 걸린 시간입니다. 호출의 과금 지속 시간은 가장 가까운 밀리초로 반올림된 Duration 값입니다. |
PostRuntimeExtensionsDuration |
함수 코드가 완료된 후 런타임이 확장을 실행하는 데 걸린 누적 시간입니다. |
IteratorAge |
스트림에서 읽는 이벤트 소스 매핑의 경우 이벤트의 마지막 레코드가 얼마나 오래되었는지를 나타냅니다. 이 지표는 스트림이 레코드를 수신한 시간과 이벤트 소스 매핑이 이벤트를 함수로 전송한 시간 사이의 간격을 측정합니다. |
OffsetLag |
자체 관리형 Apache Kafka 및 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 이벤트 소스의 경우, 토픽에 기록된 마지막 레코드와 함수의 소비자 그룹이 처리한 마지막 레코드 사이의 오프셋 차이입니다. Kafka 토픽에는 여러 파티션이 있을 수 있지만, 이 지표는 여전히 토픽 수준에서 오프셋 지연을 측정합니다. |
동시성 지표¶
Lambda는 동시성 지표를 함수, 버전, 별칭 또는 AWS 리전 전반에서 이벤트를 처리하는 인스턴스 수의 총계로 보고합니다. 동시성 한도에 얼마나 가까운지 확인하려면 Max 통계를 사용해 이 지표들을 보세요.
| 지표 | 설명 |
|---|---|
ConcurrentExecutions |
이벤트를 처리 중인 함수 인스턴스 수입니다. 이 수가 리전의 동시 실행 할당량 또는 함수에 구성한 예약 동시성 제한에 도달하면 Lambda는 다른 호출 요청을 제한합니다. |
ProvisionedConcurrentExecutions |
프로비저닝된 동시성을 사용하여 이벤트를 처리하는 함수 인스턴스 수입니다. 프로비저닝된 동시성이 있는 별칭 또는 버전에 대한 각 호출마다 Lambda는 현재 카운트를 발행합니다. |
ProvisionedConcurrencyUtilization |
버전 또는 별칭의 경우 ProvisionedConcurrentExecutions 값을 할당된 프로비저닝 동시성 총수로 나눈 값입니다. 예를 들어 .5는 할당된 프로비저닝 동시성의 50%가 사용 중임을 나타냅니다. |
UnreservedConcurrentExecutions |
리전 기준으로 예약 동시성이 없는 함수가 처리한 이벤트 수입니다. |
비동기 호출 지표¶
비동기 호출 지표는 이벤트 소스의 비동기 호출과 직접 호출에 대한 자세한 정보를 제공합니다. 특정 변경 사항을 알리도록 임계값과 알람을 설정할 수 있습니다. 예를 들어 처리 대기 중인 이벤트 수가 예상치 않게 증가할 때(AsyncEventsReceived) 또는 이벤트 하나가 처리 완료를 오래 기다릴 때(AsyncEventAge)입니다.
| 지표 | 설명 |
|---|---|
AsyncEventsReceived |
Lambda가 처리 대기열에 성공적으로 넣은 이벤트 수입니다. 이 지표를 통해 Lambda 함수가 수신한 이벤트 수를 파악할 수 있습니다. 이 지표를 모니터링하고 임계값 알람을 설정하여 문제를 확인하세요. 예를 들어 Lambda로 전송된 잘못된 이벤트 수를 감지하고, 트리거 또는 함수 구성이 잘못되어 발생한 문제를 빠르게 진단할 수 있습니다. AsyncEventsReceived와 Invocations 간의 불일치는 처리 과정의 차이, 이벤트 삭제 또는 잠재적인 대기열 적체를 나타낼 수 있습니다. |
AsyncEventAge |
Lambda가 이벤트를 성공적으로 큐에 넣은 시점부터 해당 함수를 호출할 때까지의 시간입니다. 호출 실패 또는 제한으로 인해 이벤트를 다시 시도하면 이 지표의 값이 증가합니다. 이 지표를 모니터링하고, 대기열 적체가 발생할 때 다른 통계에 대한 임계값 알람을 설정하세요. 이 지표 증가 문제를 해결하려면 Errors 지표를 확인해 함수 오류를 식별하고, Throttles 지표를 확인해 동시성 문제를 확인하세요. |
AsyncEventsDropped |
함수를 성공적으로 실행하지 못한 상태에서 삭제된 이벤트 수입니다. DLQ 또는 OnFailure 대상을 구성했다면 이벤트는 삭제되기 전에 해당 위치로 전송됩니다. 이벤트는 여러 이유로 삭제될 수 있습니다. 예를 들어 최대 이벤트 기간을 초과했거나 최대 재시도 횟수를 소진했거나 예약 동시성이 0으로 설정된 경우입니다. 이 지표 삭제 문제를 해결하려면 Errors 지표를 확인해 함수 오류를 식별하고, Throttles 지표를 확인해 동시성 문제를 확인하세요. |
Lambda로 S3 데이터 수집¶
AWS의 Lambda를 통해 AWS의 S3 데이터를 수집하여 Guance으로 보고합니다
ELB 로그 활성화 방법은 AWS ELB 로그 수집을 참고하세요
1. 콘솔을 사용해 Lambda 함수 생성¶
-
Lamba 콘솔의 함수 페이지를 엽니다.
-
함수 생성을 선택합니다
-
처음부터 작성 선택
-
함수 이름을 입력합니다
-
런타임옵션을Python 3.10으로 설정합니다 -
Execution Role(실행 역할)에서 Create a new role with basic Lambda permissions(기본 Lambda 권한이 있는 새 역할 생성, 자세한 권한 목록은 부록을 참고하세요. 이미 존재하는 최소 권한 역할을 바로 사용할 수도 있습니다.)을 선택합니다. Lambda는 실행 역할을 생성하며, 이 역할은 함수가 로그를 Amazon CloudWatch Logs로 업로드할 수 있는 권한을 부여합니다. 함수를 호출할 때 Lambda 함수는 실행 역할을 사용하고, 이 실행 역할로 Amazon SDK의 자격 증명을 생성하며 이벤트 소스에서 데이터를 읽습니다.
-
함수 생성을 클릭합니다
-
GitHub에서 동기화 코드를 가져와 아래 코드 원본에
lambda-forward.py의 내용을lambda-function.py에 복사합니다 -
lambda-function.py와 같은 디렉터리에setting.py,datakit.py,dataway.py파일을 새로 만들고, GitHub의 해당 파일 코드를 복사해 넣습니다 -
환경 변수를 추가합니다
- DATAKIT_IP:datakit이 배포된 IP 주소, 보고 데이터 소스는 datakit이며 필수입니다
- DATAKIT_PORT:datakit 서비스 포트, 보고 데이터 소스는 datakit이며 선택 사항입니다. 기본값:
9529 - DATAWAY_URL: dataway URL (Eg: https://xx-openway.xxx.com) 보고 데이터 소스는
dataway - WORKSPACE_TOKEN:플랫폼 워크스페이스
Token, 보고 데이터 소스는dataway
주의: 보고 데이터 소스는 datakit과 dataway 중 하나를 반드시 선택해야 합니다. datakit을 선택하면
DATAKIT_IP를 구성하고, dataway를 선택하면DATAWAY_URL과WORKSPACE_TOKEN을 구성하세요 -
datakit 포트가 기본값
9529가 아니라면 환경 변수 DATAKIT_PORT를 추가해 올바른 포트 주소로 입력할 수 있습니다(이 변수는 필수가 아닙니다) -
Deploy를 클릭해 배포합니다
2. Lambda 트리거 구성¶
-
트리거 추가를 클릭합니다 -
소스 선택을S3로 설정합니다 -
모니터링할
bucket을 선택합니다 -
Lambda 함수를 트리거할 이벤트 Event types를 선택합니다
-
입력과 출력에 동일한 S3 bucket을 사용하는 것은 권장되지 않으며, 이 구성은 재귀 호출을 유발하고 Lambda 사용량과 비용을 증가시킬 수 있음을 인정합니다
-
추가를 클릭합니다
ELB에서 생성된 로그에 접근¶
ELB의 애플리케이션에 접근하면 ELB가 생성한 로그가 S3에 업로드되고, 이를 Lambda 함수로 수집하여 Guance에 보고합니다
객체¶
수집된 AWS Lambda 객체 데이터 구조이며, 「인프라-사용자 정의」에서 객체 데이터를 확인할 수 있습니다
{
"measurement": "aws_lambda",
"tags": {
"account_name" :"AWS_Lambda",
"class" :"aws_lambda",
"cloud_provider" :"aws",
"FunctionName" :"dataflux-alb",
"name" :"dataflux-alb",
"PackageType" :"Zip",
"RegionId" :"cn-northwest-1",
"RevisionId" :"5e52ff51-615a-4ecb-96b7-40083a7b4b62",
"Role" :"arn:aws-cn:iam::294654068288:role/service-role/s3--xxxx-role-3w34zo42",
"Runtime" :"python3.7",
"Version" :"$LATEST"
},
"fields": {
"CreatedTime" : "2022-03-09T06:13:31Z",
"ListenerDescriptions": "{JSON 데이터}",
"AvailabilityZones" : "{가용 영역 JSON 데이터}",
"message" : "{인스턴스 JSON 데이터}"
}
}
주의:
tags와fields의 필드는 이후 업데이트에 따라 변경될 수 있습니다안내 1:
tags.account_name의 값은 인스턴스 ID이며, 고유 식별자로 사용됩니다
