Escalamiento basado en las métricas de Cloud Monitoring

En este documento se describe cómo escalar un grupo de instancias administrado (MIG) basado en las métricas de Monitoring.

También puedes escalar un MIG basado en su uso de CPU o su capacidad de entrega de un balanceador de cargas HTTP(S) externo.

Cuando escalas un MIG según las métricas de Monitoring, puedes escalar con base en los siguientes tipos de métricas:

  • Escala mediante métricas por instancia, en las que la métrica seleccionada proporciona datos para cada instancia de máquina virtual (VM) en el MIG sobre el uso de recursos.
  • Escala mediante métricas por grupo, en las que el grupo escala según una métrica que proporciona un valor relacionado con todo el grupo de instancias administrado.

Estas métricas pueden ser métricas estándar que proporciona el servicio de Cloud Monitoring o métricas personalizadas de Cloud Monitoring que crees tú mismo.

Limitaciones

El escalamiento basado en las métricas de Cloud Monitoring está restringido por las limitaciones de todos los escaladores automáticos, así como por las siguientes limitaciones:

  • No puedes realizar el ajuste de escala automático en función de las métricas basadas en registros de Cloud Monitoring.
  • No puedes usar las etiquetas de metadatos de recursos a fin de filtrar las métricas para el ajuste de escala automático. Solo puedes usar las etiquetas que se definen en los tipos de recursos supervisados y métricas.

Antes de comenzar

Métricas por instancia

Las métricas por instancia proporcionan datos para cada VM en un MIG distinto, lo que indica el uso de recursos de cada instancia. Cuando se usan métricas por instancia, el MIG no puede escalar por debajo de 1 VM, ya que el escalador automático requiere al menos una VM en ejecución para funcionar.

Puedes configurar tu MIG para escalar mediante las métricas por grupo si necesitas escalar mediante métricas de Cloud Monitoring que no son específicas para VM individuales o si en ocasiones necesitas reducir la escala de tu MIG a cero.

Métricas por instancia estándar

Cloud Monitoring tiene un conjunto de métricas estándar que puedes usar para supervisar tus VM. Sin embargo, no todas las métricas estándar son métricas de uso válido para el escalador automático.

Una métrica de uso válido para el escalamiento cumple con los siguientes requisitos:

  • La métrica estándar debe contener datos para un recurso supervisado gce_instance. Puedes usar la llamada a la API timeSeries.list con el fin de verificar si una métrica específica exporta datos para este recurso.

  • La métrica estándar describe qué tan ocupada está una instancia y el valor de la métrica aumenta o disminuye de forma proporcional a la cantidad de VM en el grupo.

La siguiente métrica no es válida porque el valor no cambia en función del uso y el escalador automático no puede usar el valor para escalar de forma proporcional:

compute.googleapis.com/instance/cpu/reserved_cores

Luego de seleccionar una métrica estándar que deseas usar para el escalador automático, puedes configurar el ajuste de escala automático con esa métrica.

Métricas personalizadas

Puedes crear métricas personalizadas con Cloud Monitoring y escribir tus propios datos de supervisión en este servicio. Esto te brinda acceso en paralelo a los datos estándar de Google Cloud y tus datos de supervisión personalizados, con una estructura de datos familiar y una sintaxis de consulta coherente. Si tienes una métrica personalizada, puedes elegir escalar en función de los datos de estas métricas.

Requisitos previos

Para usar métricas personalizadas, primero debes hacer lo siguiente:

  • Crear una métrica personalizada. Para obtener información sobre cómo crear una métrica personalizada, consulta Usa métricas personalizadas
  • Configurar el MIG para exportar la métrica personalizada de todas las VM del grupo

Elige una métrica personalizada válida

El escalador automático no puede usar todas las métricas personalizadas. Para elegir una métrica personalizada válida, la métrica debe poseer todas las propiedades que se detallan a continuación:

  • La métrica debe ser una métrica por instancia. La métrica debe exportar datos relevantes para cada instancia de VM de Compute Engine específica por separado.
  • Los valores exportados por instancia se deben asociar con un recurso supervisado gce_instance, que contenga las siguientes etiquetas:
    • zone con el nombre de la zona en la que se encuentra la instancia.
    • instance_id con el valor del ID numérico único asignado a la VM.
  • La métrica debe exportar datos al menos cada 60 segundos. Si tu frecuencia de exportación de datos es menor a 60 segundos, el escalador automático puede responder más rápido para cargar los cambios. Si tu frecuencia de exportación de datos es menor a 60 segundos, es posible que el escalador automático no responda con la rapidez suficiente para cargar los cambios.
  • La métrica debe ser una métrica de uso válida, lo que significa que los datos de la métrica pueden usarse para escalar horizontal y verticalmente de forma proporcional en la cantidad de VM.
  • La métrica debe exportar valores de datos int64 o double.

A fin de que el escalador automático funcione con tu métrica personalizada, debes exportar datos para esta métrica personalizada de todas las VM en el MIG.

Configura el ajuste de escala automático con métricas de supervisión por instancia

El proceso de configuración de un escalador automático para una métrica estándar o personalizada es el mismo. Para crear un escalador automático que use métricas de Cloud Monitoring, debes proporcionar el identificador de la métrica, el nivel de uso objetivo deseado y el tipo de objetivo de utilización. Cada una de estas propiedades se describe a continuación:

  • Identificador de la métrica: nombre de la métrica que se usará. Si usas una métrica personalizada, definiste este nombre cuando creaste la métrica. El identificador tiene el siguiente formato:

    custom.googleapis.com/path/to/metric
    

    Consulta Usa métricas personalizadas para obtener más información sobre la creación, exploración y lectura de métricas.

  • Nivel de uso objetivo: nivel que debe mantener el escalador automático. Debe ser un número positivo. Por ejemplo, 24.5 y 1100 son valores aceptables. Ten en cuenta que esto es diferente del balanceo de cargas y CPU, que debe ser un valor flotante entre 0.0 y 1.0.

  • Tipo de objetivo: cómo el escalador automático calcula los datos recopilados de las instancias. Estos son los tipos de objetivos posibles:

    • GAUGE: el escalador automático calcula el valor promedio de los datos recopilados en los últimos minutos y lo compara con el valor de uso objetivo del escalador automático.
    • DELTA_PER_MINUTE: el escalador automático calcula la tasa de crecimiento promedio por minuto y la compara con el uso objetivo.
    • DELTA_PER_SECOND: el escalador automático calcula la tasa de crecimiento por segundo y la compara con el uso objetivo.

    Si configuras el uso objetivo en segundos, usa DELTA_PER_SECOND como tipo de objetivo del escalador automático para realizar comparaciones precisas. Del mismo modo, usa DELTA_PER_MINUTE para el uso objetivo en minutos.

Console

  1. En Google Cloud Console, ve a la página Grupos de instancias.

    Ir a Grupos de instancias

  2. Si no tienes un grupo de instancias administrado, crea uno. De lo contrario, haz clic en el nombre de un MIG de la lista para abrir la página de descripción general del grupo de instancias.

  3. En la página de descripción general del grupo de instancias, haz clic en Editar.

  4. Si no existe una configuración del ajuste de escala automático, en Ajuste de escala automático, haz clic en Configurar ajuste de escala automático.

  5. En Modo de ajuste de escala automático, selecciona Activar: agregar y quitar instancias al grupo para habilitar el ajuste de escala automático.

  6. En la sección Métricas de ajuste de escala automático, si existe una métrica, haz clic en ella para editarla o haz clic en Agregar métrica para agregar otra.

  7. Configura el Tipo de métrica como Métrica de Cloud Monitoring.

  8. En la sección Alcance de la exportación de la métrica, selecciona Serie temporal por instancia para configurar el ajuste de escala automático con métricas por instancia.

  9. En la sección Identificador de la métrica, ingresa el nombre de la métrica en el siguiente formato: example.googleapis.com/path/to/metric.

  10. En la sección Expresión de filtro adicional, haz lo siguiente:

    • Opcional: Para un MIG zonal, ingresa un filtro a fin de usar valores individuales de métricas con múltiples transmisiones o etiquetas. Para obtener más información, consulta Filtrado de métricas por instancia.
    • Para un MIG regional, deja esta sección en blanco.
  11. En la sección Objetivo de uso, especifica el valor objetivo.

  12. En la sección Tipo de objetivo de utilización, verifica que el tipo de objetivo corresponde al tipo de medida de la métrica.

  13. Guarda los cambios cuando esté todo listo.

gcloud

Por ejemplo, en Google Cloud CLI, el siguiente comando crea un escalador automático que usa el tipo de objetivo GAUGE. Además del parámetro --custom-metric-utilization, también se requiere el parámetro --max-num-replicas cuando se crea un escalador automático:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

Puedes usar la marca --cool-down-period para indicarle al escalador automático cuánto tarda tu aplicación en inicializarse. Especificar un período de inactividad preciso mejora las decisiones de escalador automático. Por ejemplo, cuando se escala horizontalmente, el escalador automático ignora los datos de las VM que aún se están inicializando, ya que es posible que esas VM aún no representen el uso normal de tu aplicación. El período de inactividad predeterminado es de 60 segundos.

Si quieres ver la lista completa de comandos y marcas disponibles para la CLI de gcloud, consulta la referencia de gcloud.

API

En la API realiza una solicitud POST a la siguiente URL y reemplaza myproject por tu propio ID del proyecto y us-central1-f por la zona que elijas:

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers/

El cuerpo de tu solicitud debe contener los campos name, target y autoscalingPolicy. En autoscalingPolicy ingresa las propiedades maxNumReplicas y customMetricUtilizations.

Puedes usar el campo coolDownPeriodSec para indicarle al escalador automático cuánto tarda tu aplicación en inicializarse. Especificar un período de inactividad preciso mejora las decisiones de escalador automático. Por ejemplo, cuando se escala horizontalmente, el escalador automático ignora los datos de las VM que aún se están inicializando, ya que es posible que esas VM aún no representen el uso normal de tu aplicación. El período de inactividad predeterminado es de 60 segundos.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }
  ]
 }
}

Filtra métricas por instancia

Puedes aplicar filtros por instancia a las métricas de Cloud Monitoring, lo que te permite escalar los MIG mediante valores individuales de métricas con varias transmisiones o etiquetas.

Requisitos para el filtrado de métricas por instancia

El filtrado del escalador automático es compatible con la sintaxis de filtro de Cloud Monitoring, pero con algunas limitaciones. Los filtros para las métricas por instancia deben cumplir con los siguientes requisitos:

  • Solo puedes usar el operador AND para unir selectores.
  • Solo puedes usar el operador de comparación de igualdad directa =, pero no puedes usarlo con otras funciones. Por ejemplo, no puedes usar la función startswith() con el operador de comparación =.
  • Debes incluir el valor de un filtro entre comillas dobles, por ejemplo: metric.labels.state = "used".
  • No puedes usar comodines.
  • No debes configurar los selectores resource.type o resource.labels.*. Para las métricas por instancia, siempre se usan todos los recursos de instancia del grupo.
  • Si quieres obtener los mejores resultados, crea un filtro que sea lo bastante específico a fin de mostrar una sola serie temporal para cada instancia. Si el filtro muestra múltiples series temporales, se agregan una a la otra.

Configura escaladores automáticos para filtrar métricas

Usa Google Cloud Console, Google Cloud CLI o la API de Compute Engine a fin de agregar filtros de métricas para el ajuste de escala automático de un MIG.

Console

El proceso para crear un escalador automático que filtra una métrica por instancia es similar al de creación de un escalador automático por instancia común, pero debes especificar un filtro de métrica. Por ejemplo, la métrica compute.googleapis.com/instance/network/received_bytes_count incluye las etiquetas instance_name y loadbalanced. Para filtrar según el valor booleano loadbalanced, haz lo siguiente:

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a Grupos de instancias

  2. Si no tienes un MIG, crea uno. De lo contrario, haz clic en el nombre de un MIG para abrir la página de descripción general del grupo de instancias.

  3. En la página de descripción general del grupo de instancias, haz clic en Editar.

  4. Si no existe una configuración del ajuste de escala automático, en Ajuste de escala automático, haz clic en Configurar ajuste de escala automático.

  5. En Modo de ajuste de escala automático, selecciona Activar: agregar y quitar instancias al grupo para habilitar el ajuste de escala automático.

  6. En la sección Métricas de ajuste de escala automático, si existe una métrica, haz clic en ella para editarla o haz clic en Agregar métrica para agregar otra.

  7. En la sección Tipo de métrica, selecciona Métrica de Cloud Monitoring.

  8. En la sección Alcance de la exportación de la métrica, selecciona Serie temporal por instancia para configurar el ajuste de escala automático con métricas por instancia.

  9. En la sección Identificador de la métrica, ingresa el nombre de la métrica. Por ejemplo, compute.googleapis.com/instance/network/received_bytes_count

  10. En la sección Expresión de filtro adicional, ingresa un filtro. Por ejemplo, 'metric.labels.loadbalanced = true' .

  11. Guarda los cambios cuando esté todo listo.

gcloud

El proceso para crear un escalador automático que filtra una métrica por instancia es similar al de creación de un escalador automático por instancia común, pero debes especificar un filtro de métrica y marcas individuales para el objetivo de uso y el tipo de objetivo. Por ejemplo, la métrica compute.googleapis.com/instance/network/received_bytes_count incluye las etiquetas instance_name y loadbalanced. Para filtrar según el booleano loadbalanced, especifica la marca de filtro --stackdriver-metric-filter con el valor 'metric.labels.loadbalanced = true'. Debes incluir las marcas de objetivo de uso y tipo de objetivo de forma individual.

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=delta-per-second \
    --stackdriver-metric-filter='metric.labels.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --zone us-central1-f

En este ejemplo se configura el ajuste de escala automático para usar solo los datos de tráfico loadbalanced como parte del objetivo de uso.

Para ver una lista de marcas y comandos gcloud disponibles, consulta la referencia de la CLI de gcloud.

API

A fin de agregar filtros de métricas para un MIG zonal, usa el recurso autoscalers o, en el caso de un MIG regional, usa el recurso regionAutoscalers.

El proceso para crear un escalador automático que filtra una métrica por instancia es similar al de creación de un escalador automático por instancia común, pero debes especificar un filtro de métrica y marcas individuales para el objetivo de uso y el tipo de objetivo. Por ejemplo, la métrica compute.googleapis.com/instance/network/received_bytes_count incluye las etiquetas instance_name y loadbalanced. Para filtrar según el valor booleano loadbalanced, especifica el parámetro filter con el valor "metric.labels.loadbalanced = true".

En la API realiza una solicitud POST a la siguiente URL y reemplaza myproject por tu propio ID del proyecto y us-central1-f por la zona que elijas. El cuerpo de la solicitud debe contener los campos name, target y autoscalingPolicy. En autoscalingPolicy ingresa las propiedades maxNumReplicas y customMetricUtilizations.

POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "compute.googleapis.com/instance/network/received_bytes_count",
    "filter": "metric.labels.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SECOND"
   }
  ]
 }
}

En este ejemplo, se configura el ajuste de escala automático para usar solo los datos de tráfico loadbalanced como parte del objetivo de uso.

Métricas por grupo

Las métricas por grupo permiten el ajuste de escala automático con una métrica estándar o personalizada que no exporta datos de uso por instancia. En cambio, el grupo se escala en función de un valor que se aplica a todo el grupo y corresponde a la cantidad de trabajo disponible para el grupo o qué tan ocupado está. Este se escala en función de la fluctuación de ese valor de métrica de grupo y la configuración que definas.

Cuando configuras el ajuste de escala automático con métricas por grupo, debes indicar cómo quieres que el escalador automático aprovisione las instancias relativas a la métrica:

  • Asignación de instancias: especifica una asignación de instancia a fin de indicar que deseas que el escalador automático agregue o quite las VM según la cantidad de trabajo disponible para asignar a cada VM. Especifica un valor para este parámetro que represente cuánto trabajo esperas que controle cada VM. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada VM o especifica 0.5 si deseas asignar media unidad de trabajo a cada VM. El escalador automático escala el MIG a fin de garantizar que haya suficiente VM para completar el trabajo disponible de acuerdo con lo que indica la métrica. Si el valor de la métrica es 10 y asignaste 0.5 unidades de trabajo a cada VM, el escalador automático crea 20 VM en el MIG. El escalamiento con asignación de instancias permite que el grupo se reduzca a 0 VM cuando el valor de la métrica desciende a 0 y vuelva a crearse cuando el valor aumente por encima de 0. En el siguiente diagrama, se muestra la relación proporcional entre el valor de la métrica y la cantidad de VM cuando se escala con una política de asignación de instancias.La relación proporcional entre el valor de la métrica y la cantidad de instancias.
  • Objetivo de utilización: especifica un objetivo de utilización para indicar que deseas que el escalador automático agregue o quite VM con el fin de intentar mantener la métrica en un valor especificado. Cuando la métrica supera el objetivo especificado, el escalador automático agrega VM de forma gradual hasta que la métrica disminuye al valor objetivo. Cuando la métrica está por debajo del valor objetivo especificado, el escalador automático quita las VM de forma gradual hasta que la métrica aumente al valor objetivo. No se puede reducir el grupo a 0 VM mediante el escalamiento con un objetivo de utilización. En el siguiente diagrama, se muestra cómo el escalador automático agrega y quita las VM en respuesta a un valor de la métrica para mantener un objetivo de utilización.El escalador automático agrega y quita las VM para mantener un uso objetivo.

Para cada opción, existen los siguientes casos prácticos:

  • Asignación de instancias: escala el tamaño de tu MIG en función de la cantidad de mensajes no confirmados en una suscripción de Pub/Sub o una tarifa de QPS total de un extremo de red.
  • Objetivo de utilización: escala el tamaño de tu MIG en función de un objetivo de utilización para una métrica personalizada que no provenga de las métricas de uso estándar de memoria o CPU por instancia. Por ejemplo, quizás escales el grupo en función de una métrica personalizada de latencia.

Cuando configuras el ajuste de escala automático con métricas por grupo y especificas una asignación de instancia, tu MIG puede reducir el escalamiento a 0 VM. Si la métrica indica que tu grupo no tiene trabajo para completar, el grupo se reducirá a 0 VM hasta que la métrica detecte que un trabajo nuevo está disponible. A diferencia del escalamiento basado en métricas por grupo, el ajuste de escala automático por instancia requiere métricas de uso de recursos de al menos una VM, por lo que el grupo no puede escalar por debajo de 1.

Filtrado de métricas por grupo

Puedes aplicar filtros a las métricas de Cloud Monitoring por grupo, lo que te permite escalar los MIG mediante valores individuales de métricas que tienen varias transmisiones o etiquetas.

Requisitos para el filtrado de métricas por grupo

El filtrado del escalador automático es compatible con la sintaxis de filtro de Cloud Monitoring, pero con algunas limitaciones. Los filtros para las métricas por grupo deben cumplir con los siguientes requisitos:

  • Solo puedes usar el operador AND para unir selectores.
  • No puedes usar el operador de comparación de igualdad directa = con ninguna función para los selectores. Por ejemplo, no puedes usar la función startswith() con el operador de comparación =.
  • No puedes usar comodines.
  • Debes incluir el valor de un filtro entre comillas dobles, por ejemplo: metric.labels.state = "used".
  • Puedes especificar un selector de tipo de métrica metric.type = "..." en el filtro y, también, incluir el campo metric original. Como opción, puedes usar solo el campo metric. La métrica debe cumplir con los siguientes requisitos:
    • La métrica debe especificarse al menos en un lugar.
    • La métrica puede especificarse en ambos lugares, pero debe ser igual.
  • Debes especificar el selector resource.type, pero no puedes configurarlo como gce_instance si deseas escalar con métricas por grupo.
  • Con el objetivo de obtener los mejores resultados, el filtro debe ser lo bastante específico a fin de mostrar una sola serie temporal para el grupo. Si el filtro muestra múltiples series temporales, se agregan una a la otra.

Configura el ajuste de escala automático con métricas de supervisión por grupo

Usa Google Cloud Console, la Google Cloud CLI o la API de Compute Engine para configurar el ajuste de escala automático con métricas por grupo.

Console

  1. En Cloud Console, ve a la página Grupos de instancias.

    Ir a Grupos de instancias

  2. Si no tienes un grupo de instancias administrado, crea uno. De lo contrario, haz clic en el nombre de un MIG para abrir la página de descripción general del grupo de instancias.

  3. En la página de descripción general del grupo de instancias, haz clic en Editar.

  4. Si no existe una configuración del ajuste de escala automático, en Ajuste de escala automático, haz clic en Configurar ajuste de escala automático.

  5. En Modo de ajuste de escala automático, selecciona Activar: agregar y quitar instancias al grupo para habilitar el ajuste de escala automático.

  6. En la sección Métricas de ajuste de escala automático, si existe una métrica, haz clic en ella para editarla o haz clic en Agregar métrica para agregar otra.

  7. Configura el Tipo de métrica como Métrica de Cloud Monitoring.

  8. En la sección Alcance de la exportación de la métrica, selecciona Una serie temporal por grupo.

  9. En la sección Identificador de la métrica, especifica el nombre de la métrica en el siguiente formato: example.googleapis.com/path/to/metric.

  10. Especifica el Tipo de recurso supervisado.

  11. Si deseas usar valores individuales de métricas que tienen varias transmisiones o etiquetas, proporciona una expresión de filtro adicional. El filtro debe cumplir con los requisitos de filtrado del escalador automático

  12. En la sección Política de escalamiento, selecciona Cesión de instancia única o Asignación de instancias.

    • Si seleccionas una política de asignación de instancias, proporciona un valor de Asignación de una sola instancia que represente la cantidad de trabajo que se asignará a cada instancia de VM en el MIG. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada VM. El escalador automático mantiene suficientes VM para completar el trabajo disponible (como lo indica la métrica). Si el valor de la métrica es 10 y asignaste 2 unidades de trabajo a cada VM, el escalador automático crea 5 VM en el MIG.
    • Si seleccionas una política de objetivo de utilización, haz lo siguiente:
      • Proporciona un valor de Objetivo de utilización que represente el valor de métrica que el escalador automático debe intentar mantener.
      • Selecciona un Tipo de objetivo de uso que represente el tipo de valor para la métrica.
  13. Guarda los cambios cuando esté todo listo.

gcloud

Crear un escalador automático basado en métricas por grupo es similar a crear un escalador automático basado en métricas por instancia, excepto que especificas marcas diferentes. En el comando, especifica la marca --update-stackdriver-metric para proporcionar la URL de la métrica de supervisión. También debes especificar cómo quieres que el escalador automático aprovisione las instancias con la inclusión de una de las siguientes marcas:

  • Asignación de instancias: especifica la marca --stackdriver-metric-single-instance-assignment.
  • Objetivo de utilización: especifica la marca --stackdriver-metric-utilization-target.

Asignación de instancias:

Especifica la métrica que deseas medir y determina la marca --stackdriver-metric-single-instance-assignment para indicar la cantidad de trabajo que esperas que maneje cada instancia. También debes especificar un filtro para la métrica con la marca --stackdriver-metric-filter.

Con el siguiente comando, se crea un escalador automático en función de una métrica por grupo con la marca --stackdriver-metric-single-instance-assignment.

gcloud compute instance-groups managed set-autoscaling GROUP_NAME \
    --max-num-replicas=MAX_INSTANCES \
    --min-num-replicas=MIN_INSTANCES \
    --update-stackdriver-metric='METRIC_URL' \
    --stackdriver-metric-filter='METRIC_FILTER' \
    --stackdriver-metric-single-instance-assignment=INSTANCE_ASSIGNMENT \
    [--zone=ZONE | --region=REGION]

Reemplaza lo siguiente:

  • GROUP_NAME: nombre del MIG en el que deseas agregar un escalador automático
  • MAX_INSTANCES: La cantidad máxima de VM que puede tener el MIG.
  • MIN_INSTANCES: La cantidad mínima de VM que puede tener el MIG.
  • METRIC_URL: URL sin protocolo de una métrica de Monitoring
  • METRIC_FILTER: filtro de Cloud Monitoring en el que especificas un filtro de supervisión con un TimeSeries relevante y un MonitoredResource. El filtro debe cumplir con los requisitos de filtrado del escalador automático
  • INSTANCE_ASSIGNMENT: Cantidad de trabajo que se asignará a cada instancia de VM en el MIG. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada VM o especifica 0.5 si deseas asignar media unidad de trabajo a cada VM. El escalador automático ajustará la escala del MIG a fin de garantizar que haya suficientes VM para completar el trabajo disponible, que se indica mediante la métrica. Si el valor de la métrica es 10 y asignaste 0.5 unidades de trabajo a cada VM, el escalador automático aprovisiona 20 VM en el MIG
  • ZONE: Para los MIG zonales, la zona en la que se encuentra el MIG.
  • REGION: Para los MIG regionales, la región en la que se encuentra el MIG.

Objetivo de uso:

En algunas situaciones te recomendamos emplear objetivos de utilización con métricas por grupo en lugar de especificar una cantidad de VM relativas al valor de la métrica del escalador automático. Puedes apuntar el escalador automático a una métrica por grupo, pero este intenta mantener el objetivo de uso especificado. Especifica el objetivo y el tipo de objetivo con la marca --stackdriver-metric-utilization-target. También debes especificar un filtro para la métrica con la marca --stackdriver-metric-filter.

Con el siguiente comando, se crea un escalador automático basado en una métrica por grupo mediante la marca --stackdriver-metric-utilization-target.

gcloud compute instance-groups managed set-autoscaling GROUP_NAME \
    --max-num-replicas=MAX_INSTANCES \
    --min-num-replicas=MIN_INSTANCES \
    --update-stackdriver-metric='METRIC_URL' \
    --stackdriver-metric-filter='METRIC_FILTER' \
    --stackdriver-metric-utilization-target=TARGET_VALUE \
    --stackdriver-metric-utilization-target-type=TARGET_TYPE \
    [--zone=ZONE | --region=REGION]

Reemplaza lo siguiente:

  • GROUP_NAME: nombre del MIG en el que deseas agregar un escalador automático
  • MAX_INSTANCES: La cantidad máxima de VM que puede tener el MIG.
  • MIN_INSTANCES: La cantidad mínima de VM que puede tener el MIG.
  • METRIC_URL: URL sin protocolo de una métrica de Monitoring
  • METRIC_FILTER: filtro de Cloud Monitoring en el que especificas un filtro de supervisión con un TimeSeries relevante y un MonitoredResource. Debes especificar un valor resource.type, pero no puedes especificar gce_instance si deseas escalar con métricas por grupo. El filtro debe cumplir con los requisitos de filtrado del escalador automático
  • TARGET_VALUE: valor de la métrica que el escalador automático intenta mantener
  • TARGET_TYPE: El tipo de valor de la métrica. Puedes configurar el escalador automático para que supervise la métrica como GAUGE, por delta-per-minute o delta-per-second del valor
  • ZONE: Para los MIG zonales, la zona en la que se encuentra el MIG.
  • REGION: Para los MIG regionales, la región en la que se encuentra el MIG.

Para ver una lista de las marcas y los comandos de Google Cloud CLI disponibles para el escalador automático que funcionan con el ajuste de escala automático por grupo, consulta la referencia de Google Cloud CLI.

API

A fin de configurar el ajuste de escala automático con métricas de supervisión por grupo para un MIG zonal, usa el recurso autoscalers o, para un MIG regional, usa el recurso regionAutoscalers.

Incluye uno de los siguientes parámetros para especificar cómo quieres que el escalador automático aprovisione las instancias:

  • Asignación de instancias: especifica el parámetro singleInstanceAssignment.
  • Objetivo de utilización: especifica el parámetro utilizationTarget.

Asignación de instancias:

El parámetro singleInstanceAssignment especifica la cantidad de trabajo que esperas que controle cada VM.

Por ejemplo, realiza la siguiente llamada para crear un escalador automático que escale un MIG zonal según la asignación de la instancia de una métrica por grupo.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/ZONE/instanceGroupManagers/GROUP_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "filter": "METRIC_FILTER",
      "singleInstanceAssignment": INSTANCE_ASSIGNMENT
    }
  ],
 }
}

Reemplaza lo siguiente:

  • PROJECT_ID: ID del proyecto
  • ZONE: zona en la que se encuentra el MIG.
  • GROUP_NAME: nombre del MIG en el que deseas agregar un escalador automático
  • MAX_INSTANCES: La cantidad máxima de VM que puede tener el MIG.
  • MIN_INSTANCES: La cantidad mínima de VM que puede tener el MIG.
  • METRIC_URL: URL sin protocolo de una métrica de Monitoring
  • METRIC_FILTER: filtro de Cloud Monitoring en el que especificas un filtro de supervisión con un TimeSeries relevante y un MonitoredResource. Debes especificar un valor resource.type, pero no puedes especificar gce_instance si deseas escalar con métricas por grupo. El filtro debe cumplir con los requisitos de filtrado del escalador automático
  • INSTANCE_ASSIGNMENT: cantidad de trabajo que se asignará a cada instancia de VM en el MIG. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada VM o especifica 0.5 si deseas asignar media unidad de trabajo a cada VM. El escalador automático ajustará la escala del MIG a fin de garantizar que haya suficientes VM para completar el trabajo disponible, que se indica mediante la métrica. Si el valor de la métrica es 10 y asignaste 0.5 unidades de trabajo a cada VM, el escalador automático aprovisiona 20 VM en el MIG

Objetivo de utilización:

En algunas situaciones te recomendamos emplear objetivos de utilización con métricas por grupo en lugar de especificar una cantidad de VM relativas al valor de la métrica del escalador automático. Puedes apuntar el escalador automático a una métrica por grupo, pero este intenta mantener el objetivo de utilización especificado. Especifica esos objetivos con el parámetro utilizationTarget. También debes especificar un filtro para la métrica con el parámetro filter.

Por ejemplo, realiza la siguiente llamada para crear un escalador automático que escale un MIG zonal según el objetivo de uso de una métrica por grupo.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers

    {
     "name": "example-autoscaler",
     "target": "zones/ZONE/instanceGroupManagers/GROUP_NAME",
     "autoscalingPolicy": {
      "maxNumReplicas": MAX_INSTANCES,
      "minNumReplicas": MIN_INSTANCES,
      "customMetricUtilizations": [
        {
          "metric": "METRIC_URL",
          "filter": "METRIC_FILTER",
          "utilizationTarget": TARGET_VALUE,
          "utilizationTargetType": TARGET_TYPE
        }
      ],
     }
    }

Reemplaza lo siguiente:

  • PROJECT_ID: ID del proyecto
  • ZONE: zona en la que se encuentra el MIG.
  • GROUP_NAME: nombre del MIG en el que deseas agregar un escalador automático
  • MAX_INSTANCES: La cantidad máxima de VM que puede tener el MIG.
  • MIN_INSTANCES: La cantidad mínima de VM que puede tener el MIG.
  • METRIC_URL: URL sin protocolo de una métrica de Monitoring
  • METRIC_FILTER: filtro de Cloud Monitoring en el que especificas un filtro de supervisión con un TimeSeries relevante y un MonitoredResource. Debes especificar un valor resource.type, pero no puedes especificar gce_instance si deseas escalar con métricas por grupo. El filtro debe cumplir con los requisitos de filtrado del escalador automático
  • TARGET_VALUE: valor de la métrica que el escalador automático intenta mantener
  • TARGET_TYPE: El tipo de valor de la métrica. Puedes configurar el escalador automático para que supervise la métrica como GAUGE, por DELTA_PER_MINUTE o DELTA_PER_SECOND del valor

Ejemplo: Usa la asignación de instancias para escalar en función de una cola de Pub/Sub

Supón la siguiente configuración:

  • Un tema activo de Pub/Sub recibe mensajes de alguna fuente.
  • Una suscripción activa de Pub/Sub está conectada al tema en una configuración de extracción. La suscripción se llama our-subscription.
  • Un grupo de trabajadores extrae mensajes de la suscripción y los procesa. El grupo es un MIG zonal llamado our-instance-group y se encuentra en la zona us-central1-a. El grupo no debe superar los 100 trabajadores y debe reducir el escalamiento a 0 trabajadores cuando no haya mensajes en la cola.
  • En promedio un trabajador procesa un mensaje en un minuto.

Para determinar el valor de asignación de instancias óptimo, considera los siguientes enfoques:

  • Para procesar todos los mensajes en la cola lo más rápido posible, puedes elegir 1 como el valor de asignación de instancias. Esto crea una instancia de VM para cada mensaje en la cola (limitado a la cantidad máxima de VM en el grupo). Sin embargo, esto puede causar un sobreaprovisionamiento. En el peor de los casos, se crea una VM para procesar un solo mensaje antes de que el escalador automático la cierre, lo que consume recursos por mucho más tiempo que lo que tomaría hacer el trabajo.
    • Ten en cuenta que, si los trabajadores pueden procesar varios mensajes de forma simultánea, es una buena idea aumentar el valor a la cantidad de procesos simultáneos.
    • Ten en cuenta que, en este ejemplo, no tiene sentido establecer el valor a menos de 1, ya que un mensaje no puede ser procesado por más de un trabajador.
  • De forma alternativa, si la latencia de procesamiento es de menor importancia que el uso de recursos y los costos de sobrecarga, puedes calcular cuántos mensajes debe procesar cada VM en su ciclo de vida para que se considere que se usó de forma eficiente. Ten en cuenta el tiempo de inicio y apagado, y que el ajuste de escala automático no borre las VM de inmediato. Por ejemplo, supongamos que el inicio y el apagado toman alrededor de 5 minutos en total y que el ajuste de escala automático borra las VM solo después de un período de unos 10 minutos. Entonces, sería eficiente crear una VM adicional en el grupo, siempre y cuando pueda procesar al menos 15 mensajes antes de que el escalador automático la cierre, lo que da como resultado un 25% de sobrecarga debido al tiempo total que toma crear, iniciar y cerrar la VM. En este caso, puedes elegir 15 como el valor de asignación de instancias.
  • Ambos enfoques pueden balancearse, lo que da como resultado un número entre 115, según el factor que tenga prioridad, la latencia de procesamiento o el uso de recursos.

En cuanto a las métricas de Pub/Sub disponibles, encontramos una métrica que representa la longitud de la cola de suscripciones: subscription/num_undelivered_messages.

Ten en cuenta que esta métrica exporta la cantidad total de mensajes en la cola, incluidos los mensajes que se están procesando y que aún no están confirmados. No se recomienda usar una métrica que no incluya los mensajes que se procesan, ya que esa métrica puede disminuir a 0 cuando aún hay trabajo pendiente, lo que solicita la reducción del ajuste de escala automático y tal vez interrumpa el trabajo real.

Ahora puedes configurar el ajuste de escala automático para la cola:

gcloud compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
    --stackdriver-metric-filter="resource.type = pubsub_subscription AND resource.labels.subscription_id = our-subscription" \
    --stackdriver-metric-single-instance-assignment=15

Ejemplo: Usa un objetivo de utilización para escalar en función de la latencia promedio

Quizás haya una situación en la que la métrica que proporciona una señal relevante no representa una cantidad total del trabajo disponible o de otro recurso aplicable al grupo, como en el ejemplo anterior, pero sí una media, un percentil o alguna otra propiedad estadística. Para este ejemplo, supón que escalarás en función de la latencia de procesamiento promedio del grupo.

Supón la siguiente configuración:

  • Se asigna un MIG llamado our-instance-group para realizar una tarea en particular. El grupo está ubicado en la zona us-central1-a.
  • Tienes una métrica personalizada de Cloud Monitoring que exporta un valor que te gustaría mantener en un determinado nivel. En este ejemplo, supón que la métrica representa la latencia promedio de las consultas de procesamiento asignadas al grupo.
    • La métrica personalizada se llama custom.googleapis.com/example_average_latency.
    • La métrica personalizada tiene una etiqueta con una clave llamada group_name y un valor igual al nombre del MIG, our-instance-group.
    • Con la métrica personalizada, se exportan datos para el recurso supervisado global, es decir, no está asociada con ninguna VM específica.

Determinaste que, cuando el valor de la métrica supera un valor determinado, debes agregar más VM al grupo para controlar la carga, mientras que cuando se reduce ese valor, puedes liberar algunos recursos. El ajuste de escala automático agrega o quita las VM de forma gradual a una velocidad proporcional a la distancia entre la métrica y el objetivo. Para este ejemplo, supongamos que el valor objetivo calculado es 100.

Ahora puedes configurar el ajuste de escala automático para el grupo con un objetivo de uso por grupo de 100, que representa el valor de la métrica que el escalador automático debe intentar mantener.

gcloud compute instance-groups managed set-autoscaling \
    our-instance-group \
    --zone=us-central1-a \
    --max-num-replicas=100 \
    --min-num-replicas=0 \
    --update-stackdriver-metric=custom.googleapis.com/example_average_latency \
    --stackdriver-metric-filter "resource.type = global AND metric.labels.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second

¿Qué sigue?