Escalone com base nas métricas do Monitoring


O escalonamento automático baseado em métricas do Cloud Monitoring permite ajustar a capacidade necessária de acordo com as medições do aplicativo. Quando você escalona automaticamente um MIG com base em uma métrica, o escalonador automático cria VMs quando o valor da métrica aumenta e exclui VMs quando o valor diminui.

Por exemplo, é possível definir quantas VMs são necessárias por contagem de usuários, latência ou o número de mensagens em uma assinatura do Pub/Sub. É possível usar as métricas integradas fornecidas pelo serviço do Monitoring ou as métricas personalizadas exportadas do aplicativo.

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

Também é possível fazer o escalonamento automático de um MIG com base na utilização da CPU, na capacidade de disponibilização do balanceamento de carga ou nas programações.

Antes de começar

  • Leia sobre os fundamentos do escalonador automático.
  • Leia sobre os conceitos de métricas do Monitoring usados em uma configuração de escalonamento automático.
  • Se você quiser fazer o escalonamento automático com base em uma métrica do agente de operações, instale o agente de operações.
  • Configure a autenticação, caso ainda não tenha feito isso. A autenticação é o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud. Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-se no Compute Engine da seguinte maneira.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. REST

      Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

      Para mais informações, consulte Autenticar para usar REST na documentação de autenticação do Google Cloud.

Limitações

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

  • É possível configurar o escalonamento automático com base em até cinco métricas do Monitoring por MIG.
  • É possível fazer escalonamento automático com base em métricas que têm apenas os tipos de valor INT64 ou DOUBLE. Outros tipos de valor não são compatíveis.
  • Não é possível configurar a mesma métrica mais de uma vez em uma política de escalonamento automático.

Configurar o escalonamento automático com base em métricas do Monitoring

É possível usar um valor de métrica do Monitoring para escalonamento automático de duas maneiras diferentes:

  • Meta de utilização: se você quiser que o escalonador automático mantenha uma métrica com um valor específico, configure uma meta de utilização. O escalonador automático cria VMs quando o valor da métrica está acima da meta e exclui as VMs quando o valor da métrica está abaixo da meta. Isso é útil para métricas como tráfego de rede, uso de memória/disco ou latência média do aplicativo. 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.

    Adição e remoção do escalonador automático de VMs para manter uma meta de utilização.

  • Atribuição de instância única: se você quiser escalonar automaticamente com base no quanto de trabalho disponível para atribuir a cada VM, configure uma atribuição de instância única. A atribuição de instância única que você especifica representa o quanto de trabalho você espera que cada VM processe. O escalonador automático divide o valor da métrica pelo valor de atribuição de instância única para calcular a quantidade de VMs necessárias. Por exemplo, se a métrica for igual a 100 e a atribuição de instância única for 5, o escalonador automático criará 20 VMs no MIG. Isso é útil para métricas que refletem a quantidade de trabalho, como a duração da fila do Pub/Sub ou a contagem de jobs em lote. A atribuição de instância única não se aplica às métricas provenientes de cada VM. O diagrama a seguir mostra a relação proporcional entre o valor da métrica e o número de VMs ao escalonar com a atribuição de instância única.

    Relação proporcional entre o valor da métrica e o número de instâncias.

Escalonamento automático para manter uma métrica em um valor desejado

Quando você quiser manter uma métrica com um valor de segmentação, especifique uma meta de utilização. O escalonador automático cria VMs quando o valor da métrica está acima da meta e as exclui quando o valor da métrica está abaixo da meta.

  • Se a métrica vier de cada VM no seu MIG, o escalonador automático usará o valor médio da métrica em todas as VMs no MIG e a comparará com a meta de utilização. Por exemplo, se você quiser escalonar automaticamente usando a tcp_connections métrica que fornece o número de conexões TCP em uma VM, o escalonador automático considera um número médio de Conexões TCP em todas as VMs no MIG para comparar com a meta. Quando você usa métricas originadas de uma VM, o MIG não pode ser escalonado para 0 porque o escalonador automático requer pelo menos uma VM para publicar um valor de métrica.

  • Se a métrica se aplicar a todo o MIG e não vir das VMs no MIG, o escalonador automático comparará o valor da métrica com a meta de utilização. Por exemplo, você pode usar uma métrica personalizada que mede a latência do seu aplicativo.

Quando a métrica tiver vários valores, aplique um filtro para fazer o escalonamento automático usando um valor individual da métrica. Para mais detalhes sobre filtros de métricas e outros campos que podem ser usados na configuração, consulte Conceitos de métricas do Monitoring.

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 do grupo de instâncias.

  3. Clique em Editar.

  4. Se não houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, se houver um indicador para uma métrica do Cloud Monitoring, clique para editá-lo ou clique em Adicionar um indicador para adicionar um novo indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. No painel Recurso e métrica que é aberto, faça o seguinte:

    1. Clique em Selecionar uma métrica.
      1. Selecione a métrica que você quer usar para o escalonamento automático. É possível filtrar as métricas com base em qualquer palavra-chave, por exemplo, memória, bytes, disco.
      2. Clique em Aplicar. O painel exibe um gráfico que mostra os dados da métrica selecionada.
    2. Para usar dados específicos da métrica, adicione um filtro com base nos rótulos da seguinte maneira:

      1. Na seção Filtros, clique em Adicionar um filtro.
      2. Selecione um Rótulo e insira um Valor.
      3. Clique em Concluído. O gráfico é atualizado para mostrar o valor filtrado da métrica.
    3. Para ver o valor agregado da métrica que será usada para escalonar automaticamente seu MIG, alterne o botão Mostrar agregação no gráfico. O gráfico é atualizado para mostrar o valor agregado.

    4. Na seção Opções de meta de métrica para escalonamento automático, selecione Meta de utilização.

    5. Preencha o seguinte:

      1. Meta de utilização: especifique o valor que o escalonador automático precisa manter. Precisa ser um número positivo. Por exemplo, 24,5 e 100 são valores aceitáveis.
      2. Tipo de meta de utilização: selecione um tipo de meta que corresponda ao tipo de medida da métrica. Para comparações precisas, se a meta de utilização for medida por segundos, use Delta / segundo como o tipo de meta. Da mesma forma, use Delta / minuto para uma meta de utilização medida por minutos.
        • Medidor: o escalonador automático calcula o valor médio dos dados coletados nos últimos minutos e os compara com a meta de utilização.
        • Delta / minuto: o escalonador automático calcula a taxa média de crescimento por minuto e a compara com a meta de utilização.
        • Delta / segundo: o escalonador automático calcula a taxa média de crescimento por segundo e a compara com a meta de utilização.
    6. Quando terminar de configurar a métrica, clique em Selecionar.

  8. Revise os detalhes da métrica e clique em Concluído.

  9. Para concluir a configuração, clique em Salvar.

gcloud

Para configurar o escalonamento automático com base nas métricas do Monitoring, use o comando set-autoscaling.

Use o comando a seguir para fazer o escalonamento automático com base em uma métrica do Monitoring com uma meta de utilização.

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=METRIC_URL \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

Se sua métrica tiver vários valores e você quiser usar um valor individual para escalonamento automático, use a sinalização --stackdriver-metric-filter conforme fornecido no comando a seguir.

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=METRIC_URL \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE \
  --stackdriver-metric-filter="METRIC_FILTER"

Substitua:

  • MIG_NAME: o MIG a que 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 precisa ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring. Por exemplo, compute.googleapis.com/instance/uptime. A métrica personalizada precisa atender aos requisitos da métrica personalizada.
  • TARGET_VALUE: o valor da métrica que o escalonador automático tenta manter.
  • TARGET_TYPE: o tipo de valor da métrica.
    • gauge: o escalonador automático calcula o valor médio dos dados coletados nos últimos minutos e o compara com a meta de utilização.
    • delta-per-minute, o escalonador automático calcula a taxa média de crescimento por minuto e a compara com a meta de utilização.
    • 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. Da mesma forma, use delta-per-minute para uma meta de utilização em minutos.
  • METRIC_FILTER: aplica um filtro para usar um valor individual de uma métrica com vários valores e especificar o tipo de recurso monitorado. Se você usar uma métrica de cada VM, não precisará especificar o tipo de recurso monitorado porque gce_instance é usado como padrão. Para outras métricas, use resource.type na expressão de filtro para especificar o recurso monitorado. Para saber mais sobre o filtro de métricas, consulte Como monitorar conceitos de métricas.

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

REST

Para configurar o escalonamento automático com base nas métricas do Monitoring de um MIG zonal, use oautoscalers ou, para um MIG regional, use o recurso regionAutoscalers.

Faça a seguinte chamada para escalonar automaticamente um MIG zonal com base em uma métrica do Monitoring com uma meta de utilização.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "utilizationTarget": TARGET_VALUE,
      "utilizationTargetType": TARGET_TYPE
    }
  ],
 }
}

Se a métrica tiver vários valores e você quiser usar um valor individual para escalonamento automático, use o parâmetro filter conforme fornecido na chamada de API a seguir.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_NAME",
 "autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "metric": "METRIC_URL",
      "utilizationTarget": TARGET_VALUE,
      "utilizationTargetType": TARGET_TYPE,
      "filter": "METRIC_FILTER"
    }
  ],
 }
}

Substitua:

  • PROJECT_ID: o ID do projeto.
  • ZONE: a zona em que o MIG está localizado.
  • AUTOSCALER_NAME: o nome do escalonador automático.
  • MIG_NAME: o MIG a que 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 precisa ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring. Por exemplo, compute.googleapis.com/instance/uptime. A métrica personalizada precisa atender aos requisitos da métrica personalizada.
  • TARGET_VALUE: o valor da métrica que o escalonador automático tenta manter.
  • TARGET_TYPE: o tipo de valor da métrica.
    • GAUGE: o escalonador automático calcula o valor médio dos dados coletados nos últimos minutos e o compara com a meta de utilização.
    • DELTA_PER_MINUTE O escalonador automático calcula a taxa média de crescimento por minuto e a compara com a meta de utilização.
    • DELTA_PER_SECOND O escalonador automático calcula a taxa média de crescimento por segundo e a compara com a meta de utilização. Para comparações precisas, se você definir a meta de utilização em segundos, use DELTA_PER_SECOND como o tipo de meta. Da mesma forma, use DELTA_PER_MINUTE para uma meta de utilização em minutos.
  • METRIC_FILTER: aplica um filtro para usar um valor individual de uma métrica com vários valores e especificar o tipo de recurso monitorado. Se você usar uma métrica de cada VM, não precisará especificar o tipo de recurso monitorado porque gce_instance é usado como padrão. Para outras métricas, é preciso especificar o recurso monitorado usando o seletor resource.type. Para saber mais sobre o filtro de métricas, consulte Como monitorar conceitos de métricas.

Escalonamento automático com base no trabalho disponível para cada VM em um MIG

Quando quiser fazer o escalonamento automático com base na quantidade de trabalho disponível para cada VM em um MIG, especifique uma única atribuição de instância. O valor da atribuição de instância única que você define indica o quanto de trabalho você espera que cada VM processe. O escalonador automático divide o valor da métrica pelo valor de atribuição de instância única para calcular a quantidade de VMs necessárias.

Um valor de métrica de 0 indica que não há trabalho para o seu MIG concluir. Se o número mínimo de instâncias do MIG for definido como 0 e o valor da métrica cair para 0, o MIG será escalonado para 0 até que o valor da métrica aumente.

Quando a métrica tiver vários valores, aplique um filtro para fazer o escalonamento automático usando um valor individual da métrica. Para mais detalhes sobre filtros de métricas e outros campos que podem ser usados na configuração, consulte Conceitos de métricas do Monitoring.

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 do grupo de instâncias.

  3. Clique em Editar.

  4. Se não houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, se houver um indicador para uma métrica do Monitoring, você poderá clicar nele para editá-lo ou em Adicione um indicador para incluir uma nova métrica.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. No painel Recurso e métrica que é aberto, faça o seguinte:

    1. Clique em Selecionar uma métrica.
      1. Selecione a métrica que você quer usar para o escalonamento automático. É possível filtrar as métricas com base em qualquer palavra-chave, por exemplo, memória, bytes, disco.
      2. Clique em Aplicar. O painel exibe um gráfico que mostra os dados da métrica selecionada.
    2. Para usar dados específicos da métrica, adicione um filtro com base nos rótulos da seguinte maneira:

      1. Na seção Filtros, clique em Adicionar um filtro.
      2. Selecione um Rótulo e insira um Valor.
      3. Clique em Concluído. O gráfico é atualizado para mostrar o valor da métrica filtrada.
    3. Para ver o valor agregado da métrica que será usada para escalonar automaticamente seu MIG, alterne o botão Mostrar agregação no gráfico. O gráfico é atualizado para mostrar o valor agregado.

    4. Na seção Opções de destino de métrica para escalonamento automático, selecione Atribuição de instância de VM única.

    5. Forneça um valor de Atribuição de instância única que represente a quantidade de trabalho a ser atribuída a cada VM no MIG.

    6. Quando terminar de configurar a métrica, clique em Selecionar.

  8. Revise os detalhes da métrica e clique em Concluído.

  9. Para concluir a configuração, clique em Salvar.

gcloud

Para configurar o escalonamento automático com base nas métricas do Monitoring, use o comando set-autoscaling.

No comando, especifique a sinalização --stackdriver-metric-single-instance-assignment para indicar a quantidade de trabalho que você espera que cada VM no grupo processe.

O comando a seguir cria um escalonador automático com base na atribuição de trabalho de cada VM.

gcloud compute instance-groups managed set-autoscaling MIG_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

Substitua:

  • MIG_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 precisa ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring. Por exemplo, compute.googleapis.com/instance_group/size. A métrica personalizada precisa atender aos requisitos da métrica personalizada.
  • METRIC_FILTER: aplica um filtro para usar um valor individual de uma métrica com vários valores e especificar o tipo de recurso monitorado. Para saber mais sobre o filtro de métricas, consulte Conceitos de métricas do Monitoring.
  • INSTANCE_ASSIGNMENT: a quantidade de trabalho a ser atribuída a cada instância de VM no MIG.

REST

Para configurar o escalonamento automático com base nas métricas do Monitoring de um MIG zonal, use oautoscalers ou, para um MIG regional, use o recurso regionAutoscalers.

Use o parâmetro singleInstanceAssignment para especificar 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 dimensiona um MIG zonal com base na atribuição da instância.

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

{
 "name": "AUTOSCALER_NAME",
 "target": "zones/ZONE/instanceGroupManagers/MIG_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.
  • AUTOSCALER_NAME: o nome do escalonador automático.
  • MIG_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 precisa ter.
  • METRIC_URL: um URL sem protocolo de uma métrica do Monitoring. Por exemplo, compute.googleapis.com/instance_group/size. A métrica personalizada precisa atender aos requisitos da métrica personalizada.
  • METRIC_FILTER: aplica um filtro para usar um valor individual de uma métrica com vários valores e especificar o tipo de recurso monitorado. Para saber mais sobre o filtro de métricas, consulte Conceitos de métricas do Monitoring.
  • INSTANCE_ASSIGNMENT: a quantidade de trabalho a ser atribuída a cada instância de VM no MIG.

Exemplos de escalonamento automático com base em métricas

Nesta seção, mostramos alguns exemplos de métricas usadas para escalonamento automático. Para uma lista completa de métricas, consulte Métricas do Google Cloud.

Escalonamento automático com base em uma métrica personalizada

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

Suponha a seguinte configuração:

  • Um MIG zonal 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 de 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. Você quer que o escalonador automático adicione ou remova VMs gradualmente a uma taxa proporcional ao valor da métrica acima ou abaixo da meta. Neste exemplo, suponha que você tenha determinado que o valor de segmentação como 250 delta/sec.

É possível configurar o escalonamento automático para o grupo usando uma meta de utilização de 250, que representa a taxa de alteração do valor da métrica que o escalonador automático tentará manter:

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu MIG na lista para abrir a página de visão geral do grupo de instâncias.

  3. Clique em Editar.

  4. Se não houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. O painel Recurso e métrica é aberto.

    1. Clique em Selecionar uma métrica.
      1. Escolha sua métrica em Global > Métricas personalizadas.
      2. Clique em Aplicar.
    2. Na seção Destino, faça o seguinte:
      1. Clique em Adicionar um filtro.
      2. No menu suspenso Rótulo, selecione group_name.
      3. No campo Valor, informe our-instance-group.
      4. Clique em Concluído. O gráfico é atualizado para mostrar o valor filtrado da métrica.
    3. Na seção Opções de meta de métrica para escalonamento automático, faça o seguinte:
      1. Selecione Meta de utilização.
      2. Insira o valor da meta de utilização como 250.
      3. Defina o tipo de meta de utilização como Delta / segundo.
    4. Depois de configurar a métrica, clique em Selecionar.
  8. Revise os detalhes da métrica e clique em Concluído.

  9. Quando terminar, clique em Salvar.

gcloud

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

REST

POST https://compute.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/autoscalers
{
"name": "our-instance-group-autoscaler",
"target": "https://www.googleapis.com/compute/v1/projects/my-project/zones/us-central1-a/instanceGroupManagers/our-instance-group",
"autoscalingPolicy": {
  "maxNumReplicas": 50,
  "minNumReplicas": 0,
  "customMetricUtilizations": [
    {
      "filter": "metric.labels.group_name=\"our-instance-group\" AND resource.type = \"global\"",
      "utilizationTargetType": "delta-per-second",
      "utilizationTarget": 250.0,
      "metric": "custom.googleapis.com/example_average_latency"
    }
  ]
}
}

Escalonamento automático com base em mensagens não reconhecidas no Pub/Sub

Para configurar o escalonamento automático com base em mensagens não reconhecidas em uma assinatura do Pub/Sub, use a métrica subscription/num_undelivered_messages fornecida por pubsub e filtre por subscription ID.

A métrica subscription/num_undelivered_messages exporta o número total de mensagens na assinatura, incluindo as que estão sendo processadas, 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.

Se você não tiver uma assinatura, crie uma assinatura pull, push ou BigQuery antes de configurar o escalonamento automático.

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu MIG na lista para abrir a página de visão geral do grupo de instâncias.

  3. Clique em Editar.

  4. Se não houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Fila do Cloud Pub/Sub.

  7. Selecionar um tópico. Se quiser um novo tópico, clique em Criar um tópico para fazer isso.

  8. Selecione a Assinatura em que você quer escalonar automaticamente seu MIG. Se quiser uma assinatura nova, clique em Criar uma assinatura para criar uma.

  9. No campo Número de mensagens a serem atribuídas a cada VM, especifique o número de mensagens não reconhecidas que você espera que cada VM processe.

  10. Clique em Concluído.

  11. Quando terminar, clique em Salvar.

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=pubsub.googleapis.com/subscription/num_undelivered_messages \
  --stackdriver-metric-filter="resource.type=\"pubsub_subscription\" AND resource.labels.subscription_id=\"SUBSCRIPTION_ID\"" \
  --stackdriver-metric-single-instance-assignment=NUMBER_OF_MESSAGES_TO_ASSIGN_TO_EACH_VM

REST

Para configurar o escalonamento automático de um MIG zonal, use o recurso autoscalers ou, para um MIG regional, use o regionAutoscalers.

Por exemplo, faça a seguinte chamada para criar um escalonador automático para um MIG zonal.

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "singleInstanceAssignment": NUMBER_OF_MESSAGES_TO_ASSIGN_TO_EACH_VM,
      "filter": "resource.type = \"pubsub_subscription\" AND resource.labels.subscription_id=\"SUBSCRIPTION_ID\"",
      "metric": "pubsub.googleapis.com/subscription/num_undelivered_messages"
    }
  ]
}
}

Escalonamento automático com base no tráfego de rede de entrada

Para configurar o escalonamento automático com base no tráfego de rede de entrada para VMs no seu MIG, use a métrica instance/network/received_bytes_count fornecida por compute.

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu MIG na lista para abrir a página de visão geral do grupo de instâncias.

  3. Clique em Editar.

  4. Se não houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. O painel Recurso e métrica é aberto.

    1. Clique em Selecionar uma métrica.
      1. Selecione Instância de VM > Instância > Bytes recebidos (compute.googleapis.com/instance/network/received_bytes_count).
      2. Clique em Aplicar.
    2. Na seção Opções de meta de métrica para escalonamento automático, faça o seguinte:
      1. Verifique se Meta de utilização está selecionada.
      2. Insira um valor de meta de utilização.
      3. Defina um tipo de meta de utilização.
    3. Depois de configurar a métrica, clique em Selecionar.
  8. Revise os detalhes da métrica e clique em Concluído.

  9. Quando terminar, clique em Salvar.

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=compute.googleapis.com/instance/network/received_bytes_count \
  --stackdriver-metric-utilization-target=TARGET_VALUE \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
    {
      "utilizationTargetType": "TARGET_TYPE",
      "utilizationTarget": TARGET_VALUE,
      "metric": "compute.googleapis.com/instance/network/received_bytes_count"
    }
  ]
}
}

Escalonamento automático com base no uso da memória

Para configurar o escalonamento automático com base na porcentagem de memória usada, especifique a métrica percent_used fornecida pelas métricas do Agente de operações de memória. Filtre a métrica por state para usar apenas o estado da memória used. Se você não especificar o filtro, o escalonador automático usará a soma da utilização de memória por todos os estados de memória rotulados como buffered, cached, free, slab e used.

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu 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 houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. O painel Recurso e métrica é aberto.

    1. Clique em Selecionar uma métrica.
      1. Selecione Instância de VM > Memória > Uso da memória (compute.googleapis.com/instance/memory/percent_used).
      2. Clique em Aplicar.
    2. Na seção Destino, faça o seguinte:
      1. Clique em Adicionar um filtro.
      2. No menu suspenso Rótulo, escolha o rótulo da métrica estado.
      3. No campo Valor, digite used.
      4. Clique em Concluído.
    3. Na seção Opções de meta de métrica para escalonamento automático, faça o seguinte:
      1. Verifique se Meta de utilização está selecionada.
      2. Insira um valor de meta de utilização.
      3. Defina o tipo de meta de utilização como Medidor.
    4. Depois de configurar a métrica, clique em Selecionar.
  8. Revise os detalhes da métrica e clique em Concluído.

  9. Quando terminar, clique em Salvar.

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=agent.googleapis.com/memory/percent_used \
  --stackdriver-metric-filter="metric.labels.state = \"used\""
  --stackdriver-metric-utilization-target-type=gauge \
  --stackdriver-metric-utilization-target=TARGET_VALUE  \

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "filter": "metric.labels.state=\"used\"",
    "utilizationTargetType": "GAUGE",
    "utilizationTarget": TARGET_VALUE,
    "metric": "agent.googleapis.com/memory/percent_used"
  }
  ]
}
}

Escalonamento automático com base na E/S de disco

Para configurar o escalonamento automático com base no total de operações de E/S do disco, use a métrica operation_count fornecida pelas métricas do Agente de operações de disco. Se você quiser escalonar com base nas operações de leitura ou gravação, filtre a métrica usando o rótulo direction. Da mesma forma, para escalonar com base nas operações de disco em um dispositivo específico, use o rótulo device no filtro de métrica.

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu 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 houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. O painel Recurso e métrica é aberto.

    1. Clique em Selecionar uma métrica.
      1. Selecione Instância de VM > Disco > Operações de disco (agent.googleapis.com/disk/operation_count).
      2. Clique em Aplicar.
    2. Na seção Opções de meta de métrica para escalonamento automático, faça o seguinte:
      1. Verifique se Meta de utilização está selecionada.
      2. Insira um valor de meta de utilização.
      3. Defina um tipo de meta de utilização.
    3. Depois de configurar a métrica, clique em Selecionar.
  8. Revise os detalhes da métrica e clique em Concluído.

  9. Quando terminar, clique em Salvar.

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_NAME \
  --max-num-replicas=MAX_INSTANCES  \
  --min-num-replicas=MIN_INSTANCES  \
  --update-stackdriver-metric=agent.googleapis.com/disk/operation_count \
  --stackdriver-metric-utilization-target=TARGET_VALUE  \
  --stackdriver-metric-utilization-target-type=TARGET_TYPE

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_NAME",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "utilizationTargetType": "TARGET_TYPE",
    "utilizationTarget": TARGET_VALUE,
    "metric": "agent.googleapis.com/disk/operation_count"
  }
  ]
}
}

Escalonamento automático com base no tamanho de outro MIG

É possível fazer o escalonamento automático de um MIG com base no tamanho de outro no mesmo projeto. Por exemplo, é possível ter um aplicativo de várias camadas com um MIG de front-end que faz o escalonamento automático com base em um balanceador de carga e um MIG de back-end que faz o escalonamento automático de maneira proporcional para o front-end. Use uma única atribuição de instância para definir quantas VMs de back-end são necessárias para cada VM de front-end. Se você precisar de uma VM de back-end para cada quatro VMs de front-end, defina a atribuição de instância única como 4 no MIG de back-end.

Para escalonar automaticamente um MIG (MIG_1) com base no tamanho de outro MIG (MIG_2), use ainstance_group/size métrica fornecida por compute.

Console

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

    Acesse grupo de instâncias

  2. Clique no nome do seu 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 houver configuração de escalonamento automático, faça o seguinte:

    1. Em Escalonamento automático, clique em Configurar escalonamento automático.
    2. Em Modo de escalonamento automático, selecione Ativado: adicionar e remover instâncias do grupo para ativar o escalonamento automático.
  5. Em Escalonamento automático, na seção Indicadores de escalonamento automático, clique em Adicionar um indicador.

  6. Defina o Tipo de sinal como Métrica do Cloud Monitoring.

  7. Clique em Configurar. O painel Recurso e métrica é aberto.

    1. Clique em Selecionar uma métrica.
      1. Selecione Grupo de instâncias > Compute_group > Tamanho do grupo de instâncias (compute.googleapis.com/instance_group/size).
      2. Clique em Aplicar.
    2. Na seção Destino, faça o seguinte:
      1. Clique em Adicionar um filtro.
      2. No menu suspenso Rótulo, escolha o rótulo de recurso instance_group_name.
      3. No campo Valor, digite o nome do MIG (MIG_2) com base no qual você quer fazer o escalonamento automático.
      4. Clique em Concluído.
    3. Na seção Opções de meta de métrica para escalonamento automático, faça o seguinte:
      1. Selecione Atribuição de instância de VM única.
      2. No campo "Atribuição de instância de VM única", insira 4 se você quiser manter uma VM no seu MIG atual (MIG_1) para cada 4 VMs em MIG_2.
    4. Depois de configurar a métrica, clique em Selecionar.
  8. Revise os detalhes da métrica e clique em Concluído.

  9. Quando terminar, clique em Salvar.

gcloud

gcloud compute instance-groups managed set-autoscaling MIG_1 \
  --max-num-replicas=MAX_INSTANCES \
  --min-num-replicas=MIN_INSTANCES \
  --update-stackdriver-metric=compute.googleapis.com/instance_group/size \
  --stackdriver-metric-filter="resource.type = \"instance_group\" AND resource.labels.location = \"ZONE|REGION\" AND resource.labels.instance_group_name = \"MIG_2\"" \
  --stackdriver-metric-single-instance-assignment=4

REST

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/autoscalers
{
"name": "AUTOSCALER_NAME",
"target": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instanceGroupManagers/MIG_1",
"autoscalingPolicy": {
  "maxNumReplicas": MAX_INSTANCES,
  "minNumReplicas": MIN_INSTANCES,
  "customMetricUtilizations": [
  {
    "singleInstanceAssignment": 4,
    "filter": "resource.type = \"instance_group\" and resource.labels.location = \"ZONE|REGION\" AND resource.labels.instance_group_name = \"MIG_2\"",
    "metric": "compute.googleapis.com/instance_group/size"
  }
  ]
}
}

Conceitos de métricas do Monitoring

Nesta seção, fornecemos uma breve descrição dos conceitos de métricas de Monitoring que você precisa conhecer ao configurar o escalonamento automático com base nas métricas de Monitoring.

  • Identificador de métrica ou URL de métrica: o nome da métrica no formato de um URL sem protocolo. É possível encontrar URLs para métricas integradas na lista de métricas.

    Por exemplo, o URL de uma métrica do Pub/Sub que fornece o número de mensagens não reconhecidas é pubsub.googleapis.com/subscription/num_undelivered_messages.

  • Tipo de recurso monitorado: a origem do valor da métrica. É possível encontrar o tipo de recurso monitorado de uma métrica na lista de métricas.

    Por exemplo, o tipo de recurso monitorado da métrica pubsub.googleapis.com/subscription/num_undelivered_messages é pubsub_subscription. Saiba mais sobre cada tipo de recurso monitorado em Tipos de recursos monitorados.

  • Filtro de métrica: quando sua métrica tem vários valores, um filtro permite que o escalonador automático identifique um valor de métrica específico a partir do conjunto de valores de métrica possíveis. Use os rótulos definidos em uma métrica e em um tipo de recurso monitorado para filtrar os valores. Se você quiser explorar seus valores de métricas com filtros diferentes, teste-os no explorador de métricas.

    Por exemplo, a captura de tela a seguir mostra a métrica pubsub.googleapis.com/subscription/num_undelivered_messages que fornece o número de mensagens não reconhecidas em todas as assinaturas disponíveis. Cada linha no gráfico indica uma assinatura.

    Explorador de métricas mostrando valores de métricas sem filtro.

    Sem um filtro, o escalonador automático considera a soma dos valores de métricas de todas as assinaturas. Para fazer o escalonamento automático com base em uma única assinatura, aplique um filtro no rótulo subscription_id definido para pubsub_subscription. A captura de tela a seguir mostra uma única assinatura após a aplicação do filtro.

    Explorador de métricas mostrando o valor da métrica filtrada.

Requisitos de filtragem de métrica

Quando você usa uma métrica que tem vários valores (categorizados com rótulos), é possível aplicar um filtro para fazer o escalonamento automático com base em valores específicos da métrica. Se o filtro retornar vários valores, os valores serão adicionados juntos. Para melhores resultados, crie um filtro específico o suficiente para retornar um único valor.

A filtragem do escalonador automático para métricas é compatível com a sintaxe de filtro de Monitoring. O filtro precisa atender aos seguintes requisitos:

  • É preciso colocar o valor de um filtro entre aspas duplas.
  • É preciso usar o operador de comparação de igualdade direta (=).
  • Você precisa usar o operador AND para mesclar critérios de filtro diferentes.

    Por exemplo: --stackdriver-metric-filter="resource.type=\"pubsub_subscription\" AND resource.labels.subscription_id=\"our-subscription\"".

  • É preciso usar valores diretos. Não é possível usar caracteres curinga ou funções no filtro.

    Por exemplo, não é possível usar resource.labels.zone = starts_with("us-").

  • Não é possível usar rótulos de metadados de recursos que armazenem metadados sobre um recurso monitorado.

Para ver uma referência completa de rótulos de métricas e rótulos de recursos monitorados que podem ser filtrados, consulte a lista de métricas e a lista de recursos monitorados.

Requisitos de métricas personalizadas

Para usar métricas personalizadas, primeiro crie uma métrica personalizada associada a um dos tipos de recursos monitorados.

Uma métrica personalizada usada no escalonamento automático precisa ter as seguintes propriedades:

  • Se a configuração de escalonamento automático usar dados de cada VM no grupo, configure instâncias no MIG para que cada VM exporte a métrica personalizada. Os valores exportados de cada VM precisam estar associados a um recurso monitorado gce_instance, que contém 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 escalador automático não consiga responder rápido o suficiente para carregar as alterações.
  • A métrica precisa exportar dados do tipo de valor INT64 ou DOUBLE.

Para obter informações sobre como criar uma métrica personalizada, consulte Como usar métricas personalizadas.

A seguir