Monitorar a simultaneidade - AWS Lambda

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.

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 para ConcurrentExecutions 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 a UnreservedConcurrentExecutions mais a quantidade de simultaneidade alocada (ou seja, a simultaneidade total reservada mais a simultaneidade total provisionada). Se ClaimedAccountConcurrency 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:

Comparação entre ProvisionedConcurrencyInvocations e ProvisionedConcurrentExecutions.

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 de ProvisionedConcurrencyInvocations + ProvisionedConcurrencySpilloverInvocations deve ser igual ao número total de invocações da função (ou seja, a métrica Invocations).

    ProvisionedConcurrencyUtilization: a porcentagem de simultaneidade provisionada em uso (ou seja, o valor de ProvisionedConcurrentExecutions 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 usam PC, excluindo as funções que usam RC.

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:

Um gráfico mostrando como o Lambda determina ClaimedAccountConcurrency.

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 + 0 UnreservedConcurrentExecutions).

  • Em t2, ClaimedAccountConcurrency é 900 (800 + 100 UnreservedConcurrentExecutions).

  • Em t3, ClaimedAccountConcurrency é, novamente, 900 (800 + 100 UnreservedConcurrentExecutions).

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%:

Uma captura de tela mostrando como você pode usar a métrica ClaimedAccountConcurrency no CloudWatch.

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.