Escalonamento com base nas métricas do Cloud Monitoring

Neste documento, descrevemos como escalonar um grupo gerenciado de instâncias (MIG) com base nas métricas do Monitoring.

Também é possível escalonar um MIG com base na utilização da CPU ou na capacidade de serviço de um balanceador de carga HTTP(S) externo.

Ao escalonar um MIG com base nas métricas do Monitoring, o processo pode ser feito com base nos seguintes tipos de métricas:

  • Faça o escalonamento usando métricas por instância, em que a métrica selecionada fornece dados para cada instância de máquina virtual (VM) do MIG, indicando a utilização de recursos.
  • Faça o escalonamento usando métricas por grupo, em que o grupo é escalonado com base em uma métrica que fornece um valor relacionado a todo o grupo gerenciado de instâncias.

Elas podem ser métricas padrão fornecidas pelo serviço Cloud Monitoring ou personalizadas do Cloud Monitoring criadas por você.

Limitações

O escalonamento com base nas métricas do Cloud Monitoring é restrito pelas limitações de todos os escalonadores automáticos, bem como pelas seguintes limitações:

  • Não é possível fazer o escalonamento automático com as métricas com base em registros do Cloud Monitoring.
  • Não é possível usar rótulos de metadados de recursos para filtrar métricas do escalonamento automático. Só é possível usar os rótulos definidos na métrica e nos tipos de recursos monitorados.

Antes de começar

Métricas por instância

As métricas por instância fornecem dados para cada VM em um MIG separadamente, indicando a utilização de recursos para cada instância. Ao usar métricas por instância, o MIG não pode ser escalonado abaixo do tamanho de uma VM, uma vez que o escalonador automático exige métricas sobre pelo menos uma VM em execução para funcionar.

Se você precisar escalonar usando métricas do Cloud Monitoring que não são específicas para VMs individuais ou se precisar escalonar o MIG para zero VMs de vez em quando, poderá configurar o MIG para usar métricas por grupo para o escalonamento.

Métricas padrão por instância

O Cloud Monitoring tem um conjunto de métricas padrão que podem ser usadas para monitorar suas VMs. Porém, nem todas as métricas padrão são válidas para uso do autoescalador.

Uma métrica de uso válida para escalonamento atende aos seguintes critérios:

  • A métrica padrão precisa conter dados para um recurso monitorado gce_instance. É possível usar a chamada de API timeSeries.list para verificar se uma métrica específica exporta dados para esse recurso.

  • A métrica padrão descreve o grau de ocupação de uma instância, e o valor da métrica aumenta ou diminui proporcionalmente ao número de VMs no grupo.

A métrica a seguir é inválida porque o valor não se altera com base no uso, impedindo o autoescalador de usar o valor para escalonar proporcionalmente:

compute.googleapis.com/instance/cpu/reserved_cores

Depois de selecionar uma métrica padrão que você quer usar para o autoescalador, é possível configurar o escalonamento automático.

Métricas personalizadas

É possível criar métricas personalizadas usando o Cloud Monitoring e gravar seus próprios dados de monitoramento no serviço do Monitoring. Com isso, você tem acesso aos dados padrão do Google Cloud e aos seus dados de monitoramento personalizados, com uma estrutura de dados familiar e uma sintaxe de consulta consistente. Se você tiver métrica personalizada, poderá optar por fazer o escalonamento com base nos dados provenientes dela.

Pré-requisitos

Para usar métricas personalizadas, faça primeiro fazer o seguinte:

  • Crie uma métrica personalizada. Para obter informações sobre como criar uma métrica personalizada, consulte Como usar métricas personalizadas.
  • Configure o MIG para exportar a métrica personalizada de todas as VMs do grupo.

Escolher uma métrica personalizada válida

Nem todas as métricas personalizadas servem para uso no autoescalador. Para escolher uma métrica personalizada válida, ela precisa ter todas as propriedades a seguir:

  • Ser baseada em instância. A métrica precisa exportar os dados relevantes para cada instância de VM específica do Compute Engine separadamente.
  • Os valores exportados por instância têm que ser associados a um recurso monitorado gce_instance, que contenha os seguintes rótulos:
    • zone com o nome da zona em que a instância está.
    • instance_id com o valor do ID numérico exclusivo atribuído à VM.
  • Exportar dados pelo menos a cada 60 segundos. Se você exporta dados com mais frequência do que a cada 60 segundos, o autoescalador consegue responder mais rápido para carregar alterações. Se você exportar seus dados a cada 60 segundos, talvez o autoescalador não consiga responder rápido o suficiente para carregar as alterações.
  • A métrica precisa ser uma métrica de utilização válida, o que significa que os dados da métrica podem ser usados para fazer o escalonamento horizontal ou vertical proporcionalmente no número de VMs.
  • Exportar os valores de dados int64 ou double.

Para que o escalonador automático funcione com sua métrica personalizada, exporte os dados dessa métrica personalizada de todas as VMs no MIG.

Como configurar o escalonamento automático usando métricas de monitoramento por instância

O processo de configuração de um autoescalador é o mesmo para uma métrica padrão ou personalizada. Para criar um escalonador automático que use métricas do Cloud Monitoring, é preciso fornecer o identificador de métrica, o nível da meta de utilização desejado e o tipo de meta de utilização. Cada uma dessas propriedades é descrita abaixo:

  • Identificador de métrica: o nome da métrica a ser usada. Se a métrica for personalizada, você definiu esse nome quando a criou. O identificador tem o seguinte formato:

    custom.googleapis.com/path/to/metric
    

    Consulte Como usar métricas personalizadas para mais informações sobre como criar, navegar e ler métricas.

  • Nível da meta de uso: o nível que o autoescalador precisa manter. Precisa ser um número positivo. Por exemplo, 24.5e 1100 são valores aceitáveis. Observe que isso é diferente do uso de CPU e de balanceamento de carga, que precisa ser um valor flutuante entre 0,0 e 1,0.

  • Tipo de meta: como o autoescalador calcula os dados coletados das instâncias. Os tipos de meta possíveis são:

    • GAUGE. O escalonador automático calcula o valor médio dos dados coletados nos últimos minutos e o compara com o valor da meta de uso dele.
    • DELTA_PER_MINUTE. O autoescalador calcula a taxa média de crescimento por minuto e a compara com a meta de uso.
    • DELTA_PER_SECOND. O escalonador automático calcula a taxa média de crescimento por segundo e a compara com a meta de uso.

    Para comparações precisas, se você definir a meta de utilização em segundos, use DELTA_PER_SECOND como o tipo de meta do escalonador automático. Da mesma forma, use DELTA_PER_MINUTE para uma meta de uso em minutos.

Console

  1. No Console do Google Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Se você não tiver um grupo gerenciado de instâncias, crie um. Caso contrário, clique no nome de um MIG na lista para abrir a página de visão geral do grupo de instâncias.

  3. Na página de visão geral do grupo de instâncias, clique em Editar.

  4. Se não existir uma configuração de escalonamento automático, em Escalonamento automático, clique em Configurar escalonamento automático.

  5. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.

  6. Na seção Métricas de escalonamento automático, clique em uma métrica atual para editá-la ou clique em Adicionar métrica para adicionar outra métrica.

  7. Defina o Tipo de métrica como Métrica do Cloud Monitoring.

  8. Na seção Escopo de exportação da métrica, selecione Séries temporais por instância para configurar o escalonamento automático usando métricas por instância.

  9. Na seção Identificador de métrica, digite o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.

  10. Na seção Expressão de filtro extra:

    • Para um MIG zonal, você tem a opção de inserir um filtro para usar valores individuais de métricas com vários streams ou rótulos. Para mais informações, consulte Como filtrar métricas por instância.
    • Para um MIG regional, deixe esta seção em branco.
  11. Na seção Meta de utilização, especifique o valor de meta.

  12. Na seção Tipo de meta de utilização, verifique se o tipo de meta corresponde ao tipo de medida da métrica.

  13. Salve suas alterações quando estiver pronto.

gcloud

Por exemplo, na Google Cloud CLI, o comando a seguir cria um escalonador automático que usa o tipo de meta GAUGE. Com o parâmetro --custom-metric-utilization, também é necessário o parâmetro --max-num-replicas para criar um escalonador 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

É possível usar a sinalização --cool-down-period para informar ao escalonador automático quanto tempo leva para o aplicativo ser inicializado. Especificar um período de espera preciso melhora as decisões do escalonador automático. Por exemplo, ao escalonar horizontalmente, o escalonador automático ignora os dados das VMs que ainda estão sendo inicializadas porque essas VMs talvez ainda não representar o uso normal do aplicativo. O período de espera padrão é de 60 segundos.

Veja uma lista completa de comandos e sinalizações disponíveis para a CLI gcloud na referência do gcloud.

API

Na API, faça uma solicitação POST para o URL a seguir, substituindo myproject pelo ID de seu projeto e us-central1-f pela zona de sua preferência.

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

O corpo da solicitação precisa conter os campos name, target e autoscalingPolicy. Em autoscalingPolicy, forneça as propriedades maxNumReplicas e customMetricUtilizations.

Use o campo coolDownPeriodSec para informar ao escalonador automático quanto tempo leva para o aplicativo ser inicializado. Especificar um período de espera preciso melhora as decisões do escalonador automático. Por exemplo, ao escalonar horizontalmente, o escalonador automático ignora os dados das VMs que ainda estão sendo inicializadas porque essas VMs talvez ainda não representar o uso normal do aplicativo. O período de espera padrão é 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"
   }
  ]
 }
}

Como filtrar métricas por instância

É possível aplicar filtros a métricas do Cloud Monitoring por instância, o que permite escalonar MIGs usando valores individuais de métricas com vários fluxos ou rótulos.

Requisitos de filtragem de métrica por instância

A filtragem do escalonador automático é compatível, com algumas limitações, com a sintaxe do filtro do Cloud Monitoring. Os filtros para métricas por instância precisam atender aos seguintes requisitos:

  • Use somente o operador AND para mesclar seletores.
  • É possível usar somente o operador de comparação de igualdade direta =, mas não é possível usá-lo com quaisquer funções. Por exemplo, não é possível usar a função startswith() com o operador de comparação =.
  • Você precisa colocar o valor de um filtro entre aspas duplas, por exemplo: metric.labels.state = "used".
  • Não é possível usar caracteres curinga.
  • Não defina os seletores resource.type ou resource.labels.*. As métricas por instância sempre usam todos os recursos da instância do grupo.
  • Para melhores resultados, crie um filtro específico o suficiente para retornar uma única série temporal para cada instância. Se o filtro retornar várias séries temporais, elas serão adicionadas juntas.

Como configurar autoescaladores para filtrar métricas

Use o console do Google Cloud, a Google Cloud CLI ou a API Compute Engine para adicionar filtros de métrica para o escalonamento automático de um MIG.

Console

O processo de criação de um autoescalador que filtra uma métrica por instância é semelhante à criação de um autoescalador por instância normal, mas você também especifica um filtro de métrica. Por exemplo, a métrica compute.googleapis.com/instance/network/received_bytes_count inclui os rótulos instance_name e loadbalanced. Para filtrar com base no valor booleano loadbalanced:

  1. No Console do Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Se você não tiver um MIG, crie um. Caso contrário, clique no nome de um MIG para abrir a página de visão geral do grupo de instâncias.

  3. Na página de visão geral do grupo de instâncias, clique em Editar.

  4. Se não existir uma configuração de escalonamento automático, em Escalonamento automático, clique em Configurar escalonamento automático.

  5. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.

  6. Na seção Métricas de escalonamento automático, clique em uma métrica atual para editá-la ou clique em Adicionar métrica para adicionar outra métrica.

  7. Na seção Tipo de métrica, selecione Métrica do Cloud Monitoring.

  8. Na seção Escopo de exportação da métrica, selecione Séries temporais por instância para configurar o escalonamento automático usando métricas por instância.

  9. Na seção do Identificador da métrica, insira o nome da métrica. Por exemplo, compute.googleapis.com/instance/network/received_bytes_count.

  10. Na seção Expressão de filtro extra, insira um filtro. Por exemplo, 'metric.labels.loadbalanced = true'.

  11. Salve suas alterações quando estiver pronto.

gcloud

O processo de criação de um autoescalador que filtra uma métrica por instância é semelhante à criação de um autoescalador por instância normal, mas você precisa especificar um filtro de métrica e sinalizações individuais de meta de utilização e tipo de meta. Por exemplo, a métrica compute.googleapis.com/instance/network/received_bytes_count inclui os rótulos instance_name e loadbalanced. Para filtrar com base no valor booleano loadbalanced, especifique o sinalizador de filtro --stackdriver-metric-filter com o valor 'metric.labels.loadbalanced = true': Inclua os sinalizadores de meta de utilização e tipo de meta individualmente.

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

Este exemplo configura o escalonamento automático para usar somente os dados de tráfego loadbalanced como parte da meta de utilização.

Veja uma lista comandos e sinalizações disponíveis do gcloud na referência da CLI gcloud.

API

Para adicionar filtros de métricas a um MIG zonal, use o recurso autoscalers ou, para um MIG regional, use o recurso regionAutoscalers.

O processo de criação de um autoescalador que filtra uma métrica por instância é semelhante à criação de um autoescalador por instância normal, mas você precisa especificar um filtro de métrica e sinalizações individuais de meta de utilização e tipo de meta. Por exemplo, a métrica compute.googleapis.com/instance/network/received_bytes_count inclui os rótulos instance_name e loadbalanced. Para filtrar com base no valor booleano loadbalanced, especifique o parâmetro filter com o valor "metric.labels.loadbalanced = true".

Na API, faça uma solicitação POST para o URL a seguir, substituindo myproject pelo ID de seu projeto e us-central1-f pela zona de sua preferência. O corpo da solicitação precisa conter os campos name, target e autoscalingPolicy. Em autoscalingPolicy, forneça as propriedades maxNumReplicas e customMetricUtilizations.

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

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

Este exemplo configura o escalonamento automático para usar somente os dados de tráfego loadbalanced como parte da meta de utilização.

Métricas por grupo

As métricas por grupo permitem o escalonamento automático com uma métrica padrão ou personalizada que não exporta dados de utilização por instância. Em vez disso, o grupo é escalonado com base em um valor que se aplica a todo o grupo e corresponde à quantidade de trabalho disponível ou à ocupação do grupo. Ele é escalonado com base na flutuação do valor da métrica correspondente e da configuração que você define.

Ao configurar o escalonamento automático em métricas por grupo, você precisa indicar como quer que o autoescalador forneça instâncias relativas à métrica:

  • Atribuição de instância: especifique uma atribuição de instância para indicar que você quer que o escalonador automático adicione ou remova VMs, dependendo da quantidade de trabalho disponível para atribuir a cada VM. Especifique um valor para esse parâmetro que represente quanto trabalho você espera que cada VM processe. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada VM ou 0.5 para atribuir meia unidade de trabalho a cada VM. O escalonador automático dimensiona o MIG para garantir que haja VMs suficientes para concluir o trabalho disponível, conforme indicado pela métrica. Se o valor da métrica for 10 e você tiver atribuído 0.5 unidades de trabalho a cada VM, o escalonador automático criará 20 VMs no MIG. O escalonamento com atribuição de instâncias permite que o grupo seja reduzido para 0 VMs quando o valor da métrica cair para 0 e aumente novamente quando ficar acima de 0. O diagrama a seguir mostra a relação proporcional entre o valor da métrica e o número de VMs ao escalonar com uma política de atribuição de instâncias. Relação proporcional entre o valor da métrica e o número de instâncias.
  • Meta de utilização: especifique uma meta de utilização para indicar que você quer que o escalonador automático adicione ou remova VMs para tentar manter a métrica em um valor especificado. Quando a métrica estiver acima da meta especificada, o escalonador automático adicionará VMs gradualmente até que a métrica diminua para o valor desejado. Quando a métrica estiver abaixo do valor especificado, o escalonador automático removerá gradualmente as VMs até que a métrica aumente para o valor desejado. O escalonamento com uma meta de utilização não pode reduzir o grupo para 0 VMs. O diagrama a seguir mostra como o escalonador automático adiciona e remove VMs em resposta a um valor de métrica para manter uma meta de utilização. Como adicionar e remover VMs do escalonador automático para manter uma meta de utilização.

Cada opção tem os seguintes casos de uso:

  • Atribuição de instâncias: dimensione o tamanho do MIG com base no número de mensagens não confirmadas em uma assinatura do Pub/Sub ou em uma taxa QPS total de um endpoint da rede.
  • Meta de utilização: dimensione o tamanho do MIG com base em uma meta de utilização de uma métrica personalizada que não vem das métricas padrão de uso da CPU ou da memória. Por exemplo, é possível escalonar o grupo com base em uma métrica de latência personalizada.

Quando você configura o escalonamento automático com métricas por grupo e especifica uma atribuição de instância, o MIG pode ser escalonado para zero VMs. Se a métrica indicar que não há trabalho para o grupo concluir, o grupo será escalonado para zero VMs até que a métrica detecte que um novo trabalho está disponível. Ao contrário do escalonamento com base em métricas por grupo, o escalonamento automático por instância requer métricas de utilização de recursos de pelo menos uma VM. Portanto, o grupo não pode ser dimensionado para menos que 1.

Como filtrar métricas por grupo

É possível aplicar filtros a métricas do Cloud Monitoring por grupo, o que permite escalonar MIGs usando valores individuais de métricas que têm vários fluxos ou rótulos.

Requisitos de filtragem de métrica por grupo

A filtragem do escalonador automático é compatível, com algumas limitações, com a sintaxe do filtro do Cloud Monitoring. Os filtros para métricas por grupo precisam atender aos seguintes requisitos:

  • Use somente o operador AND para mesclar seletores.
  • Não é possível usar o operador de comparação de igualdade direta = com nenhuma função para cada seletor. Por exemplo, não é possível usar a função startswith() com o operador de comparação =.
  • Não é possível usar caracteres curinga.
  • Você precisa colocar o valor de um filtro entre aspas duplas, por exemplo: metric.labels.state = "used".
  • É possível especificar um seletor de tipo de métrica de metric.type = "..." no filtro e também incluir o campo metric original. Opcionalmente, é possível usar somente o campo metric. A métrica precisa atender aos seguintes requisitos:
    • Ser especificada em pelo menos um lugar.
    • Pode ser especificada nos dois lugares, mas precisa ser igual.
  • Você tem que especificar o seletor resource.type, mas não pode defini-lo como gce_instance se quiser escalonar usando métricas por grupo.
  • Para melhores resultados, o filtro precisa ser específico o suficiente para retornar uma única série temporal para o grupo. Se o filtro retornar várias séries temporais, elas serão adicionadas juntas.

Como configurar o escalonamento automático usando métricas de monitoramento por grupo

Use o console do Google Cloud, a Google Cloud CLI ou a API Compute Engine para configurar o escalonamento automático com métricas por grupo.

Console

  1. No Console do Cloud, acesse a página Grupos de instâncias.

    Acesse grupo de instâncias

  2. Se você não tiver um grupo gerenciado de instâncias, crie um. Caso contrário, clique no nome de um MIG para abrir a página de visão geral do grupo de instâncias.

  3. Na página de visão geral do grupo de instâncias, clique em Editar.

  4. Se não existir uma configuração de escalonamento automático, em Escalonamento automático, clique em Configurar escalonamento automático.

  5. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.

  6. Na seção Métricas de escalonamento automático, clique em uma métrica atual para editá-la ou clique em Adicionar métrica para adicionar outra métrica.

  7. Defina o Tipo de métrica como Métrica do Cloud Monitoring.

  8. Na seção Escopo de exportação da métrica, selecione Única série temporal por grupo.

  9. Na seção Identificador de métrica, especifique o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.

  10. Especifique o Tipo de recurso monitorado.

  11. Se você quiser usar valores individuais de métricas que tenham vários streams ou rótulos, forneça uma Expressão de filtro extra. O filtro precisa atender aos requisitos de filtragem do escalonador automático.

  12. Na seção Política de escalonamento, selecione Atribuição de instância única ou Meta de utilização.

    • Se você selecionar uma política de atribuição de instância, forneça um valor de Atribuição de instância única que represente a quantidade de trabalho a ser atribuída a cada instância de VM no MIG. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada VM. O escalonador automático mantém VMs suficientes para concluir o trabalho disponível (conforme indicado pela métrica). Se o valor da métrica for 10 e você tiver atribuído 2 unidades de trabalho a cada VM, o escalonador automático criará 5 VMs no MIG.
    • Se você selecionar uma política de meta de utilização:
      • Forneça um valor de Meta de utilização que represente o valor da métrica que o autoescalador precisa tentar manter.
      • Selecione o Tipo de meta de utilização que representa o tipo de valor para a métrica.
  13. Salve suas alterações quando estiver pronto.

gcloud

A criação de um escalonador automático e com base em métricas por grupo é semelhante à criação de um escalonador automático com base em métricas por instância, exceto pelo fato de que você especifica sinalizações diferentes. No comando, especifique a sinalização --update-stackdriver-metric para fornecer o URL da métrica de monitoramento. Além disso, especifique como quer que o escalonador automático provisione instâncias incluindo uma das sinalizações a seguir:

  • Atribuição de instância: especifique a sinalização --stackdriver-metric-single-instance-assignment.
  • Meta de utilização: especifique a sinalização --stackdriver-metric-utilization-target.

Atribuição de instância:

Especifique uma métrica que você quer medir e especifique a sinalização --stackdriver-metric-single-instance-assignment para indicar a quantidade de trabalho que você espera que cada instância manipule. Você também deve especificar um filtro para a métrica usando a sinalização --stackdriver-metric-filter.

O comando a seguir cria um escalonador automático com base em uma métrica por grupo usando a sinalização --stackdriver-metric-single-instance-assignment.

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

Substitua:

  • GROUP_NAME: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • MAX_INSTANCES: o número máximo de VMs que o MIG pode ter.
  • MIN_INSTANCES: o número mínimo de VMs que o MIG pode ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring.
  • METRIC_FILTER: um filtro do Cloud Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. O filtro precisa atender aos requisitos de filtragem do autoescalador.
  • INSTANCE_ASSIGNMENT: a quantidade de trabalho a ser atribuída a cada instância de VM no MIG. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada VM ou 0.5 para atribuir meia unidade de trabalho a cada VM. O escalonador automático dimensiona o MIG para garantir que haja VMs suficientes para concluir o trabalho disponível, indicado pela métrica. Se o valor da métrica for 10 e você tiver atribuído 0.5 unidades de trabalho a cada VM, o escalonador automático provisionará 20 VMs no MIG.
  • ZONE: para MIGs zonais, a zona em que o MIG está localizado.
  • REGION: para MIGs regionais, a região em que o MIG está localizado.

Meta de uso:

Em algumas situações, convém usar metas de utilização com métricas por grupo em vez de especificar várias VMs relativas ao valor da métrica medida pelo escalonador automático. Ainda será possível apontar o escalonador automático para uma métrica por grupo, mas ele tentará manter a meta de utilização especificada. Especifique a meta e o tipo de meta com o sinalizador --stackdriver-metric-utilization-target. Você também deve especificar um filtro para a métrica usando a sinalização --stackdriver-metric-filter.

O comando a seguir cria um escalonador automático com base em uma métrica por grupo usando a sinalização --stackdriver-metric-utilization-target.

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

Substitua:

  • GROUP_NAME: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • MAX_INSTANCES: o número máximo de VMs que o MIG pode ter.
  • MIN_INSTANCES: o número mínimo de VMs que o MIG pode ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring.
  • METRIC_FILTER: um filtro do Cloud Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você deve especificar um valor resource.type, mas não pode definir gce_instance se quiser escalonar usando métricas por grupo. O filtro precisa atender aos requisitos de filtragem do autoescalador.
  • TARGET_VALUE: o valor da métrica que o escalonador automático tenta manter.
  • TARGET_TYPE: o tipo de valor da métrica. É possível configurar o escalonador automático para monitorar a métrica como um GAUGE, pelo delta-per-minute ou pelo delta-per-second do valor.
  • ZONE: para MIGs zonais, a zona em que o MIG está localizado.
  • REGION: para MIGs regionais, a região em que o MIG está localizado.

Veja uma lista de comandos e sinalizações da Google Cloud CLI disponíveis para o escalonador automático e que funcionam com o escalonamento automático por grupo na referência da Google Cloud CLI.

API

Para configurar o escalonamento automático usando métricas de monitoramento por grupo para um MIG zonal, use o comando autoscalers ou, para um MIG regional, use o comando regionAutoscalers.

Especifique como você quer que o autoescalador provisione instâncias incluindo um dos seguintes parâmetros:

  • Atribuição de instância: especifique o parâmetro singleInstanceAssignment.
  • Meta de utilização: especifique o parâmetro utilizationTarget.

Atribuição de instância:

O parâmetro singleInstanceAssignment especifica a quantidade de trabalho que você espera que cada VM processe.

Por exemplo, faça a seguinte chamada para criar um escalonador automático que escalone um MIG zonal com base na atribuição da instância de uma métrica por grupo.

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

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

Substitua:

  • PROJECT_ID: o ID do projeto
  • ZONE: a zona em que o MIG está localizado.
  • GROUP_NAME: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • MAX_INSTANCES: o número máximo de VMs que o MIG pode ter.
  • MIN_INSTANCES: o número mínimo de VMs que o MIG pode ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring.
  • METRIC_FILTER: um filtro do Cloud Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você deve especificar um valor resource.type, mas não pode definir gce_instance se quiser escalonar usando métricas por grupo. O filtro precisa atender aos requisitos de filtragem do autoescalador.
  • INSTANCE_ASSIGNMENT: a quantidade de trabalho a ser atribuída a cada instância de VM no MIG. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada VM ou 0.5 para atribuir meia unidade de trabalho a cada VM. O escalonador automático dimensiona o MIG para garantir que haja VMs suficientes para concluir o trabalho disponível, indicado pela métrica. Se o valor da métrica for 10 e você tiver atribuído 0.5 unidades de trabalho a cada VM, o escalonador automático provisionará 20 VMs no MIG.

Meta de uso:

Em algumas situações, convém usar metas de utilização com métricas por grupo em vez de especificar várias VMs relativas ao valor da métrica medida pelo escalonador automático. Ainda será possível apontar o escalonador automático para uma métrica por grupo, mas ele tentará manter a meta de utilização especificada. Especifique as metas com o parâmetro utilizationTarget. Você também deve especificar um filtro para a métrica usando o parâmetro filter.

Por exemplo, faça a chamada a seguir para criar um escalonador automático que escalone um MIG zonal com base na meta de utilização de uma métrica por grupo.

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

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

Substitua:

  • PROJECT_ID: o ID do projeto
  • ZONE: a zona em que o MIG está localizado.
  • GROUP_NAME: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • MAX_INSTANCES: o número máximo de VMs que o MIG pode ter.
  • MIN_INSTANCES: o número mínimo de VMs que o MIG pode ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring.
  • METRIC_FILTER: um filtro do Cloud Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você deve especificar um valor resource.type, mas não pode definir gce_instance se quiser escalonar usando métricas por grupo. O filtro precisa atender aos requisitos de filtragem do autoescalador.
  • TARGET_VALUE: o valor da métrica que o escalonador automático tenta manter.
  • TARGET_TYPE: o tipo de valor da métrica. É possível configurar o escalonador automático para monitorar a métrica como um GAUGE, pelo DELTA_PER_MINUTE ou pelo DELTA_PER_SECOND do valor.

Exemplo: como usar a atribuição de instância para escalonar com base em uma fila de Pub/Sub

Considere a seguinte configuração:

  • Um tópico Pub/Sub ativo recebe mensagens de alguma origem.
  • Uma assinatura Pub/Sub ativa está conectada ao tópico em uma configuração de pull. A assinatura é chamada de our-subscription.
  • Um pool de workers está extraindo mensagens dessa assinatura e processando-as. O pool é um MIG zonal chamado our-instance-group e está localizado na zona us-central1-a. O pool não pode exceder 100 workers e precisa ser dimensionado para zero workers quando não houver mensagens na fila.
  • Em média, um worker processa uma única mensagem em um minuto.

Para determinar o valor de atribuição de instância ideal, pense em várias abordagens:

  • Para processar todas as mensagens na fila o mais rápido possível, é possível escolher 1 como o valor de atribuição da instância. Isso cria uma instância de VM para cada mensagem na fila (limitada ao número máximo de VMs em nosso grupo). No entanto, isso pode causar provisionamento excessivo. Na pior das hipóteses, uma VM é criada para processar apenas uma mensagem antes que o escalonador automático a encerre, o que consome recursos por muito mais tempo do que o trabalho real.
    • Se os workers puderem processar várias mensagens ao mesmo tempo, faz sentido aumentar o valor para o número de processos simultâneos.
    • Neste exemplo, não faz sentido definir o valor abaixo de 1 porque uma mensagem não pode ser processada por mais de um worker.
  • Como alternativa, se a latência de processamento for menos importante do que a utilização de recursos e os custos indiretos, você poderá calcular quantas mensagens cada VM precisará processar dentro de sua vida útil para ser considerada eficiente. Leve em consideração o tempo de inicialização e desligamento e o fato de que o escalonamento automático não exclui VMs imediatamente. Por exemplo, supondo que o tempo de inicialização e desligamento leve cerca de 5 minutos no total e que o escalonamento automático exclua VMs somente após um período de aproximadamente 10 minutos, você calcula que é eficiente criar uma VM adicional no grupo, desde que ela consiga processar pelo menos 15 mensagens antes que o escalonador automático a desligue, o que resulta em, no máximo, 25% de sobrecarga devido ao tempo total necessário para criar, iniciar e encerrar a VM. Nesse caso, escolha 15 como o valor de atribuição da instância.
  • Ambas as abordagens podem ser equilibradas, resultando em um número entre 1 e 15, dependendo de qual fator tem prioridade, latência de processamento ou utilização de recursos.

Analisando as métricas de Pub/Sub disponíveis, encontramos uma métrica que representa o tamanho da fila de assinaturas:subscription/num_undelivered_messages.

Observe que essa métrica exporta o número total de mensagens na fila, incluindo mensagens que estão sendo processadas no momento, mas que ainda não foram confirmadas. Não é recomendado usar uma métrica que não inclua as mensagens que estão sendo processadas porque essa métrica pode cair para zero quando o trabalho ainda estiver sendo realizado, o que inicia o escalonamento automático para escalonar e possivelmente interromper o trabalho real.

Agora é possível configurar o escalonamento automático para a fila:

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

Exemplo: como usar uma meta de utilização para escalonamento com base na latência média

Pode haver uma situação em que a métrica que fornece um sinal relevante não representa uma quantidade total de trabalho disponível ou outro recurso aplicável ao grupo, como no exemplo anterior, mas sim uma média, um percentil ou alguma outra propriedade estatística. Para esse exemplo, suponha que você pretende escalonar com base na latência de processamento média do grupo.

Suponha a seguinte configuração:

  • Um MIG chamado our-instance-group é atribuído para executar uma tarefa específica. O grupo está localizado na zona us-central1-a.
  • Você tem uma métrica personalizada do Cloud Monitoring que exporta um valor que você quiser manter em determinado nível. Para este exemplo, suponha que a métrica represente a latência média das consultas de processamento atribuídas ao grupo.
    • A métrica personalizada tem o nome:custom.googleapis.com/example_average_latency.
    • A métrica personalizada tem um rótulo com uma chave chamada group_name e um valor igual ao nome do MIG, our-instance-group.
    • A métrica personalizada exporta dados para o recurso monitorado global, ou seja, não está associada a nenhuma VM específica.

Você determinou que, quando o valor da métrica estiver acima de algum valor específico, será necessário adicionar mais VMs ao grupo para processar a carga, já quando ele ficar abaixo desse valor, você poderá liberar alguns recursos. O escalonamento automático adiciona ou remove gradualmente as VMs a uma velocidade proporcional ao valor da métrica que está acima ou abaixo da meta. Para este exemplo, suponha que o valor calculado da meta seja 100.

Agora é possível configurar o escalonamento automático para o grupo usando a meta de uso por grupo 100, que representa o valor da métrica que o autoescalador precisa tentar manter:

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

A seguir