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 (Beta), en el 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

  • No puedes realizar el ajuste de escala automático en función de las métricas basadas en registros de Cloud Monitoring.

  • Los grupos de instancias administrados regionales no son compatibles con el filtrado de métricas por instancia.

  • Los grupos de instancias administrados regionales no son compatibles con el ajuste de escala automático mediante métricas por grupo.

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 gce_instance supervisado. 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.

Nota: Puedes obtener el ID numérico de una instancia de VM si realizas una solicitud de la propiedad de ID del servidor de metadatos desde la VM. Por ejemplo, puedes hacer esto en “curl”:
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
Para obtener más información sobre el uso del servidor de metadatos, consulta Almacena y recupera metadatos de instancia.

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 la sección 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

Las instrucciones a fin de configurar el ajuste de escala automático varían para los MIG regionales y los de zona única. Los MIG regionales no son compatibles con el filtrado de métricas por instancia.

A fin de configurar el ajuste de escala automático en un MIG regional (varias zonas), sigue estos pasos:

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

    Ir a la página Grupos de instancias

  2. Si no tienes un grupo de instancias administrado, crea uno. En caso contrario, haz clic en el nombre de un MIG regional de la lista para abrir la página de detalles del grupo de instancias.
  3. En la página de detalles del grupo de instancias, haz clic en el botón Editar grupo.
  4. En Ajuste de escala automático, selecciona Ajustar escala automáticamente para habilitarlo.
  5. En la sección Métricas de ajuste de escala automático, selecciona Métrica de Stackdriver Monitoring.
  6. En la sección Alcance de la exportación de métricas, selecciona Series temporales por instancia para configurar el ajuste de escala automático mediante métricas por grupo.
  7. En la sección Métrica de Stackdriver Monitoring, ingresa el nombre de la métrica en el siguiente formato: example.googleapis.com/path/to/metric.
  8. En la sección Objetivo, especifica el valor objetivo.
  9. En la sección Tipo de objetivo, especifica el tipo de objetivo que corresponde al nivel de detalle de medición de la métrica.
  10. Guarda los cambios cuando esté todo listo.

A fin de configurar el ajuste de escala automático en un MIG de zona única, haz lo siguiente:

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

    Ir a la página Grupos de instancias

  2. Si no tienes un grupo de instancias administrado, crea uno. De lo contrario, haz clic en el nombre de un grupo de instancias para abrir su página de detalles. Todas las instancias en el grupo de instancias deben estar en una zona única.
  3. En la página de detalles del grupo de instancias, haz clic en el botón Editar grupo.
  4. En Ajuste de escala automático, selecciona Ajustar escala automáticamente para habilitarlo.
  5. En la sección Métricas de ajuste de escala automático, selecciona Métrica de Stackdriver Monitoring.
  6. En la sección Alcance de la exportación de la métrica, selecciona Series temporales por instancia para configurar el ajuste de escala automático con métricas por instancia.
  7. 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.
  8. En la sección Expresión de filtro adicional, de manera opcional, ingresa un filtro para usar valores individuales de métricas con múltiples transmisiones o etiquetas. Consulta Filtra métricas por instancia para obtener más información.
  9. En la sección Objetivo de utilización, especifica el valor objetivo.
  10. 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.
  11. Guarda los cambios cuando esté todo listo.

gcloud

Por ejemplo, en la herramienta de línea de comandos de gcloud, 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 necesita 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

De forma opcional, puedes usar la marca --cool-down-period, que le indica al escalador automático cuántos segundos debe esperar luego de iniciada una VM nueva antes de comenzar a recopilar información de uso. Esto explica el tiempo que puede tardar la VM en inicializar, durante el cual los datos de uso recopilados durante este tiempo no son confiables para el ajuste de escala automático. El período de inactividad predeterminado es de 60 segundos.

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

API

Nota: Si bien el ajuste de escala automático es una característica de los grupos de instancias administrados, es un recurso de la API diferente. Ten esto en cuenta cuando crees solicitudes a la API para el ajuste de escala automático.

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.

De forma opcional, puedes usar el parámetro coolDownPeriodSec, que le indica al escalador automático cuántos segundos debe esperar después de iniciada una VM nueva antes de recopilar datos de uso. Después de que finaliza el período de inactividad, el escalador automático comienza a recopilar información de uso de la VM nueva para determinar si el MIG requiere VM adicionales. Esto explica el tiempo que puede tardar la VM en inicializarse, durante el cual los datos de uso recopilados no son confiables para el ajuste de escala automático. 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 instancias (Beta)

Puedes aplicar filtros por instancia a las métricas de Cloud Monitoring, lo que te permite escalar los MIG de zona única 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 =.
  • No puedes usar comodines.
  • No debes configurar los selectores resource.type o resource.label.*. 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, la herramienta de línea de comandos de gcloud (Beta) o la API Beta de Compute Engine a fin de agregar filtros de métricas para el ajuste de escala automático de un MIG de zona única.

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 la página Grupos de instancias

  2. Si no tienes un MIG, crea uno. De lo contrario, haz clic en el nombre de un MIG de zona única para abrir la página de detalles del grupo de instancias.
  3. En la página de detalles del grupo de instancias, haz clic en el botón Editar grupo.
  4. En Ajuste de escala automático, selecciona Ajustar escala automáticamente para habilitarlo.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de Stackdriver Monitoring.
  6. En la sección Alcance de la exportación de la métrica, selecciona Series temporales por instancia para configurar el ajuste de escala automático con métricas por instancia.
  7. 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.
  8. En la sección Expresión de filtro adicional, ingresa un filtro. Por ejemplo, 'metric.label.loadbalanced = true'.
  9. 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 utilización 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.label.loadbalanced = true'. Debes incluir las marcas de objetivo de utilización y tipo de objetivo de forma individual.

gcloud beta 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-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

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 utilización.

Para ver una lista de marcas y comandos gcloud disponibles, consulta la referencia de la herramienta de gcloud (Beta).

API

Nota: Si bien el ajuste de escala automático es una característica de los grupos de instancias administrados, es un recurso de la API diferente. Ten esto en cuenta cuando crees solicitudes a la API para el ajuste de escala automático.

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 utilización 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.label.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/beta/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.label.loadbalanced = true",
    "utilizationTarget": 10,
    "utilizationTargetType": "DELTA_PER_SEC"
   }
  ]
 }
}

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 utilización.

Métricas por grupo (Beta)

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 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.
  • No puedes usar comodines.
  • 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 herramienta de línea de comandos de gcloud (Beta) o la API de Compute Engine (Beta) a fin de configurar el ajuste de escala automático con métricas por grupo para un MIG de zona única.

Console

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

    Ir a la página 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 zona única para abrir la página de detalles del grupo de instancias.
  3. En la página de detalles del grupo de instancias, haz clic en el botón Editar grupo.
  4. En Ajuste de escala automático, selecciona Ajustar escala automáticamente para habilitarlo.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de Stackdriver Monitoring.
  6. En la sección Alcance de la exportación de la métrica, selecciona Una serie temporal por grupo.
  7. 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.
  8. Especifica el Tipo de recurso de métrica.
  9. Proporciona una expresión de filtro adicional para usar valores individuales de métricas con múltiples transmisiones o etiquetas. El filtro debe cumplir con los requisitos de filtrado del escalador automático.
  10. En la sección Política de escalamiento, selecciona Objetivo de utilización 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 utilización que represente el tipo de valor para la métrica.
  11. Guarda los cambios cuando esté todo listo.

gcloud

Crea un escalador automático para un MIG de manera similar al escalador automático por instancia, pero especifica la marca --update-stackdriver-metric. Puedes 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.

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --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

Replace the following:

- group-name: The name of the MIG where you want
  to add an autoscaler.
- zone: The zone where the MIG is located. You
  cannot specify a region for autoscalers on per-group metrics.
- max-instances: The limit on the number of VMs that
  the autoscaler can add to the MIG.
- min-instances: The limit on the minimum number of
  VMs that the autoscaler can have in the MIG.
- metric-url: A protocol-free URL of a
  Monitoring metric.
- metric-filter: A
  [Cloud Monitoring filter](/monitoring/api/v3/filters) where you
  specify a [monitoring filter](/monitoring/api/v3/filters) with a relevant
  [`TimeSeries`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/TimeSeries)
  and a
  [`MonitoredResource`](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/MonitoredResource).
  The filter must meet the
  [autoscaler filtering requirements](#per_group_filter_requirements).
- instance-assignment: The amount of work to
  assign to each VM instance in the MIG. For example, specify `2` to assign
  two units of work to each VM, or specify `0.5` to assign half a unit
  of work to each VM. The autoscaler scales the MIG to ensure that there are
  enough VMs to complete the available work, which is indicated by the
  metric. If the
  metric value is `10` and you've assigned `0.5` units of work to each
  VM, the autoscaler provisions `20` VMs in the MIG.

**Utilization target:**

In some situations, you might want to use utilization targets with
per-group metrics rather than specify a number of VMs relative
to the value of the metric that your autoscaler measures. You can
still point the autoscaler to a per-group metric, but the autoscaler
attempts to maintain the specified utilization target. Specify the target
and target type with the `--stackdriver-metric-utilization-target` flag.
You must also specify a filter for the metric using the
`--stackdriver-metric-filter` flag.

 
gcloud beta compute instance-groups managed set-autoscaling group-name \
       --zone=zone \
       --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

Replace the following:

  • group-name: The name of the MIG where you want to add an autoscaler.
  • zone: The zone where the MIG is located. You cannot specify a region for autoscalers on per-group metrics.
  • max-instances: The limit on the number of VMs that the autoscaler can add to the MIG.
  • min-instances: The limit on the minimum number of VMs that the autoscaler can have in the MIG.
  • metric-url: A protocol-free URL of a Monitoring metric.
  • metric-filter: A Cloud Monitoring filter where you specify a monitoring filter with a relevant TimeSeries and a MonitoredResource. You must specify a resource.type value, but you cannot specify gce_instance if you want to scale using per-group metrics. The filter must meet the autoscaler filtering requirements.
  • target-value: The metric value that the autoscaler attempts to maintain.
  • target-type. The value type for the metric. You can set the autoscaler to monitor the metric as a GAUGE, by the delta-per-minute of the value, or by the delta-per-second of the value.

To see a list of available autoscaler gcloud command-line tool commands and flags that work with per-group autoscaling, see the gcloud command-line tool reference (beta).

API

Nota: Aunque el ajuste de escala automático es una característica de los grupos de instancias administrados, [autoscalers](/compute/docs/reference/beta/autoscalers) son un recurso de la API diferente. Ten esto en cuenta cuando construyas solicitudes a la API para el ajuste de escala automático.

Crea un escalador automático para un MIG. Puedes especificar cómo quieres que el escalador automático aprovisione las instancias con la inclusión de uno de los siguientes parámetros:

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

Asignación de instancias:

En la API realiza una solicitud POST para crear un escalador automático. En el cuerpo de la solicitud, incluye los parámetros comunes que usarías para crear un escalador automático por instancia, pero especifica el parámetro single-instance-assignment. El parámetro single-instance-assignment especifica la cantidad de trabajo que esperas que controle cada VM.

POST https://compute.googleapis.com/compute/beta/projects/<var>project-id</var>/zones/<var>zone</var>/autoscalers

{
 "name": "example-autoscaler",
 "target": "zones/<var>zone</var>/instanceGroupManagers/<var>group-name</var>",
 "autoscalingPolicy": {
  "maxNumReplicas": <var>max-instances</var>,
  "minNumReplicas": <var>min-instances</var>,
  "customMetricUtilizations": [
    {
      "metric": "<var>metric-url</var>",
      "filter": "<var>metric-filter</var>",
      "singleInstanceAssignment": <var>instance-assignment</var>
    }
  ],
 }
}

Reemplaza lo siguiente:

  • project-id: ID del proyecto
  • group-name: nombre del MIG en el que deseas agregar un escalador automático
  • zone: zona en la que se encuentra el MIG. No puedes especificar una región para los escaladores automáticos en las métricas por grupo
  • max-instances: límite en la cantidad de VM que el escalador automático puede agregar al MIG
  • min-instances: límite en la cantidad mínima de VM que puede tener el escalador automático en 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.

POST https://compute.googleapis.com/compute/beta/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
  • group-name: nombre del MIG en el que deseas agregar un escalador automático
  • zone: zona en la que se encuentra el MIG. No puedes especificar una región para los escaladores automáticos en las métricas por grupo
  • max-instances: límite en la cantidad de VM que el escalador automático puede agregar al MIG
  • min-instances: límite en la cantidad mínima de VM que puede tener el escalador automático en 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: 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 de zona única 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 beta 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.label.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 utilización por grupo de 100, que representa el valor de la métrica que el escalador automático debe intentar mantener.

gcloud beta 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.label.group_name = our-instance-group" \
    --stackdriver-metric-utilization-target=100 \
    --stackdriver-metric-utilization-target-type=delta-per-second