동시성 모니터링
Lambda는 CloudWatch Amazon 지표를 생성하여 함수의 동시성을 모니터링하는 데 도움이 됩니다. 이 토픽에서는 이러한 지표와 이를 해석하는 방법을 설명합니다.
일반 동시성 지표
다음 지표를 사용하여 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입니다.
-
ProvisionedConcurrentInvocations
– Lambda가 프로비저닝된 동시성을 사용하여 함수 코드를 호출되는 횟수입니다. Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. SUM을 사용하여 이 지표를 봅니다.
ProvisionedConcurrentInvocations
는 총 호출 수를 계산하고 ProvisionedConcurrentExecutions
는 활성 환경 수를 계산한다는 점에서 ProvisionedConcurrentInvocations
는 ProvisionedConcurrentExecutions
와 다릅니다. 이러한 차이를 이해하려면 다음 시나리오를 고려하세요.
![과 를 구분하는 그래픽. ProvisionedConcurrentInvocations ProvisionedConcurrentExecutions](images/concurrency-metrics-pc-executions-vs-invocations.png)
이 예제에서는 분당 1개의 호출을 수신하고 각 호출을 완료하는 데 2분이 걸린다고 가정해 보겠습니다. 각 주황색 가로 막대는 단일 요청을 나타냅니다. 각 요청이 프로비저닝된 동시성에서 실행되도록 이 함수에 10단위의 프로비저닝된 동시성을 할당한다고 가정해 보겠습니다.
0분에서 1분 사이에 Request 1
이 들어옵니다. 1분에서 MAX(ProvisionedConcurrentExecutions
)의 값은 1입니다. 지난 1분 동안 최대 1개의 실행 환경이 활성화되었기 때문입니다. SUM(ProvisionedConcurrentInvocations
) 값도 1입니다. 지난 1분 동안 1개의 새 요청이 들어왔기 때문입니다.
1분에서 2분 사이에 Request 2
가 들어오고 Request 1
이 계속 실행됩니다. 2분에서 MAX(ProvisionedConcurrentExecutions
)의 값은 2입니다. 지난 1분 동안 최대 2개의 실행 환경이 활성화되었기 때문입니다. 그러나 SUM(ProvisionedConcurrentInvocations
) 값은 1입니다. 지난 1분 동안 1개의 새 요청만 들어왔기 때문입니다. 이 지표 동작은 예제가 끝날 때까지 계속됩니다.
-
ProvisionedConcurrencySpilloverInvocations
– 모든 프로비저닝된 동시성을 사용 중인 경우 Lambda가 표준 동시성(예약되거나 예약되지 않은 동시성)을 사용하여 함수를 호출하는 횟수입니다. Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. SUM을 사용하여 이 지표를 봅니다.ProvisionedConcurrentInvocations
+ProvisionedConcurrencySpilloverInvocations
의 값은 총 함수 호출 수(즉,Invocations
지표)와 같아야 합니다.ProvisionedConcurrencyUtilization
– 사용 중인 프로비저닝된 동시성의 백분율(즉,ProvisionedConcurrentExecutions
값을 할당된 프로비저닝된 동시성의 총량으로 나눈 값). Lambda는 프로비저닝된 동시성이 구성된 각 함수 버전 및 별칭에 대해 이 지표를 내보냅니다. MAX를 사용하여 이 지표를 봅니다.
예를 들어, 100단위의 프로비저닝된 동시성을 함수 버전에 프로비저닝한다고 가정해 보겠습니다. 지정된 시간 동안 실행 환경 100개 중 최대 60개가 호출을 동시에 처리하는 경우 MAX(ProvisionedConcurrentExecutions
) 값은 60이고 MAX(ProvisionedConcurrentUtilization
) 값은 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을 할당합니다. 시간이 지남에 따라 추가 함수를 배포하고 다음 트래픽 패턴을 관찰한다고 가정합니다.
![Lambda의 결정 방식을 보여주는 그래프. ClaimedAccountConcurrency](images/claimed-account-concurrency.png)
이전 다이어그램에서 검은색 선은 시간 경과에 따른 실제 동시성 수를 나타내고 빨간색 선은 시간 경과에 따른 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)입니다.
측정치 설정: ClaimedAccountConcurrency
CloudWatch
Lambda는 메트릭을 ClaimedAccountConcurrency
내보냅니다. CloudWatch 다음 수식과 같이 계정의 동시성 사용률 퍼센트를 얻기 위해 SERVICE_QUOTA(ConcurrentExecutions)
의 값과 함께 이 지표를 사용합니다.
Utilization = (ClaimedAccountConcurrency/SERVICE_QUOTA(ConcurrentExecutions)) * 100%
다음 스크린샷은 이 공식을 그래프로 표시하는 방법을 보여줍니다. CloudWatch 녹색 claim_utilization
선은 이 계정의 동시성 사용률을 나타내며, 약 40%입니다.
![에서 ClaimedAccountConcurrency 메트릭을 사용하는 방법을 보여주는 스크린샷 CloudWatch.](images/claimed-account-concurrency-cloudwatch-graph.png)
이전 스크린샷에는 동시 사용률이 70% 를 초과할 때 ALARM
상태가 되는 CloudWatch 경보도 포함되어 있습니다. 유사한 경보와 함께 ClaimedAccountConcurrency
지표를 사용하여 계정 동시성 한도 상향 조정을 요청해야 하는 시기를 사전에 결정할 수 있습니다.