Ajusta la escala según las métricas de Stackdriver Monitoring

Puedes configurar el escalador automático para que escale según los siguientes tipos de métricas:

  • Escalamiento con métricas por instancia en el que la métrica seleccionada proporciona datos de cada instancia en el grupo de instancias administrado sobre el uso de recursos.
  • Escalamiento con 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 Stackdriver Monitoring o métricas personalizadas de Stackdriver Monitoring que crees tú mismo.

Antes de comenzar

Métricas por instancia

Las métricas por instancia proporcionan datos para cada instancia distinta en un grupo. Las métricas proporcionan datos de cada instancia en el grupo de instancias administrado sobre el uso de recursos. Para las métricas por instancia, el grupo de instancias no puede escalar por debajo de 1, ya que el escalador automático requiere métricas sobre al menos una instancia en ejecución para funcionar.

Si necesitas escalar con métricas de Stackdriver Monitoring que no son específicas de instancias individuales o si, en ocasiones, necesitas escalar tus grupos de instancias a cero, puedes configurar tus instancias para que usen métricas por grupo para el escalamiento.

Métricas por instancia estándar

Stackdriver Monitoring tiene un conjunto de métricas estándar que puedes usar para supervisar tus instancias de máquina virtual (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; el valor de la métrica aumenta o disminuye de forma proporcional al número de instancias 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 Stackdriver 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 Platform (GCP) 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 tu grupo de instancias administrado para exportar la métrica personalizada de todas las instancias en el grupo de instancias administrado.

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, esta 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 específica de Compute Engine por separado.
  • Los valores exportados por instancia se deben asociar con un recurso gce_instance supervisado, que contiene 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 instancia.
  • 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 mayor 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álido, lo que significa que los datos de la métrica pueden usarse para aumentar o disminuir la escala de manera proporcional a la cantidad de máquinas virtuales.
  • La métrica debe exportar valores de datos int64 o double.

Para que el escalador automático funcione con tu métrica personalizada, debes exportar datos de todas las instancias en el grupo de instancias administrado para esta métrica.

Nota: Puedes obtener el ID numérico de una instancia si realizas una solicitud de la propiedad del ID del servidor de metadatos desde la instancia. 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 Stackdriver Monitoring, debes proporcionar el identificador de la métrica, el nivel de uso objetivo deseado y el tipo de objetivo de uso. Cada una de estas propiedades se describe con brevedad a continuación:

  • Identificador de la métrica: el 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: el 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 para la configuración del ajuste de escala automático varían entre los grupos de instancias administrados regionales y los de zona única. Los grupos de instancias administrados regionales no son compatibles con el filtrado de métricas por instancia.

A fin de configurar el ajuste de escala automático para un grupo de instancias administrado regional (múltiples zonas), haz lo siguiente:

  1. Dirígete a la página Grupos de instancias.
  2. Si no tienes un grupo de instancias, crea uno. En caso contrario, haz clic en el nombre de un grupo de instancias en la lista para abrir la página de detalles. El grupo debe ser regional.
  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 Habilitar para habilitar el ajuste de escala automático.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de supervisión de Stackdriver.
  6. 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.
  7. En la sección Objetivo, especifica el valor objetivo.
  8. 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.
  9. Guarda los cambios cuando esté todo listo.

A fin de configurar el ajuste de escala automático para un grupo de instancias administrado de zona única, haz lo siguiente:

  1. Dirígete a la página Grupos de instancias.
  2. Si no tienes un grupo de instancias, crea uno. De lo contrario, haz clic en el nombre de un grupo de instancias para abrir su página de detalles. El grupo de instancias debe ser de 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 Habilitar para habilitar el ajuste de escala automático.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de supervisión de Stackdriver.
  6. 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.
  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 uso, especifica el valor objetivo.
  10. En la sección Tipo de objetivo de uso, 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

Como opción, puedes usar la marca --cool-down-period, que le indica al escalador automático cuántos segundos esperar una vez que se haya iniciado una nueva máquina virtual para que este comience a recopilar información de uso. Esto explica el tiempo que puede tardar una máquina virtual en inicializar; 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.

En grupos de instancias administrados de varias zonas, usa la marca --region para especificar dónde encontrar el grupo de instancias. Por ejemplo:

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-central1

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

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 alternativa, puedes usar el parámetro coolDownPeriodSec, que le indica al escalador automático cuántos segundos esperar una vez que se haya iniciado una nueva instancia para que comience a recopilar información de uso. Cuando termina el período de inactividad, el escalador automático empieza a recopilar información de uso de la instancia nueva y determina si el grupo requiere instancias adicionales. Esto explica la cantidad de tiempo que puede tardar una instancia en inicializarse, durante el cual la información de uso recopilada no es confiable 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 instancia

Puedes aplicar filtros por instancia a las métricas de Stackdriver Monitoring, lo que te permite escalar grupos de instancias administrados de una zona, con 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 Stackdriver Monitoring. 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 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 Platform Console, la herramienta de línea de comandos de gcloud (Beta) o la API de Compute Engine Beta a fin de agregar filtros de métricas para el ajuste de escala automático de un solo grupo de instancias administrado por zona.

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. Dirígete a la página Grupos de instancias.
  2. Si no tienes un grupo de instancias, crea uno. De lo contrario, haz clic en el nombre de un grupo de instancias para abrir su página de detalles. El grupo de instancias debe ser de 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 Habilitar para habilitar el ajuste de escala automático.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de supervisión de Stackdriver.
  6. 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.
  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 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.label.loadbalanced = true'. Debes incluir las marcas de objetivo de uso 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

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 herramienta de (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 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.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/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.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 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 instancias según la cantidad de trabajo disponible para asignar a cada instancia. Especifica un valor para este parámetro que represente cuánto trabajo esperas que maneje cada instancia. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada instancia o especifica 0.5 si deseas asignar media unidad de trabajo a cada una. El escalador automático agrega suficientes instancias al grupo de instancias administrado a fin de garantizar que haya suficientes 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 instancia, el escalador automático crea 20 instancias en el grupo de instancias administrado. El escalamiento con asignación de instancias permite que el grupo de instancias se reduzca a 0 instancias cuando el valor de la métrica descienda a 0 y que crezca 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 instancias cuando se escala con la 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 uso: especifica un objetivo de uso para indicar que deseas que el escalador automático agregue o quite instancias 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 instancias de manera 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 instancias de manera gradual hasta que la métrica aumenta al valor objetivo. No se puede reducir el grupo a 0 instancias mediante el escalamiento con un objetivo de uso. En el siguiente diagrama, se muestra cómo el escalador automático agrega y quita instancias en respuesta a un valor de la métrica para mantener un objetivo de uso.El escalador automático agrega y quita instancias para mantener un uso objetivo.

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

  • Asignación de instancias: escala el tamaño de tus grupos de instancias administrados según el número de mensajes no confirmados en una suscripción de Cloud Pub/Sub o una tarifa QPS total de un extremo de red.
  • Objetivo de uso: escala el tamaño de tus grupos de instancias administrados en función de un objetivo de uso para una métrica personalizada que no proviene 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 instancias, tus grupos de instancias pueden escalarse a 0 instancias. Si la métrica indica que tu grupo de instancias no tiene trabajo para completar, el grupo se reducirá a 0 instancias hasta que la métrica detecte que haya trabajo disponible. A diferencia de una asignación de instancias por grupo, el ajuste de escala automático por instancia requiere métricas de uso de recursos de al menos una instancia, por lo que el grupo no puede escalar por debajo de 1.

Filtrado de métricas por grupo

Puedes aplicar filtros por grupo a las métricas de Stackdriver Monitoring, lo que te permite escalar grupos de instancias administrados con valores individuales de métricas que tengan 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 Stackdriver Monitoring. 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.
  • 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 Platform Console, la herramienta de línea de comandos de gcloud (Beta) o la API de Compute Engine (Beta) para configurar el ajuste de escala automático con métricas por grupo para un grupo de instancias administrado de una sola zona.

Console

  1. Dirígete a la página Grupos de instancias.
  2. Si no tienes un grupo de instancias, crea uno. De lo contrario, haz clic en el nombre de un grupo de instancias para abrir su página de detalles. El grupo de instancias debe estar en una sola zona.
  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 Habilitar para habilitar el ajuste de escala automático.
  5. En la sección Ajustar la escala automática en función de, selecciona Métrica de supervisión de Stackdriver.
  6. En la sección Alcance de la exportación de la métrica, selecciona Serie temporal única 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 uso o Asignación de instancias.
    • Si seleccionas una política de asignación de instancias, proporciona un valor de Asignación de instancia única que represente la cantidad de trabajo que se asignará a cada instancia en el grupo de instancias administrado. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada instancia. El escalador automático mantiene suficientes instancias 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 instancia, el escalador automático crea 5 instancias en el grupo de instancias administrado.
    • Si seleccionas una política de objetivo de uso, haz lo siguiente:
      • Proporciona un valor de Objetivo de uso 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.
  11. Guarda los cambios cuando esté todo listo.

gcloud

Crea un escalador automático para un grupo de instancias administrado 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 uso: 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]

Esta es una aclaración sobre el ejemplo anterior:

  • [GROUP_NAME] es el nombre del grupo de instancias administrado en el que deseas agregar un escalador automático.
  • [ZONE] es la zona en la que se encuentra el grupo de instancias administrado. No puedes especificar una región para los escaladores automáticos en las métricas por grupo.
  • [MAX_INSTANCES] es el límite para la cantidad de instancias que el escalador automático puede agregar al grupo de instancias administrado.
  • [MIN_INSTANCES] es el límite para la cantidad mínima de instancias que el escalador automático puede tener en el grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que se especifica un filtro de supervisión con una TimeSeries relevante y un MonitoredResource. El filtro debe cumplir con los requisitos de filtrado del escalador automático.
  • [INSTANCE_ASSIGNMENT] es la cantidad de trabajo que se asignará a cada instancia en el grupo de instancias administrado. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada instancia o especifica 0.5 si deseas asignar media unidad de trabajo a cada una. El escalador automático agrega suficientes instancias al grupo de instancias administrado a fin de garantizar que haya suficientes para completar el trabajo disponible indicado por la métrica. Si el valor de la métrica es 10 y asignaste 0.5 unidades de trabajo a cada instancia, el escalador automático aprovisiona 20 instancias en el grupo de instancias administrado.

Objetivo de uso:

En algunas situaciones, quizás desees usar objetivos de uso con métricas por grupo en lugar de especificar una cantidad de instancias relativas al valor de la métrica que mide tu 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.

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]

Esta es una aclaración sobre el ejemplo anterior:

  • [GROUP_NAME] es el nombre del grupo de instancias administrado en el que deseas agregar un escalador automático.
  • [ZONE] es la zona en la que se encuentra el grupo de instancias administrado. No puedes especificar una región para los escaladores automáticos en las métricas por grupo.
  • [MAX_INSTANCES] es el límite para la cantidad de instancias que el escalador automático puede agregar al grupo de instancias administrado.
  • [MIN_INSTANCES] es el límite para la cantidad mínima de instancias que el escalador automático puede tener en el grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que se especifica un filtro de supervisión con una 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] es el valor de métrica que intenta mantener el escalador automático.
  • [TARGET_TYPE] es el tipo de valor para 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.

Para ver la lista de marcas y comandos de la herramienta de línea de comandos de gcloud disponibles sobre el escalador automático que funcionan con el ajuste de escala automático por grupo, consulta la referencia de la herramienta de línea de comandos de (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 grupo de instancias administrado. 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 uso: 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 maneje cada instancia.

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]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

Esta es una aclaración sobre el ejemplo anterior:

  • [PROJECT_ID] es el ID del proyecto.
  • [ZONE] es la zona en la que se encuentra el grupo de instancias administrado.
  • [GROUP_NAME] es el nombre del grupo de instancias administrado en el que deseas agregar un escalador automático.
  • [MAX_INSTANCES] es el límite para la cantidad de instancias que el escalador automático puede agregar al grupo de instancias administrado.
  • [MIN_INSTANCES] es el límite para la cantidad mínima de instancias que el escalador automático puede tener en el grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que se especifica un filtro de supervisión con una 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] es la cantidad de trabajo que se asignará a cada instancia en el grupo de instancias administrado. Por ejemplo, especifica 2 para asignar dos unidades de trabajo a cada instancia o especifica 0.5 si deseas asignar media unidad de trabajo a cada una. El escalador automático agrega suficientes instancias al grupo de instancias administrado a fin de garantizar que haya suficientes para completar el trabajo disponible indicado por la métrica. Si el valor de la métrica es 10 y asignaste 0.5 unidades de trabajo a cada instancia, el escalador automático aprovisiona 20 instancias en el grupo de instancias administrado.

Objetivo de uso:

En algunas situaciones, quizás desees usar objetivos de uso con métricas por grupo en lugar de especificar una cantidad de instancias relativas al valor de la métrica que mide tu 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 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]
    }
  ],
 }
}

Esta es una aclaración sobre el ejemplo anterior:

  • [GROUP_NAME] es el nombre del grupo de instancias administrado en el que deseas agregar un escalador automático.
  • [ZONE] es la zona en la que se encuentra el grupo de instancias administrado.
  • [MAX_INSTANCES] es el límite para la cantidad de instancias que el escalador automático puede agregar al grupo de instancias administrado.
  • [MIN_INSTANCES] es el límite para la cantidad mínima de instancias que el escalador automático puede tener en el grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que se especifica un filtro de supervisión con una 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] es el valor de métrica que intenta mantener el escalador automático.
  • [TARGET_TYPE] es el tipo de valor para 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 según una cola de Cloud Pub/Sub

Supón la siguiente configuración:

  • Un tema activo de Cloud Pub/Sub recibe mensajes de alguna fuente.
  • Una suscripción activa de Cloud 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 grupo de instancias administrado de una sola zona llamado our-instance-group y se encuentra en la zona us-central1-a. El grupo no debe superar los 100 trabajadores y debería escalarse 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 para cada mensaje en la cola (limitado según la cantidad máxima de instancias en el grupo). Sin embargo, esto puede causar un sobreaprovisionamiento. En el peor de los casos, una instancia se crea 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 manera 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 instancia en su ciclo de vida para que se considere que se usó de manera eficiente. Ten en cuenta el tiempo de inicio y apagado y que el ajuste de escala automático no borra las instancias de inmediato. Por ejemplo, supongamos que el inicio y el apagado tardan alrededor de 5 minutos en total y que el ajuste de escala automático borra las instancias luego de un período de unos 10 minutos. Entonces, sería eficiente crear una instancia 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 instancia. 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 Cloud 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 el uso de una métrica que no incluye el mensaje que se está procesando, ya que esa métrica puede disminuir a 0 cuando aún hay trabajo pendiente, lo que activa el ajuste de escala automático a reducir y probablemente interrumpir 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 uso 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 grupo de instancias administrado llamado our-instance-group para realizar una tarea particular. El grupo está ubicado en la zona us-central1-a.
  • Tienes una métrica personalizada de Stackdriver Monitoring que exporta un valor que te gustaría mantener en un determinado nivel. Para 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 grupo de instancias, our-instance-group.
    • Con la métrica personalizada se exportan datos para el recurso supervisado global, es decir, esta no está asociada con ninguna instancia específica.

Determinaste que, cuando el valor de la métrica supera un determinado valor, debes agregar más instancias al grupo para manejar la carga, mientras que cuando cae por debajo de ese valor, puedes liberar algunos recursos. El ajuste de escala automático agrega o quita instancias 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 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
¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…

Documentación de Compute Engine