Escalonamento com base nas métricas do Cloud Monitoring

Neste documento, descrevemos como escalonar um grupo de instâncias gerenciadas (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 (Beta), em que o grupo é escalonado com base em uma métrica que fornece um valor relacionado a todo o grupo de instâncias gerenciadas.

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

Limitações

  • Não é possível fazer o escalonamento automático com as métricas com base em registros do Cloud Monitoring.

  • Os grupos de instâncias regionais gerenciadas não são compatíveis com a filtragem de métricas por instância.

  • Os grupos de instâncias gerenciadas regionais não são compatíveis com o escalonamento automático usando métricas por grupo.

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.

Observação: é possível conseguir o ID numérico de uma instância de VM fazendo uma solicitação para a propriedade de ID do servidor de metadados na VM. Por exemplo, faça isso em curl:
curl http://metadata.google.internal/computeMetadata/v1/instance/id -H Metadata-Flavor:Google
Para mais informações sobre como usar o servidor de metadados, consulte Armazenamento e recuperação de metadados de instância.

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

As instruções para configurar o escalonamento automático são diferentes para MIGs regionais e de zona única. Os MIGs regionais não são compatíveis com a filtragem de métricas por instância.

Para configurar o escalonamento automático para um MIG regional (várias zonas):

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

    Acessar a página "Grupos de instâncias"

  2. Se você não tiver um grupo de instâncias gerenciadas, crie um. Caso contrário, clique no nome de um MIG regional na lista para abrir a página de detalhes do grupo de instâncias.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Escalonar automaticamente para ativá-lo.
  5. Na seção Métricas de escalonamento automático, selecione Métrica do Stackdriver Monitoring.
  6. Na seção Escopo de exportação da métrica, selecione Série temporal por instância para configurar o escalonamento automático usando métricas por grupo.
  7. Na seção Métrica do Stackdriver Monitoring, insira o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.
  8. Na seção Meta, especifique o valor.
  9. Na seção Tipo de meta, especifique o tipo de meta que corresponde à granularidade de medida da métrica.
  10. Salve suas alterações quando estiver pronto.

Para configurar o escalonamento automático para um MIG de zona única:

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

    Acessar a página "Grupos de instâncias"

  2. Se você não tiver um grupo de instâncias gerenciadas, crie um. Caso contrário, clique no nome de um grupo de instâncias para abrir a página de detalhes. Todas as instâncias no grupo de instâncias precisam estar em uma única zona.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Escalonar automaticamente para ativá-lo.
  5. Na seção Métricas de escalonamento automático, selecione Métrica do Stackdriver Monitoring.
  6. 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.
  7. Na seção Identificador de métrica, digite o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.
  8. Na seção Expressão de filtro extra, insira opcionalmente um filtro para usar valores individuais de métricas com vários fluxos ou rótulos. Consulte Como filtrar métricas por instância para mais informações.
  9. Na seção Meta de utilização, especifique o valor de meta.
  10. Na seção Tipo de meta de utilização, verifique se o tipo de meta corresponde ao tipo de medida da métrica.
  11. Salve suas alterações quando estiver pronto.

gcloud

Por exemplo, na ferramenta de linha de comando gcloud, o comando a seguir cria um autoescalador que usa o tipo de meta GAUGE. Usando o parâmetro --custom-metric-utilization, também é necessário o parâmetro --max-num-replicas para criar um autoescalador:

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

Outra opção é usar a sinalização --cool-down-period, que informa ao escalonador automático quantos segundos esperar após uma nova VM ser iniciada antes de começar a coletar informações de uso dela. Esse processo determina a quantidade de tempo que a VM pode levar para inicializar, período em que o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é 60 segundos.

Para ver uma lista completa de comandos e sinalizações disponíveis para a ferramenta gcloud, consulte a referência gcloud.

API

Observação: o escalonamento automático é um recurso de grupos de instâncias gerenciadas, mas ele é um recurso de API separado. Lembre-se disso quando criar solicitações de API para o escalonamento automático.

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.

Outra opção é usar o parâmetro coolDownPeriodSec, que informa ao escalonador automático quantos segundos esperar após uma nova VM ser iniciada antes de começar a coletar dados de uso. Após o período de espera, o escalonador automático começa a coletar informações de uso da nova VM e determina se o MIG precisa de VMs adicionais. Esse processo determina o tempo que a VM pode levar para inicializar, em que os dados de uso coletados não são confiáveis para o escalonamento automático. 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 (Beta)

É possível aplicar filtros a métricas do Cloud Monitoring por instância, o que permite escalonar MIGs de zona única 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 =.
  • Não é possível usar caracteres curinga.
  • Não defina os seletores resource.type ou resource.label.*. 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 escalonadores automáticos para filtrar métricas

Use o Console do Google Cloud, a ferramenta de linha de comando gcloud (Beta) ou a API Beta do Compute Engine para adicionar filtros de métrica para escalonamento automático de um MIG de zona única.

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.

    Acessar a página "Grupos de instâncias"

  2. Se você não tiver um MIG, crie um. Caso contrário, clique no nome de um MIG de zona única para abrir a página de detalhes do grupo de instâncias.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Escalonar automaticamente para ativá-lo.
  5. Na seção Escalonamento automático com base em, selecione Métricas do Stackdriver Monitoring.
  6. 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.
  7. Na seção do Identificador da métrica, insira o nome da métrica. Por exemplo, compute.googleapis.com/instance/network/received_bytes_count.
  8. Na seção Expressão de filtro extra, insira um filtro. Por exemplo, 'metric.label.loadbalanced = true'.
  9. Salve as alterações quando estiver tudo 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.label.loadbalanced = true': Inclua os sinalizadores de meta de utilização e tipo de meta individualmente.

gcloud beta compute instance-groups managed set-autoscaling example-managed-instance-group \
    --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
    --stackdriver-metric-utilization-target-utilization-target=10 \
    --stackdriver-metric-utilization-target-type=DELTA_PER_SEC \
    --stackdriver-metric-filter='metric.label.loadbalanced = true' \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-west1

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

Para ver uma lista comandos e sinalizações gcloud disponíveis, consulte a referência de ferramenta gcloud (beta).

API

Observação: o escalonamento automático é um recurso de grupos de instâncias gerenciadas, mas ele é um recurso de API separado. Lembre-se disso quando criar solicitações de API para o escalonamento automático.

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.label.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/beta/projects/myproject/zones/us-central1-f/autoscalers

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

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 (Beta)

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.
  • Não é possível usar caracteres curinga.
  • É 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 ferramenta de linha de comando gcloud (Beta) ou a API do Compute Engine (Beta) para configurar o escalonamento automático com métricas por grupo para um MIG de zona única.

Console

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

    Acessar a página "Grupos de instâncias"

  2. Se você não tiver um grupo de instâncias gerenciadas, crie um. Caso contrário, clique no nome de um MIG de zona única para abrir a página de detalhes do grupo de instâncias.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Escalonar automaticamente para ativá-lo.
  5. Na seção Escalonamento automático com base em, selecione Métricas do Stackdriver Monitoring.
  6. Na seção Escopo de exportação da métrica, selecione Única série temporal por grupo.
  7. Na seção Identificador de métrica, especifique o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.
  8. Especifique o Tipo de recurso de métrica.
  9. Insira uma expressão de filtro extra para usar valores individuais de métricas que tenham vários streams ou rótulos. O filtro precisa atender aos requisitos de filtragem do autoescalador.
  10. Na seção Política de escalonamento, selecione Atribuição de instância 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.
  11. Salve suas alterações quando estiver pronto.

gcloud

Crie um escalonador automático para um MIG de maneira semelhante ao escalonador automático por instância, mas especifique a sinalização --update-stackdriver-metric. Para especificar como quer que o autoescalador provisione instâncias, inclua uma das seguintes sinalizações:

  • 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.

gcloud beta compute instance-groups managed set-autoscaling group-name \
    --zone=zone \
    --max-num-replicas=max-instances \
    --min-num-replicas=min-instances \
    --update-stackdriver-metric='metric-url' \
    --stackdriver-metric-filter='metric-filter' \
    --stackdriver-metric-single-instance-assignment=instance-assignment

Replace the following:

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

**Utilization target:**

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

 
gcloud beta compute instance-groups managed set-autoscaling group-name \
       --zone=zone \
       --max-num-replicas=max-instances \
       --min-num-replicas=min-instances \
       --update-stackdriver-metric='metric-url' \
       --stackdriver-metric-filter='metric-filter' \
       --stackdriver-metric-utilization-target=target-value \
       --stackdriver-metric-utilization-target-type=target-type

Replace the following:

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

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

API

Observação: o escalonamento automático é um recurso de grupos de instâncias gerenciadas, mas os autoescaladores são um recurso de API separado. Lembre-se disso quando criar solicitações de API para o escalonamento automático.

Crie um escalonador automático para um MIG. Especifique como quer que o escalonador automático forneça 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:

Na API, crie uma solicitação POST para criar um autoescalador. No corpo da solicitação, inclua os parâmetros normais que você usaria para criar um autoescalador por instância, mas defina o parâmetro single-instance-assignment. O parâmetro single-instance-assignment especifica a quantidade de trabalho que você espera que cada VM processe.

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

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

Substitua:

  • project-id: o ID do projeto
  • group-name: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • zone: a zona em que o MIG está localizado. Não é possível especificar uma região para autoescaladores em métricas por grupo.
  • max-instances: o limite no número de VMs que o escalonador automático pode adicionar ao MIG.
  • min-instances: o limite mínimo de VMs que o escalonador automático pode ter no MIG.
  • 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 autoescalador 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.

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
        }
      ],
     }
    }

Substitua:

  • project-id: o ID do projeto
  • group-name: o nome do MIG ao qual você quer adicionar um escalonador automático.
  • zone: a zona em que o MIG está localizado. Não é possível especificar uma região para autoescaladores em métricas por grupo.
  • max-instances: o limite no número de VMs que o escalonador automático pode adicionar ao MIG.
  • min-instances: o limite mínimo de VMs que o escalonador automático pode ter no MIG.
  • 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 de zona única 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 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

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 escalonador automático precisa tentar manter:

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