Monitorar a simultaneidade
O Lambda gera métricas do Amazon CloudWatch para ajudar você a monitorar a simultaneidade das funções. Este tópico explica essas métricas e como interpretá-las.
Seções
Métricas gerais de simultaneidade
Use as métricas a seguir para monitorar a simultaneidade das funções do Lambda. A granularidade de cada métrica é de um minuto.
-
ConcurrentExecutions
: o número de invocações simultâneas ativas em um determinado ponto no tempo. O Lambda gera essa métrica para todas as funções, versões e aliases. Para qualquer função no console do Lambda, o Lambda exibe o grafo paraConcurrentExecutions
nativamente na guia Monitoramento, em Métricas. Visualize essa métrica usando MAX. -
UnreservedConcurrentExecutions
: o número de invocações simultâneas ativas que estão usando a simultaneidade não reservada. O Lambda gera essa métrica em todas as funções de uma região. Visualize essa métrica usando MAX. -
ClaimedAccountConcurrency
: quantidade de simultaneidade que não está disponível para invocações sob demanda.ClaimedAccountConcurrency
é igual aUnreservedConcurrentExecutions
mais a quantidade de simultaneidade alocada (ou seja, a simultaneidade total reservada mais a simultaneidade total provisionada). SeClaimedAccountConcurrency
exceder o limite de simultaneidade da conta, você poderá solicitar um limite maior de simultaneidade para a conta. Visualize essa métrica usando MAX. Para ter mais informações, consulte Trabalhar com a métrica ClaimedAccountConcurrency.
Métricas de simultaneidade provisionada
Use as métricas a seguir para monitorar as funções do Lambda usando a simultaneidade provisionada. A granularidade de cada métrica é de um minuto.
-
ProvisionedConcurrentExecutions
: o número de instâncias do ambiente de execução que estão ativamente processando uma invocação na simultaneidade provisionada. O Lambda gera essa métrica para cada versão e alias da função com a simultaneidade provisionada configurada. Visualize essa métrica usando MAX.
ProvisionedConcurrentExecutions
não é o mesmo que o número total de simultaneidade provisionada que você aloca. Por exemplo, suponha que você aloque 100 unidades de simultaneidade provisionada para uma versão de função. Durante um determinado minuto, se no máximo 50 desses 100 ambientes de execução estivessem lidando com invocações simultaneamente, o valor de MAX (ProvisionedConcurrentExecutions
) seria 50.
-
ProvisionedConcurrencyInvocations
: o número de vezes que o Lambda invoca o código da função usando a simultaneidade provisionada. O Lambda gera essa métrica para cada versão e alias da função com a simultaneidade provisionada configurada. Visualize essa métrica usando SUM.
ProvisionedConcurrencyInvocations
difere de ProvisionedConcurrentExecutions
porque ProvisionedConcurrencyInvocations
conta o número total de invocações, enquanto ProvisionedConcurrentExecutions
conta o número de ambientes ativos. Para entender essa distinção, considere o seguinte cenário:
Neste exemplo, suponha que você receba uma invocação por minuto e cada invocação leve dois minutos para ser concluída. Cada barra horizontal laranja representa uma única solicitação. Suponha que você aloque dez unidades de simultaneidade provisionada para essa função de forma que cada solicitação seja executada na simultaneidade provisionada.
Entre os minutos 0 e 1, entra Request 1
. No minuto 1, o valor de MAX (ProvisionedConcurrentExecutions
) é 1, pois no máximo um ambiente de execução estava ativo durante o último minuto. O valor de SUM (ProvisionedConcurrencyInvocations
) também é 1, pois uma nova solicitação foi recebida no último minuto.
Entre os minutos 1 e 2, Request 2
entra e Request 1
continua em execução. No minuto 2, o valor de MAX (ProvisionedConcurrentExecutions
) é 2, pois no máximo dois ambientes de execução estavam ativos durante o último minuto. Entretanto, o valor de SUM (ProvisionedConcurrencyInvocations
) também é 1, pois somente uma nova solicitação foi recebida durante o último minuto. Esse comportamento métrico continua até o final do exemplo.
-
ProvisionedConcurrencySpilloverInvocations
: o número de vezes que o Lambda invoca a função na simultaneidade padrão (reservada ou não reservada) quando toda a simultaneidade provisionada está em uso. O Lambda gera essa métrica para cada versão e alias da função com a simultaneidade provisionada configurada. Visualize essa métrica usando SUM. O valor deProvisionedConcurrencyInvocations
+ProvisionedConcurrencySpilloverInvocations
deve ser igual ao número total de invocações da função (ou seja, a métricaInvocations
).ProvisionedConcurrencyUtilization
: a porcentagem de simultaneidade provisionada em uso (ou seja, o valor deProvisionedConcurrentExecutions
dividido pela quantidade total de simultaneidade provisionada alocada). O Lambda gera essa métrica para cada versão e alias da função com a simultaneidade provisionada configurada. Visualize essa métrica usando MAX.
Por exemplo, suponha que você provisione 100 unidades de simultaneidade provisionada para uma versão de função. Durante um determinado minuto, se no máximo 60 desses 100 ambientes de execução estivessem processando invocações simultaneamente, o valor de MAX (ProvisionedConcurrentExecutions
) seria 60 e o valor de MAX (ProvisionedConcurrencyUtilization
) seria 0,6.
Um valor alto para ProvisionedConcurrencySpilloverInvocations
pode indicar que você precisa alocar simultaneidade provisionada adicional para a função. Como alternativa, você pode configurar o Application Auto Scaling para processar o ajuste de escala automático da simultaneidade provisionada com base em limites predefinidos.
Por outro lado, valores consistentemente baixos para ProvisionedConcurrencyUtilization
podem indicar que você superalocou a simultaneidade provisionada para a função.
Trabalhar com a métrica ClaimedAccountConcurrency
O Lambda usa a métrica ClaimedAccountConcurrency
para determinar a quantidade de simultaneidade que está disponível na sua conta para invocações sob demanda. O Lambda calcula ClaimedAccountConcurrency
usando a seguinte fórmula:
ClaimedAccountConcurrency = UnreservedConcurrentExecutions + (allocated concurrency)
UnreservedConcurrentExecutions
é o número de invocações simultâneas ativas que estão usando a simultaneidade não reservada. A simultaneidade alocada é a soma das duas partes a seguir (substituindo RC
por “simultaneidade reservada” e PC
por “simultaneidade provisionada”):
-
O total de
RC
em todas as funções em uma região. -
O total de
PC
em todas as funções em uma região que usamPC
, excluindo as funções que usamRC
.
nota
Você não pode alocar mais PC
do que RC
para uma função. Portanto, a função RC
é sempre maior ou igual à sua PC
. Para calcular a contribuição para a simultaneidade alocada dessas funções com PC
e RC
, o Lambda considera apenas RC
, que é o máximo das duas.
O Lambda usa a métrica ClaimedAccountConcurrency
em vez de ConcurrentExecutions
para determinar a quantidade de simultaneidade que está disponível para invocações sob demanda. Embora a métrica ConcurrentExecutions
seja útil para rastrear o número de invocações simultâneas ativas, ela nem sempre reflete a verdadeira disponibilidade de simultaneidade. Isso ocorre porque o Lambda também considera a simultaneidade reservada e a simultaneidade provisionada para determinar a disponibilidade.
Para ilustrar ClaimedAccountConcurrency
, considere um cenário em que você configura muitas simultaneidades reservadas e provisionadas nas funções que, em grande parte, não são usadas. No exemplo a seguir, suponha que o limite de simultaneidade da sua conta seja 1.000 e que você tenha duas funções principais na conta: function-orange
e function-blue
. Você aloca 600 unidades de simultaneidade reservada para function-orange
. Você aloca 200 unidades de simultaneidade provisionada para function-blue
. Suponha que, com o tempo, você implante funções adicionais e observe o seguinte padrão de tráfego:
No diagrama anterior, as linhas pretas indicam o uso real da simultaneidade ao longo do tempo, e a linha vermelha indica o valor de ClaimedAccountConcurrency
ao longo do tempo. Em todo esse cenário, ClaimedAccountConcurrency
no mínimo é 800, apesar da baixa utilização real da simultaneidade nas funções. Isso ocorre porque você alocou o total de 800 unidades de simultaneidade para function-orange
e function-blue
. Da perspectiva do Lambda, você “reivindicou” essa simultaneidade para uso, portanto você efetivamente só tem 200 unidades de simultaneidade restantes para outras funções.
Para esse cenário, a simultaneidade alocada é 800 na fórmula ClaimedAccountConcurrency
. Podemos, então, calcular o valor de ClaimedAccountConcurrency
em vários pontos do diagrama:
-
Em
t1
,ClaimedAccountConcurrency
é 800 (800 + 0UnreservedConcurrentExecutions
). -
Em
t2
,ClaimedAccountConcurrency
é 900 (800 + 100UnreservedConcurrentExecutions
). -
Em
t3
,ClaimedAccountConcurrency
é, novamente, 900 (800 + 100UnreservedConcurrentExecutions
).
Configurar a métrica ClaimedAccountConcurrency
no CloudWatch
O Lambda emite a métrica ClaimedAccountConcurrency
no CloudWatch. Use essa métrica com o valor de SERVICE_QUOTA(ConcurrentExecutions)
para obter a utilização percentual da simultaneidade na conta, conforme mostrado na seguinte fórmula:
Utilization = (ClaimedAccountConcurrency/SERVICE_QUOTA(ConcurrentExecutions)) * 100%
A captura de tela a seguir ilustra como você pode representar graficamente essa fórmula no CloudWatch. A linha verde claim_utilization
representa a utilização da simultaneidade nessa conta, que está em torno de 40%:
A captura de tela anterior também inclui um alarme do CloudWatch que entra no estado ALARM
quando a utilização da simultaneidade excede 70%. Você poderá usar a métrica ClaimedAccountConcurrency
associada a alarmes semelhantes para determinar proativamente quando poderá ser preciso solicitar um limite maior de simultaneidade para a conta.