Como escalonar com base em métricas do Stackdriver Monitoring

Configure o autoescalador de acordo com os tipos de métricas a seguir:

  • Faça o escalonamento usando métricas por instância, em que a métrica selecionada fornece dados para cada instância no grupo de instâncias gerenciadas, 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.

Essas métricas podem ser padrão, fornecidas pelo serviço Stackdriver Monitoring, ou personalizadas, criadas por você.

Antes de começar

Métricas por instância

As métricas por instância fornecem dados separadamente para cada instância em um grupo. As métricas fornecem dados para cada instância no grupo de instâncias gerenciadas, indicando a utilização de recursos. Para métricas por instância, o grupo não pode ser escalonado para menos de 1, uma vez que o autoescalador exige métricas sobre pelo menos uma instância em execução para funcionar.

Se você precisar realizar escalonamento usando outras métricas do Stackdriver que não são específicas para instâncias individuais ou realizar escalonamento de seus grupos de instâncias para zero periodicamente, configure suas instâncias para escalonar usando métricas por grupo.

Métricas padrão por instância

O Stackdriver Monitoring tem um conjunto de métricas padrão que você pode usar para monitorar as instâncias de máquina virtual. 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. Use 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 quanto uma instância está ocupada, e o valor da métrica aumenta ou diminui proporcionalmente ao número de instâncias da máquina virtual 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

O Stackdriver Monitoring permite que você crie métricas personalizadas e grave os próprios dados de monitoramento no serviço dele. Isso dá acesso aos dados padrão do Cloud Platform e aos dados de monitoramento personalizados lado a lado, com uma estrutura de dados conhecida e uma sintaxe consistente de consulta. Se você tiver métrica personalizada, pode optar por fazer o escalonamento com base nos dados provenientes dela.

Pré-requisitos

Para usar métricas personalizadas, é preciso concluir o seguinte:

  • Criar uma métrica personalizada. Para se informar sobre a criação de uma métrica personalizada, consulte a documentação sobre métricas personalizadas.
  • Configurar o grupo de instâncias gerenciadas para exportar a métrica personalizada a partir de todas as instâncias desse 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 dados relevantes separadamente para cada instância específica do Compute Engine.
  • Os valores por instância exportados precisam estar associados a um recurso monitorado gce_instance que tenha os seguintes rótulos:
    • zone, com o nome da zona em que a instância está.
    • instance_id, com o valor do código numérico único atribuído à instância.
  • Exportar dados pelo menos a cada 60 segundos. É possível exportar dados com mais frequência do que a cada 60 segundos, e o autoescalador conseguirá responder mais rápido para carregar alterações. Se você exportar dados menos vezes do que a cada 60 segundos, talvez o autoescalador não consiga responder rápido o suficiente para carregar as alterações.
  • Ser válida para uso, ou seja, é possível usar os dados provenientes dela para aumentar ou reduzir proporcionalmente o número de máquinas virtuais.
  • A métrica precisa exportar os valores de dados int64 ou double.

Para o autoescalador funcionar com a métrica personalizada, você precisa exportar os dados referentes a ela de todas as instâncias do grupo de instâncias gerenciadas.

Observação: é possível receber o identificador numérico de uma instância com uma solicitação para a propriedade de código do servidor de metadados dentro da instância. 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 o uso do servidor de metadados, consulte Servidor de metadados.

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 autoescalador que usa métricas do Stackdriver Monitoring, é preciso fornecer o identificador de métrica, o nível de utilização desejado e o tipo de meta de uso. Veja abaixo uma rápida descrição de cada uma dessas propriedades:

  • Identificador de métricas: 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: nível da meta de uso que o autoescalador precisa manter para esta métrica. Precisa ser um número positivo. Por exemplo, 24.5 e 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: define como o autoescalador calcula os dados coletados das instâncias. Os tipos de meta possíveis são:

    • GAUGE: o autoescalador 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 autoescalador calcula a taxa média de crescimento por segundo e a compara com a meta de uso.

    Se você expressou a meta de uso desejada em segundos, use DELTA_PER_SECOND. Da mesma forma, use DELTA_PER_MINUTE se expressou a meta de uso em minutos para que o autoescalador possa fazer comparações precisas.

Console

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

Para configurar o escalonamento automático para um grupo de instâncias gerenciadas regionais (multizona):

  1. Acesse a página Grupos de instâncias.
  2. Se você não tem um grupo de instâncias, crie um. Caso contrário, clique no nome de um grupo de instâncias na lista para abrir a página de detalhes dele. O grupo precisa ser regional.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Ativado.
  5. Na seção Escalonamento automático com base em, selecione Métricas de monitoramento do Stackdriver.
  6. Na seção Identificador de métrica, insira o nome da métrica no seguinte formato: example.googleapis.com/path/to/metric.
  7. Na seção Meta, especifique o valor.
  8. Na seção Tipo de meta, especifique o tipo de meta que corresponde ao tipo de medida da métrica.
  9. Salve suas alterações quando estiver pronto.

Para configurar o escalonamento automático a um grupo de instâncias gerenciadas de zona única:

  1. Acesse a página Grupos de instâncias.
  2. Se você não tem um grupo de instâncias, crie um. Caso contrário, clique no nome de um grupo de instâncias para abrir a página de detalhes. O grupo de instâncias precisa ser de zona única.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Ativado.
  5. Na seção Escalonamento automático com base em, selecione Métricas de monitoramento do Stackdriver.
  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, insira 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, no gcloud, o comando a seguir cria um autoescalador que usa o tipo de meta GAUGE. Junto com o parâmetro --custom-metric-utilization, o parâmetro --max-num-replicas também é obrigatório na criação de 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

Como opção, você pode usar a sinalização --cool-down-period, que informa ao autoescalador quantos segundos aguardar, após o início de uma nova máquina virtual, antes de começar a coletar informações de uso dela. Isso determina o tempo que a máquina virtual pode levar para inicializar, durante o qual o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é 60 segundos.

Para grupos de instâncias gerenciados em várias zonas, use a sinalização --region para especificar onde encontrar o grupo de instâncias. Por exemplo:

gcloud compute instance-groups managed set-autoscaling example-managed-instance-group \
    --custom-metric-utilization metric=example.googleapis.com/path/to/metric,utilization-target-type=GAUGE,utilization-target=10 \
    --max-num-replicas 20 \
    --cool-down-period 90 \
    --region us-central1

Para ver uma lista completa de comandos e sinalizações da gcloud disponíveis, consulte a referência da 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 você criar solicitações de API para o escalonamento automático.

Na API, faça uma solicitação POST para o seguinte URL, substituindo myproject pelo seu código do projeto e us-central1-f pela zona desejada:

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

Como opção, você pode usar o parâmetro coolDownPeriodSec, que informa ao autoescalador quantos segundos aguardar, após o início de uma nova instância, para começar a coletar o uso. Terminado o período de resfriamento, as informações de uso da nova instância começam a ser coletadas pelo autoescalador, que determina se o grupo precisa de mais instâncias. Isso determina o tempo que a instância pode levar para inicializar, em que o uso coletado não é confiável para o escalonamento automático. O período de resfriamento padrão é de 60 segundos.

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

{
 "name": "example-autoscaler",
 "target": "zones/us-central1-f/instanceGroupManagers/example-managed-instance-group",
 "autoscalingPolicy": {
  "maxNumReplicas": 10,
  "coolDownPeriodSec": 90,
  "customMetricUtilizations": [
   {
    "metric": "example.googleapis.com/some/metric/name",
    "utilizationTarget": 10,
    "utilizationTargetType": "GAUGE"
   }          ]
 }
}

Como filtrar métricas por instância

É possível aplicar filtros a métricas por instância do Stackdriver, o que permite escalonar grupos de instâncias gerenciadas de zona única usando valores individuais de métricas com vários streams ou rótulos.

Requisitos de filtragem de métrica por instância

A filtragem do autoescalador é compatível com a sintaxe do filtro do Stackdriver 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 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 ter os melhores resultados, o filtro precisa ser 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 Platform, a ferramenta de linha de comando gcloud Beta ou a API Compute Engine Beta para adicionar filtros de métrica para escalonamento automático de um grupo de instâncias gerenciadas 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. Acesse a página Grupos de instâncias.
  2. Se você não tem um grupo de instâncias, crie um. Caso contrário, clique no nome de um grupo de instâncias para abrir a página de detalhes. O grupo de instâncias precisa ser de zona única.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Ativado.
  5. Na seção Escalonamento automático com base em, selecione Métricas de monitoramento do Stackdriver.
  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 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 a sinalização 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

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

Para ver uma lista completa de sinalizações e comandos da gcloud disponíveis, consulte a referência da 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 você 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 booleano loadbalanced, especifique o parâmetro filter com o valor "metric.label.loadbalanced = true".

Na API, faça uma solicitação POST para o seguinte URL, substituindo myproject pelo seu código do projeto e us-central1-f com a zona desejada. O corpo da solicitação precisa incluir os campos name, target e autoscalingPolicy. Em autoscalingPolicy, forneça as propriedades maxNumReplicas e customMetricUtilizations.

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

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

Este 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 para o grupo ou à ocupação do grupo. O grupo é escalonado com base na flutuação do valor da métrica desse grupo e na 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 autoescalador adicione ou remova instâncias, dependendo da quantidade de trabalho disponível para atribuir a cada uma delas. Especifique um valor para esse parâmetro que represente a quantidade de trabalho que você espera que cada instância possa processar. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada instância ou especifique 0.5 para atribuir metade de uma unidade de trabalho. O autoescalador adiciona instâncias ao grupo de instâncias gerenciadas para garantir que elas sejam suficientes para concluir o trabalho disponível, como indicado pela métrica. Se o valor da métrica for 10 e você atribuir 0.5 unidades de trabalho a cada instância, o autoescalador criará 20 instâncias no grupo de instâncias gerenciadas. O escalonamento com atribuição de instâncias permite que o grupo de instâncias diminua para 0 instâncias quando o valor da métrica cair para 0 e aumente quando ele estiver acima de 0. O diagrama a seguir mostra o relacionamento proporcional entre o valor da métrica e o número de instâncias ao escalonar com uma política de atribuição de instâncias. Um gráfico mostrando o relacionamento 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 autoescalador adicione ou remova instâncias para tentar manter a métrica em um valor especificado. Quando a métrica estiver acima da meta especificada, o autoescalador adicionará gradualmente as instâncias até que a métrica diminua para o valor pretendido. Quando a métrica está abaixo do valor de meta especificado, o autoescalador remove instâncias gradualmente até que a métrica aumente para o valor de meta. O escalonamento com uma meta de utilização não pode reduzir o grupo a 0 instâncias. O diagrama a seguir mostra como o autoescalador adiciona e remove instâncias em resposta a um valor de métrica para manter uma meta de utilização. Um gráfico mostrando o autoescalador adicionando e removendo instâncias para manter uma meta de utilização

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

  • Atribuição de instância: faça o escalonamento dos grupos de instâncias gerenciadas com base no número de mensagens não confirmadas em uma assinatura do Google Pub/Sub ou uma taxa total de QPS de um endpoint da rede.
  • Meta de utilização: faça o escalonamento dos grupos de instâncias gerenciadas com base em uma meta de utilização para uma métrica personalizada que não seja proveniente das métricas por instância 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, é possível que seus grupos de instâncias sejam reduzidos a 0. Se sua métrica indicar que não há trabalho para o grupo de instâncias concluir, o grupo reduzirá para 0 instâncias até a métrica detectar que há novo trabalho disponível. Ao contrário da atribuição de instâncias por grupo, o escalonamento automático por instância exige métricas de utilização de recursos de pelo menos uma instância, portanto, o grupo não pode escalonar para menos de 1.

Como filtrar métricas por grupo

Você pode aplicar filtros a métricas do Stackdriver por grupo, o que permite escalonar grupos de instâncias gerenciadas usando valores individuais de métricas a partir de vários streams ou rótulos.

Requisitos de filtragem de métrica por grupo

A filtragem do autoescalador é compatível com a sintaxe do filtro do Stackdriver 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.
  • É possível especificar um seletor de tipo de métrica metric.type = "..." no filtro e também incluir o campo metric original. Se preferir, pode usar apenas 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ê precisa 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 Platform, a ferramenta de linha de comando gcloud Beta ou a API Compute Engine Beta para configurar o escalonamento automático com métricas por grupo para um grupo de instâncias gerenciadas de zona única.

Console

  1. Acesse a página Grupos de instâncias.
  2. Se você não tem um grupo de instâncias, crie um. Caso contrário, clique no nome de um grupo de instâncias para abrir a página de detalhes. O grupo de instâncias precisa ser de zona única.
  3. Na página de detalhes do grupo de instâncias, clique no botão Editar grupo.
  4. Em Escalonamento automático, selecione Ativado.
  5. Na seção Escalonamento automático com base em, selecione Métricas de monitoramento do Stackdriver.
  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 no grupo de instâncias gerenciadas. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada instância. O autoescalador mantém instâncias suficientes para concluir o trabalho disponível (como indicado pela métrica). Se o valor da métrica for 10 e você atribuir 2 unidades de trabalho a cada instância, o autoescalador criará 5 instâncias no grupo de instâncias gerenciadas.
    • 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 autoescalador para um grupo de instâncias gerenciadas de maneira semelhante à criação do autoescalador 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 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 precisa 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]

em que:

  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um autoescalador.
  • [ZONE] é a zona em que o grupo de instâncias gerenciadas está localizado. Não é possível especificar uma região para autoescaladores em métricas por grupo.
  • [MAX_INSTANCES] é o limite do número de instâncias que o autoescalador pode adicionar ao grupo de instâncias gerenciadas.
  • [MIN_INSTANCES] é o limite do número mínimo de instâncias que o autoescalador pode ter no grupo de instâncias gerenciadas.
  • [METRIC_URL] é um URL sem protocolo de uma métrica do Google Cloud Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver 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 no grupo de instâncias gerenciadas. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada instância ou especifique 0.5 para atribuir metade de uma unidade de trabalho. O autoescalador adiciona instâncias suficientes ao grupo de instâncias gerenciadas para concluir o trabalho disponível, como indicado pela métrica. Se o valor da métrica for 10 e você atribuir 0.5 unidades de trabalho a cada instância, o autoescalador criará 20 instâncias no grupo de instâncias gerenciadas.

Meta de uso:

Em algumas situações, convém usar metas de utilização com métricas por grupo em vez de especificar um número de instâncias relativo ao valor da métrica medida pelo autoescalador. Ainda será possível apontar o autoescalador para uma métrica por grupo, mas ele tentará manter a meta de utilização especificada. Especifique o destino e o tipo de destino com a sinalização --stackdriver-metric-utilization-target. Você também precisa 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-utilization-target=[TARGET_VALUE] \
   --stackdriver-metric-utilization-target-type=[TARGET_TYPE]

em que:

  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um autoescalador.
  • [ZONE] é a zona em que o grupo de instâncias gerenciadas está localizado. Não é possível especificar uma região para autoescaladores em métricas por grupo.
  • [MAX_INSTANCES] é o limite do número de instâncias que o autoescalador pode adicionar ao grupo de instâncias gerenciadas.
  • [MIN_INSTANCES] é o limite do número mínimo de instâncias que o autoescalador pode ter no grupo de instâncias gerenciadas.
  • [METRIC_URL] é um URL sem protocolo de uma métrica do Google Cloud Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você precisa especificar um valor de resource.type, mas não é possível especificar 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 autoescalador tenta manter.
  • [TARGET_TYPE] é o tipo de valor da métrica. É possível configurar o autoescalador para monitorar a métrica como um GAUGE, pelo delta-per-minute do valor ou pelo delta-per-second do valor.

Para ver uma lista completa de comandos e sinalizações da gcloud do autoescalador disponíveis que funcionam com o escalonamento automático por grupo, consulte a referência da gcloud 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 autoescalador para um grupo de instâncias gerenciadas. Você pode especificar como quer que o autoescalador 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 especifique o parâmetro single-instance-assignment. O parâmetro especifica a quantidade de trabalho que você espera que cada instância manipule.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers

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

em que:

  • [PROJECT_ID] é o código do projeto.
  • [ZONE] é a zona em que o grupo de instâncias gerenciadas está localizado.
  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um autoescalador.
  • [MAX_INSTANCES] é o limite do número de instâncias que o autoescalador pode adicionar ao grupo de instâncias gerenciadas.
  • [MIN_INSTANCES] é o limite do número mínimo de instâncias que o autoescalador pode ter no grupo de instâncias gerenciadas.
  • [METRIC_URL] é um URL sem protocolo de uma métrica do Google Cloud Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você precisa especificar um valor de resource.type, mas não é possível especificar 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 no grupo de instâncias gerenciadas. Por exemplo, especifique 2 para atribuir duas unidades de trabalho a cada instância ou especifique 0.5 para atribuir metade de uma unidade de trabalho. O autoescalador adiciona instâncias suficientes ao grupo de instâncias gerenciadas para concluir o trabalho disponível, como indicado pela métrica. Se o valor da métrica for 10 e você atribuir 0.5 unidades de trabalho a cada instância, o autoescalador criará 20 instâncias no grupo de instâncias gerenciadas.

Meta de uso:

Em algumas situações, convém usar metas de utilização com métricas por grupo em vez de especificar um número de instâncias relativo ao valor da métrica medida pelo autoescalador. Ainda será possível apontar o autoescalador para uma métrica por grupo, mas ele tentará manter a meta de utilização especificada. Especifique essas metas com o parâmetro utilizationTarget. Você também precisa especificar um filtro para a métrica usando o parâmetro filter.

POST https://www.googleapis.com/compute/beta/projects/[PROJECT_ID]/zones/[ZONE]/autoscalers

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

em que:

  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um autoescalador.
  • [ZONE] é a zona em que o grupo de instâncias gerenciadas está localizado.
  • [MAX_INSTANCES] é o limite do número de instâncias que o autoescalador pode adicionar ao grupo de instâncias gerenciadas.
  • [MIN_INSTANCES] é o limite do número mínimo de instâncias que o autoescalador pode ter no grupo de instâncias gerenciadas.
  • [METRIC_URL] é um URL sem protocolo de uma métrica do Google Cloud Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver Monitoring em que você especifica um filtro de monitoramento com um TimeSeries relevante e um MonitoredResource. Você precisa especificar um valor de resource.type, mas não é possível especificar 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 autoescalador tenta manter.
  • [TARGET_TYPE] é o tipo de valor da métrica. É possível configurar o autoescalador para monitorar a métrica como um GAUGE, pelo DELTA_PER_MINUTE do valor 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

Suponha a seguinte configuração:

  • Um tópico ativo do Google Cloud Pub/Sub recebe mensagens de algumas fontes.
  • Uma assinatura ativa do Google Cloud Pub/Sub está conectada ao tópico em uma configuração de recepção. A assinatura é chamada de our-subscription.
  • Um pool de workers está extraindo mensagens dessa assinatura e processando-as. O pool é um grupo de instâncias gerenciadas 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 diminuir para 0 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, você pode escolher 1 como o valor de atribuição da instância. Isso cria uma instância para cada mensagem na fila (limitada ao número máximo de instâncias no nosso grupo). No entanto, isso pode causar provisionamento excessivo. Na pior das hipóteses, uma instância é criada para processar apenas uma mensagem antes que o autoescalador a encerre, o que consome recursos por muito mais tempo do que o trabalho real.
    • Observe que, se os trabalhadores pudessem processar várias mensagens simultaneamente, faria 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, é possível calcular quantas mensagens cada instância precisa processar durante a vida útil dela para ser considerada eficiente. Leve em conta o tempo de inicialização e desligamento e o fato de que o escalonamento automático não exclui imediatamente as instâncias. Por exemplo, supondo que o tempo de inicialização e encerramento demore aproximadamente 5 minutos no total e que o escalonamento automático exclua instâncias somente após um período de aproximadamente 10 minutos, calculamos que é eficiente criar uma instância extra no grupo, desde que ela possa processar pelo menos 15 mensagens antes que o autoescalador a desligue, o que resulta em 25% de sobrecarga devido ao tempo total necessário para criar, iniciar e encerrar a instância. 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.

Observando as métricas do 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 é recomendável usar uma métrica que não inclui as mensagens processadas porque ela pode cair para 0 quando ainda houver trabalho sendo feito, o que solicita que o escalonamento automático diminua e possivelmente interrompa o trabalho real.

Agora você pode 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 grupo de instâncias gerenciadas chamado our-instance-group é designado para executar uma tarefa específica. O grupo está localizado na zona us-central1-a.
  • Você tem uma métrica personalizada do Stackdriver Monitoring que exporta um valor que você gostaria de manter em um nível específico. 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 é nomeada: custom.googleapis.com/example_average_latency.
    • A métrica personalizada tem um rótulo com uma chave chamada group_name e valor igual ao nome do grupo de instâncias, our-instance-group.
    • A métrica personalizada exporta dados para o recurso monitorado global, ou seja, não está associada a nenhuma instância específica.

Você determinou que, quando a métrica ultrapassar algum valor específico, será necessário adicionar mais instâncias ao grupo para lidar com a carga. Por outro lado, quando ela ficar abaixo desse valor, você poderá liberar alguns recursos. O escalonamento automático adiciona ou remove gradualmente as instâncias a uma taxa proporcional ao valor da métrica 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 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
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine