Monitoreo de la simultaneidad - AWS Lambda

Monitoreo de la simultaneidad

Lambda emite métricas de Amazon CloudWatch para ayudarlo a monitorear la simultaneidad de sus funciones. En este tema, se explican estas métricas y cómo interpretarlas.

Métricas generales de simultaneidad

Utilice estas métricas para monitorear la simultaneidad de las funciones de Lambda. La granularidad de cada métrica es de 1 minuto.

  • ConcurrentExecutions: la cantidad de invocaciones simultáneas activas en un momento determinado. Lambda emite esta métrica para todas las funciones, alias y versiones. Para cualquier función de la consola de Lambda, se muestra el gráfico sobre ConcurrentExecutions de forma nativa en la pestaña Monitoreo, en Métricas. Visualice esta métrica mediante MAX.

  • UnreservedConcurrentExecutions: la cantidad de invocaciones simultáneas activas que utilizan la simultaneidad no reservada. Lambda emite esta métrica en todas las funciones de una región. Visualice esta métrica mediante MAX.

  • ClaimedAccountConcurrency: la cantidad de simultaneidad que no está disponible para las invocaciones bajo demanda. ClaimedAccountConcurrency es igual a UnreservedConcurrentExecutions más la cantidad de simultaneidad asignada (es decir, la simultaneidad reservada total más la simultaneidad aprovisionada total). Si ClaimedAccountConcurrency supera el límite de simultaneidad de su cuenta, puede solicitar un límite de simultaneidad de cuentas superior. Visualice esta métrica mediante MAX. Para obtener más información, consulte Cómo trabajar con la métrica ClaimedAccountConcurrency.

Métricas de simultaneidad aprovisionada

Utilice las siguientes métricas para monitorear las funciones de Lambda mediante la simultaneidad aprovisionada. La granularidad de cada métrica es de 1 minuto.

  • ProvisionedConcurrentExecutions: la cantidad de instancias de entorno de ejecución que están procesando de forma activa una invocación con simultaneidad aprovisionada. Lambda emite esta métrica para cada versión y alias de función con la simultaneidad aprovisionada configurada. Visualice esta métrica mediante MAX.

ProvisionedConcurrentExecutions no es lo mismo que el número total de simultaneidad aprovisionada que usted asigna. Por ejemplo, supongamos que asigna 100 unidades de simultaneidad aprovisionadas a una versión de la función. Durante un minuto dado, si al menos 50 de esos 100 entornos de ejecución gestionaban invocaciones en simultáneo, el valor de MAX (ProvisionedConcurrentExecutions) es 50.

  • ProvisionedConcurrencyInvocations: es la cantidad de veces que Lambda invoca el código de la función mediante la simultaneidad aprovisionada. Lambda emite esta métrica para cada versión y alias de función con la simultaneidad aprovisionada configurada. Visualice esta métrica mediante SUM.

ProvisionedConcurrencyInvocations difiere de ProvisionedConcurrentExecutions en que ProvisionedConcurrencyInvocations cuenta el número total de invocaciones, mientras que ProvisionedConcurrentExecutions cuenta el número de entornos activos. Para entender esta distinción, considere el siguiente escenario:

Comparación entre ProvisionedConcurrencyInvocations y ProvisionedConcurrentExecutions.

En este ejemplo, suponga que recibe 1 invocación por minuto y que cada invocación tarda 2 minutos en completarse. Cada barra horizontal naranja representa una única solicitud. Supongamos que asigna 10 unidades de simultaneidad aprovisionadas a esta función, de modo que cada solicitud se ejecute con simultaneidad aprovisionada.

Entre los minutos 0 y 1, entra Request 1. En el minuto 1, el valor de MAX (ProvisionedConcurrentExecutions) es 1, ya que, como máximo, 1 entorno de ejecución estuvo activo durante el último minuto. El valor de SUM (ProvisionedConcurrencyInvocations) también es 1, ya que se recibió 1 solicitud nueva en el último minuto.

Entre los minutos 1 y 2, entra la Request 2 y la Request 1 continúa ejecutándose. En el minuto 2, el valor de MAX (ProvisionedConcurrentExecutions) es 2, ya que durante el último minuto estuvieron activos como máximo 2 entornos de ejecución. Sin embargo, el valor de SUM (ProvisionedConcurrencyInvocations) es 1, ya que solo se recibió 1 solicitud nueva en el último minuto. Este comportamiento de la métrica continúa hasta el final del ejemplo.

  • ProvisionedConcurrencySpilloverInvocations: es la cantidad de veces que Lambda invoca la función en simultaneidad estándar (reservada o no reservada) cuando toda la simultaneidad aprovisionada está en uso. Lambda emite esta métrica para cada versión y alias de función con la simultaneidad aprovisionada configurada. Visualice esta métrica mediante SUM. El valor de ProvisionedConcurrencyInvocations + ProvisionedConcurrencySpilloverInvocations debe ser igual al número total de invocaciones de funciones (es decir, la métrica Invocations).

    ProvisionedConcurrencyUtilization: el porcentaje de simultaneidad aprovisionada en uso (por ejemplo, el valor de ProvisionedConcurrentExecutions dividido por la cantidad total de simultaneidad aprovisionada asignada). Lambda emite esta métrica para cada versión y alias de función con la simultaneidad aprovisionada configurada. Visualice esta métrica mediante MAX.

Por ejemplo, supongamos que aprovisiona 100 unidades de simultaneidad aprovisionadas a una versión de la función. Durante un minuto dado, si como máximo 60 de esos 100 entornos de ejecución gestionaban invocaciones de forma simultánea, el valor de MAX (ProvisionedConcurrentExecutions) es 60 y el valor de MAX (ProvisionedConcurrencyUtilization) es 0,6.

Un valor alto para ProvisionedConcurrencySpilloverInvocations puede indicar que necesita asignar una simultaneidad aprovisionada adicional para su función. Como alternativa, puede configurar el Auto Scaling de aplicaciones para gestionar el escalado automático de la simultaneidad aprovisionada en función de umbrales predefinidos.

Por el contrario, los valores consistentemente bajos de ProvisionedConcurrencyUtilization pueden indicar que ha asignado en exceso la simultaneidad aprovisionada para su función.

Cómo trabajar con la métrica ClaimedAccountConcurrency

Lambda utiliza la métrica ClaimedAccountConcurrency para determinar la cantidad de simultaneidad disponible de su cuenta para las invocaciones bajo demanda. Lambda calcula ClaimedAccountConcurrency mediante la siguiente fórmula:

ClaimedAccountConcurrency = UnreservedConcurrentExecutions + (allocated concurrency)

UnreservedConcurrentExecutions es la cantidad de invocaciones simultáneas activas que utilizan la simultaneidad no reservada. La simultaneidad asignada es la suma de las siguientes dos partes (RC se sustituye por “simultaneidad reservada” y PC por “simultaneidad aprovisionada”):

  • El RC total de todas las funciones de una Región.

  • El PC total de todas las funciones de una Región que utilizan PC, excepto las funciones que utilizan RC.

nota

No puede asignar más PC que RC para una función. Por lo tanto, la RC de una función siempre es mayor o igual que su PC. Para calcular la contribución a la simultaneidad asignada para dichas funciones con PC y RC, Lambda solo tiene en cuenta RC, que es la más alta de las dos.

Lambda utiliza la métrica ClaimedAccountConcurrency, en lugar de ConcurrentExecutions, para determinar la cantidad de simultaneidad disponible para las invocaciones bajo demanda. Si bien la métrica ConcurrentExecutions es útil para realizar un seguimiento del número de invocaciones simultáneas activas, no siempre refleja su verdadera disponibilidad simultánea. Esto se debe a que Lambda también considera la simultaneidad reservada y la simultaneidad aprovisionada para determinar la disponibilidad.

Para ejemplificar ClaimedAccountConcurrency, imagine un escenario en el que configura una gran cantidad de simultaneidad reservada y aprovisionada en todas las funciones que prácticamente no se utilizan. En el siguiente ejemplo, supongamos que el límite de simultaneidad de su cuenta es 1000 y que tiene dos funciones principales en su cuenta: function-orange y function-blue. Asigna 600 unidades de simultaneidad reservada a function-orange. Asigna 200 unidades de simultaneidad aprovisionada a function-blue. Supongamos que, con el transcurso del tiempo, implementa funciones adicionales y observa el siguiente patrón de tráfico:

Un gráfico que muestra cómo Lambda determina ClaimedAccountConcurrency.

En el diagrama anterior, las líneas negras indican el uso real de la simultaneidad a lo largo del tiempo y la línea roja indica el valor de ClaimedAccountConcurrency a lo largo del tiempo. En este escenario, ClaimedAccountConcurrency es 800 como mínimo, a pesar del bajo uso real de la simultaneidad en todas las funciones. Esto se debe a que asignó 800 unidades totales de simultaneidad para function-orange y function-blue. Desde el punto de vista de Lambda, usted “reclamó” esta simultaneidad para utilizarla, por lo que, efectivamente, solo le quedan 200 unidades de simultaneidad para otras funciones.

En este escenario, la simultaneidad asignada es 800 en la fórmula ClaimedAccountConcurrency. A continuación, podemos derivar el valor de ClaimedAccountConcurrency en varios puntos del diagrama:

  • En t1, ClaimedAccountConcurrency es 800 (800 + 0 UnreservedConcurrentExecutions).

  • En t2, ClaimedAccountConcurrency es 900 (800 + 100 UnreservedConcurrentExecutions).

  • En t3, ClaimedAccountConcurrency es nuevamente 900 (800 + 100UnreservedConcurrentExecutions).

Configuración de la métrica ClaimedAccountConcurrency en CloudWatch

Lambda emite la métrica ClaimedAccountConcurrency en CloudWatch. Utilice esta métrica junto con el valor de SERVICE_QUOTA(ConcurrentExecutions) para obtener el porcentaje de utilización de la simultaneidad en su cuenta, como se muestra en la siguiente fórmula:

Utilization = (ClaimedAccountConcurrency/SERVICE_QUOTA(ConcurrentExecutions)) * 100%

La siguiente captura de pantalla muestra cómo se puede graficar esta fórmula en CloudWatch. La línea verde claim_utilization representa la utilización simultánea de esta cuenta, que es alrededor de 40 %:

Captura de pantalla que muestra cómo se puede utilizar la métrica ClaimedAccountConcurrency en CloudWatch.

La captura de pantalla anterior también incluye una alarma de CloudWatch que pasa a estado ALARM cuando la utilización de la simultaneidad supera el 70 %. Puede utilizar la métrica ClaimedAccountConcurrency junto con alarmas similares para determinar de forma proactiva cuándo podría ser necesario solicitar un límite de simultaneidad de cuentas superior.