

# Monitorar a simultaneidade
<a name="monitoring-concurrency"></a>

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.

**Topics**
+ [Métricas gerais de simultaneidade](#general-concurrency-metrics)
+ [Métricas de simultaneidade provisionada](#provisioned-concurrency-metrics)
+ [Trabalhar com a métrica `ClaimedAccountConcurrency`](#claimed-account-concurrency)

## Métricas gerais de simultaneidade
<a name="general-concurrency-metrics"></a>

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](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-concurrency-limit-increase/). Visualize essa métrica usando **MAX**. Para obter mais informações, consulte [Trabalhar com a métrica `ClaimedAccountConcurrency`](#claimed-account-concurrency).

## Métricas de simultaneidade provisionada
<a name="provisioned-concurrency-metrics"></a>

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:

![\[\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/images/concurrency-metrics-pc-executions-vs-invocations.png)


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` \$1 `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](https://docs.aws.amazon.com/lambda/latest/dg/provisioned-concurrency.html#managing-provisioned-concurency) 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`
<a name="claimed-account-concurrency"></a>

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:

![\[\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/images/claimed-account-concurrency.png)


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 \$1 0 `UnreservedConcurrentExecutions`).
+ Em `t2`, `ClaimedAccountConcurrency` é 900 (800 \$1 100 `UnreservedConcurrentExecutions`).
+ Em `t3`, `ClaimedAccountConcurrency` é, novamente, 900 (800 \$1 100 `UnreservedConcurrentExecutions`).

### Configurar a métrica `ClaimedAccountConcurrency` no CloudWatch
<a name="claimed-account-concurrency-example"></a>

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

![\[\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/images/claimed-account-concurrency-cloudwatch-graph.png)


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.