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 se escala según una métrica que proporciona valores relacionados con la totalidad del grupo de instancias administrado.

Estas métricas pueden ser métricas estándar provistas por el servicio de Stackdriver Monitoring o métricas personalizadas de Stackdriver Monitoring que crees tú.

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 otras métricas de Stackdriver que no son específicas para instancias individuales o quieres escalar tus grupos de instancias a cero instancias de vez en cuando, puedes configurar tus instancias para que se escalen con métricas por grupo.

Métricas por instancia estándar

Stackdriver Monitoring tiene una serie de métricas estándar que puedes usar para supervisar tus instancias de máquina virtual. 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 a 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 si el valor de la métrica aumenta o disminuye proporcionalmente a la cantidad de instancias de máquina virtual en el grupo.

La siguiente es una métrica no válida, ya que el valor no cambia en función del uso y el escalador automático no puede usar el valor para escalar proporcionalmente:

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 el servicio de Stackdriver Monitoring. Esto te da acceso a datos estándar de Cloud Platform 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, debes haber hecho lo siguiente:

  • Creaste una métrica personalizada. Para obtener información sobre la creación de una métrica personalizada, consulta la documentación sobre métricas personalizadas.
  • Configuraste tu grupo de instancias administrado para exportar la métrica personalizada de todas las instancias en el grupo de instancias administrado.

Elección de 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 a cada instancia de Compute Engine específica por separado.
  • Los valores exportados por instancia deben estar asociados a un recurso gce_instance supervisado, 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 instancia
  • La métrica debe exportar datos al menos cada 60 segundos. Puedes exportar datos con mayor frecuencia y el escalador automático podrá responder con mayor rapidez para cargar los cambios. Si exportas datos con menor frecuencia, quizás el escalador automático no pueda responder 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 proporcionalmente 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 Servidor de metadatos.

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 usa 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. A continuación, hay una breve descripción de cada una de estas propiedades:

  • Identificador de la métrica: el nombre de la métrica que se usará. Si usas una métrica personalizada, defines este nombre cuando creas 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, la exploración y la lectura de métrica.

  • Nivel de uso objetivo: el nivel de uso objetivo que el escalador automático debe mantener para esta métrica. Debe ser un número positivo. Por ejemplo, 24.5 y 1100 son valores aceptables. Ten en cuenta que esto no es lo mismo que el uso de CPU y el balanceo de cargas, que deben tener un valor flotante entre 0.0 y 1.0.

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

    • GAUGE: el escalador automático computa el valor promedio de los datos recopilados en los últimos minutos y los 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 expresaste tu uso objetivo deseado en segundos, es conveniente que uses DELTA_PER_SECOND y, asimismo, DELTA_PER_MINUTE si lo expresaste en minutos, de modo que el escalador automático pueda realizar comparaciones precisas.

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 con 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 tipo de medida 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 la página de detalles del grupo. 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 con 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 Filtrado de 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 gcloud, el siguiente comando crea un escalador automático que usa el tipo de objetivo GAUGE. Junto con el parámetro --custom-metric-utilization, el parámetro --max-num-replicas también es necesario para la creación de 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

De manera opcional, puedes usar la marca --cool-down-period, que le informa al escalador automático cuántos segundos debe esperar luego de que se inició una máquina virtual nueva antes de comenzar a recopilar información de su 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 enfriamiento predeterminado es de 60 segundos.

Para los grupos de instancias administrados de zonas múltiples, usa la marca --region a fin de especificar el lugar en que se encuentra el grupo de instancias. Como en el siguiente 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

Para ver una lista completa de las marcas y los comandos de gcloud disponibles, 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 construyas solicitudes a la API para el ajuste de escala automático.

En la API, haz una solicitud POST a la siguiente URL; reemplaza myproject con el ID del proyecto y us-central1-f con tu zona preferida:

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

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

De manera opcional, puedes usar el parámetro coolDownPeriodSec, que le informa al escalador automático cuántos segundos debe esperar luego de que se inició una instancia nueva antes de comience a recopilar uso. Luego del período de enfriamiento, el escalador automático comienza a recopilar información de uso de la instancia nueva y determina si el grupo requiere instancias adicionales. Esto explica el tiempo que puede tardar una instancia en inicializar; los datos de uso recopilados durante este tiempo no son confiables para el ajuste de escala automático. El período de enfriamiento predeterminado es de 60 segundos.

POST https://www.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 a métricas por instancia de Stackdriver, lo que te permite escalar grupos de instancias administrados de zona única mediante valores individuales de métricas con múltiples 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.*. Las métricas por instancia siempre usan todos los recursos de instancia del 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 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 grupo de instancias administrado 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 en función del 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 la página de detalles del grupo. 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 en función del booleano loadbalanced, especifica la marca de filtrado --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

Este ejemplo 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 completa de las marcas y los comandos de gcloud disponibles, consulta la referencia 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 construyas 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 en función del booleano loadbalanced, especifica el parámetro filter con el valor "metric.label.loadbalanced = true".

En la API, haz una solicitud POST a la siguiente URL; reemplaza myproject con el ID del proyecto y us-central1-f con tu zona preferida. El cuerpo de la solicitud debe contener los campos name, target y autoscalingPolicy. En autoscalingPolicy, proporciona las propiedades maxNumReplicas y customMetricUtilizations.

POST https://www.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"
   }
  ]
 }
}

Este ejemplo 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 con la cantidad de trabajo disponible para el grupo o el nivel de ocupación del grupo. El grupo se escala en función de la fluctuación del valor de métrica de ese grupo y la configuración que definiste.

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 representa 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 la asignación de instancia permite que el grupo de instancias se reduzca a 0 cuando el valor de la métrica disminuye a 0 y que crezca cuando el valor aumenta por sobre 0. El siguiente diagrama 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. Un grafo que muestra la relación proporcional entre el valor de la métrica y la cantidad de instancias
  • Objetivo de uso: especifica un objetivo de uso a fin de indicar que deseas que el escalador automático agregue o quite instancias para mantener la métrica en un valor determinado. Cuando la métrica supera el objetivo especificado, el escalador automático agrega instancias de manera gradual hasta que la métrica disminuye hasta el valor objetivo. Cuando la métrica supera el valor objetivo especificado, el escalador automático quita instancias de manera gradual hasta que la métrica aumenta hasta el valor objetivo. El escalamiento con un objetivo de uso no puede reducir el grupo a 0 instancias. El siguiente diagrama muestra cómo el escalador automático agrega y quita instancias como respuesta a un valor de métrica para mantener un objetivo de uso. Un grafo que muestra cómo el escalador automático agrega y quita instancias para mantener el objetivo de uso

Cada opción tiene los siguientes casos prácticos:

  • Asignación de instancias: escala el tamaño de tus grupos de instancias administrados en función de la cantidad de mensajes no confirmados en una suscripción a Google 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 instancia, tus grupos de instancias pueden escalarse a 0 instancias. Si tu métrica indica que no hay trabajo para tu grupo de instancias, el grupo se escalará a 0 instancias hasta que la métrica detecte que hay trabajo disponible. A diferencia de la asignación de instancias por grupo, el ajuste de escala automático por instancia requiere de métricas de uso de recursos de al menos una instancia, de modo que el grupo no puede escalarse a un tamaño de 1.

Filtrado de métricas por grupo

Puedes aplicar filtros a métricas de Stackdriver por grupo, lo que te permite escalar grupos de instancias administrados con valores individuales de métricas que tienen múltiples 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 otras funciones para cada selector.
  • Puedes especificar el selector de tipo de métrica metric.type = "..." en el filtro y además incluir el campo metric original. De manera opcional, puedes usar solo el campo metric. La métrica debe cumplir con los siguientes requisitos:
    • La métrica debe estar especificada en un lugar, como mínimo.
    • La métrica puede especificarse en ambos lugares, pero debe ser igual.
  • Debes especificar el selector resource.type, pero no puedes configurarlo en 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 a fin de configurar el ajuste de escala automático con métricas por grupo para un grupo de instancias administrado de zona única.

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 la página de detalles del grupo. 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 única por grupo.
  7. En la sección Identificador de la métrica, especifica el nombre de la métrica con 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 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 una instancia:

Especifica la métrica que quieres medir y especifica 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]

donde:

  • [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 en el 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 un grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Google Cloud Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que especificas 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]

donde:

  • [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 en el 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 un grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Google Cloud Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que especificas 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 una lista completa de las marcas y los comandos de gcloud del escalador automático que son compatibles con el ajuste de escala automático por grupo, consulta la referencia de gcloud 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 una instancia:

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 especifica la cantidad de trabajo que esperas que maneje cada instancia.

POST https://www.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]
    }
  ],
 }
}

donde:

  • [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 un grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Google Cloud Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que especificas 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://www.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]
    }
  ],
 }
}

donde:

  • [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 en el 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 un grupo de instancias administrado.
  • [METRIC_URL] es una URL sin protocolo de una métrica de Google Cloud Monitoring.
  • [METRIC_FILTER] es un filtro de Stackdriver Monitoring en el que especificas 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 una instancia para escalar en función de una cola de Pub/Sub

Supón la siguiente configuración:

  • Un tema activo de Google Cloud Pub/Sub recibe mensajes de alguna fuente.
  • Una suscripción activa de Google Cloud Pub/Sub se conecta al tema con 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 zona única 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 hay mensajes en la cola.
  • En promedio, un trabajador procesa un mensaje en un minuto.

Para determinar el valor de asignación de la instancia ó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 por hacer el trabajo.
    • Ten en cuenta que, si lo trabajadores pudieron procesar varios mensajes en simultáneo, tendría sentido 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ó eficientemente. Ten en cuenta el tiempo de inicio y apagado y que el ajuste de escala automático no borra las instancias inmediatamente. Por ejemplo, si supones que el inicio y el apagado tardan 5 minutos en total y que el ajuste de escala automático borra las instancias luego de un período de unos 10 minutos, calculas que es 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.

Si observas las métricas de Pub/Sub disponibles, verás una métrica que representa la longitud de la cola de suscripción: 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 determinada tarea. 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 a 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.
    • La métrica personalizada exporta datos para los Recursos supervisados globales, es decir, no asociados con ninguna instancia especifica.

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 un ritmo proporcional a qué tan por encima del objetivo o debajo de este se encuentra la métrica. Para este ejemplo, supón 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 ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine