동시성 모니터링
Lambda가 함수에 대한 동시성 지표를 모니터링하는 데 도움이 되는 Amazon CloudWatch 지표를 내보냅니다. 이 토픽에서는 이러한 지표와 이를 해석하는 방법을 설명합니다.
일반 동시성 지표
다음 지표를 사용하여 Lambda 함수의 동시성을 모니터링합니다. 각 지표의 단위는 1분입니다.
-
ConcurrentExecutions
- 지정된 시점의 활성 동시 호출 수입니다. Lambda는 모든 함수, 버전 및 별칭에 대해 이 지표를 내보냅니다. Lambda 콘솔의 모든 함수에 대해 Lambda는 기본적으로 지표 아래의 모니터링 탭에ConcurrentExecutions
에 대한 그래프를 표시합니다. MAX를 사용하여 이 지표를 봅니다. -
UnreservedConcurrentExecutions
- 예약되지 않은 동시성을 사용하는 활성 동시 호출 수입니다. Lambda는 리전의 모든 함수에 대해 이 지표를 내보냅니다. MAX를 사용하여 이 지표를 봅니다. -
ClaimedAccountConcurrency
- 온디맨드 간접 호출에 사용할 수 없는 동시 실행 수입니다.ClaimedAccountConcurrency
는UnreservedConcurrentExecutions
에 할당된 동시성 크기를 더한 값과 같습니다(즉, 예약된 총 동시성과 프로비저닝된 총 동시성 합계).ClaimedAccountConcurrency
가 계정의 동시성 한도를 초과하는 경우 더 높은 계정 동시성 한도를 요청할 수 있습니다. MAX를 사용하여 이 지표를 봅니다. 자세한 내용은 ClaimedAccountConcurrency 지표 작업 단원을 참조하십시오.
프로비저닝된 동시성 지표
다음 지표를 사용하여 프로비저닝된 동시성을 사용하는 Lambda 함수를 모니터링합니다. 각 지표의 단위는 1분입니다.
-
ProvisionedConcurrentExecutions
– 프로비저닝된 동시성에 대한 호출을 능동적으로 처리하는 실행 환경 인스턴스의 수입니다. Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. MAX를 사용하여 이 지표를 봅니다.
ProvisionedConcurrentExecutions
는 할당하는 프로비저닝된 동시성의 총 수와 동일하지 않습니다. 예를 들어, 100단위의 프로비저닝된 동시성을 함수 버전에 할당한다고 가정해 보겠습니다. 지정된 시간 동안 실행 환경 100개 중 최대 50개가 호출을 동시에 처리하는 경우 MAX(ProvisionedConcurrentExecutions
) 값은 50입니다.
-
ProvisionedConcurrencyInvocations
– Lambda가 프로비저닝된 동시성을 사용하여 함수 코드를 호출되는 횟수입니다. Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. SUM을 사용하여 이 지표를 봅니다.
ProvisionedConcurrencyInvocations
는 총 호출 수를 계산하고 ProvisionedConcurrentExecutions
는 활성 환경 수를 계산한다는 점에서 ProvisionedConcurrencyInvocations
는 ProvisionedConcurrentExecutions
와 다릅니다. 이러한 차이를 이해하려면 다음 시나리오를 고려하세요.
이 예제에서는 분당 1개의 호출을 수신하고 각 호출을 완료하는 데 2분이 걸린다고 가정해 보겠습니다. 각 주황색 가로 막대는 단일 요청을 나타냅니다. 각 요청이 프로비저닝된 동시성에서 실행되도록 이 함수에 10단위의 프로비저닝된 동시성을 할당한다고 가정해 보겠습니다.
0분에서 1분 사이에 Request 1
이 들어옵니다. 1분에서 MAX(ProvisionedConcurrentExecutions
)의 값은 1입니다. 지난 1분 동안 최대 1개의 실행 환경이 활성화되었기 때문입니다. SUM(ProvisionedConcurrencyInvocations
) 값도 1입니다. 지난 1분 동안 1개의 새 요청이 들어왔기 때문입니다.
1분에서 2분 사이에 Request 2
가 들어오고 Request 1
이 계속 실행됩니다. 2분에서 MAX(ProvisionedConcurrentExecutions
)의 값은 2입니다. 지난 1분 동안 최대 2개의 실행 환경이 활성화되었기 때문입니다. 그러나 SUM(ProvisionedConcurrencyInvocations
) 값은 1입니다. 지난 1분 동안 1개의 새 요청만 들어왔기 때문입니다. 이 지표 동작은 예제가 끝날 때까지 계속됩니다.
-
ProvisionedConcurrencySpilloverInvocations
– 모든 프로비저닝된 동시성을 사용 중인 경우 Lambda가 표준 동시성(예약되거나 예약되지 않은 동시성)을 사용하여 함수를 호출하는 횟수입니다. Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. SUM을 사용하여 이 지표를 봅니다.ProvisionedConcurrencyInvocations
+ProvisionedConcurrencySpilloverInvocations
의 값은 총 함수 호출 수(즉,Invocations
지표)와 같아야 합니다.ProvisionedConcurrencyUtilization
– 사용 중인 프로비저닝된 동시성의 백분율(즉,ProvisionedConcurrentExecutions
값을 할당된 프로비저닝된 동시성의 총량으로 나눈 값). Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. MAX를 사용하여 이 지표를 봅니다.
예를 들어, 100단위의 프로비저닝된 동시성을 함수 버전에 프로비저닝한다고 가정해 보겠습니다. 지정된 시간 동안 실행 환경 100개 중 최대 60개가 호출을 동시에 처리하는 경우 MAX(ProvisionedConcurrentExecutions
) 값은 60이고 MAX(ProvisionedConcurrencyUtilization
) 값은 0.6입니다.
ProvisionedConcurrencySpilloverInvocations
값이 높으면 함수에 프로비저닝된 동시성을 추가로 할당해야 할 수 있습니다. 또는 사전 정의된 임계값을 기반으로 프로비저닝된 동시성의 자동 크기 조정을 처리하도록 Application Auto Scaling을 구성할 수 있습니다.
반대로 ProvisionedConcurrencyUtilization
의 값이 계속 낮으면 함수에 대해 프로비저닝된 동시성이 과도하게 할당되었을 수 있습니다.
ClaimedAccountConcurrency
지표 작업
Lambda는 ClaimedAccountConcurrency
지표를 사용하여 온디맨드 간접 호출에 사용할 수 있는 계정의 동시성 수를 결정합니다. Lambda는 다음 수식을 ClaimedAccountConcurrency
를 계산합니다.
ClaimedAccountConcurrency = UnreservedConcurrentExecutions + (allocated concurrency)
UnreservedConcurrentExecutions
는 예약되지 않은 동시성을 사용하는 활성 동시 간접 호출 수입니다. 할당된 동시성은 다음 두 부분의 합계입니다(RC
는 '예약된 동시성', PC
는 '프로비저닝된 동시성'으로 대체).
-
리전의 모든 함수에 대한
RC
합계. -
RC
를 사용하는 함수를 제외하고PC
를 사용하는 리전의 모든 함수에서PC
합계.
참고
함수에서 RC
보다 더 많은 PC
를 할당할 수 없습니다. 따라서 함수의 RC
는 항상 해당 PC
이상입니다. PC
및 RC
를 모두 사용하는 함수에 할당된 동시성의 기여도를 계산할 때 Lambda는 둘 중 최댓값인 RC
만 고려합니다.
Lambda는 ConcurrentExecutions
대신 ClaimedAccountConcurrency
지표를 사용하여 온디맨드 간접 호출에 사용할 수 있는 동시성 수를 결정합니다. ConcurrentExecutions
지표는 활성 동시 간접 호출 수를 추적하는 데 유용하지만 실제 동시 실행 가능 여부를 항상 반영하는 것은 아닙니다. Lambda는 예약 동시성과 프로비저닝된 동시성도 고려하여 가용성을 결정하기 때문입니다.
ClaimedAccountConcurrency
를 설명하기 위해 함수 전체에서 많은 예약 동시성과 프로비저닝된 동시성을 구성하지만 거의 사용되지 않는 시나리오를 살펴봅니다. 다음 예제에서는 계정 동시성 한도가 1,000이고 계정에 두 가지 주요 함수(function-orange
및 function-blue
)가 있다고 가정합니다. function-orange
의 예약된 동시성 단위로 600을 할당합니다. function-blue
의 프로비저닝된 동시성 단위로 200을 할당합니다. 시간이 지남에 따라 추가 함수를 배포하고 다음 트래픽 패턴을 관찰한다고 가정합니다.
이전 다이어그램에서 검은색 선은 시간 경과에 따른 실제 동시성 수를 나타내고 빨간색 선은 시간 경과에 따른 ClaimedAccountConcurrency
값을 나타냅니다. 함수 전체에서 실제 동시성 사용률은 낮지만 이 시나리오에서는 ClaimedAccountConcurrency
의 최솟값이 800입니다. function-orange
및 function-blue
에 총 800의 동시성 단위를 할당했기 때문입니다. Lambda의 관점에서 이 동시성을 사용하도록 '청구'했으므로 다른 함수에 사용할 수 있는 남은 동시성 단위는 실제로 200입니다.
이 시나리오에서 할당된 동시성은 ClaimedAccountConcurrency
수식에서 800입니다. 그러면 다이어그램의 다양한 지점에서 ClaimedAccountConcurrency
의 값을 파생시킬 수 있습니다.
-
t1
에서ClaimedAccountConcurrency
는 800(800 +UnreservedConcurrentExecutions
0)입니다. -
t2
에서ClaimedAccountConcurrency
는 900(800 +UnreservedConcurrentExecutions
100)입니다. -
t3
에서ClaimedAccountConcurrency
는 다시 900(800 +UnreservedConcurrentExecutions
100)입니다.
CloudWatch에서 ClaimedAccountConcurrency
지표 설정
Lambda는 CloudWatch에서 ClaimedAccountConcurrency
지표를 생성합니다. 다음 수식과 같이 계정의 동시성 사용률 퍼센트를 얻기 위해 SERVICE_QUOTA(ConcurrentExecutions)
의 값과 함께 이 지표를 사용합니다.
Utilization = (ClaimedAccountConcurrency/SERVICE_QUOTA(ConcurrentExecutions)) * 100%
다음 스크린샷은 CloudWatch에서 이 수식을 그래프로 표시하는 방법을 보여줍니다. 녹색 claim_utilization
선은 이 계정의 동시성 사용률을 나타내며, 약 40%입니다.
이전 스크린샷에는 동시성 사용률이 70%를 초과할 때 ALARM
상태가 되는 CloudWatch 경보도 포함되어 있습니다. 유사한 경보와 함께 ClaimedAccountConcurrency
지표를 사용하여 계정 동시성 한도 상향 조정을 요청해야 하는 시기를 사전에 결정할 수 있습니다.