Como escalonar com base em métricas do Stackdriver Monitoring

Configure o escalonador automático 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 escalonar usando métricas do Stackdriver Monitoring que não são específicas para instâncias individuais ou dimensionar seus grupos de instâncias até zero instâncias de vez em quando, configure suas instâncias para escalonamento usando métricas por grupo.

Métricas padrão por instância

O Stackdriver Monitoring tem um conjunto de métricas padrão que é possível usar para monitorar suas instâncias de máquina virtual (VM, na sigla em inglês). 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 a ocupação de uma instância, e o valor da métrica aumenta ou diminui proporcionalmente ao número de instâncias de VM no grupo.

A métrica a seguir é inválida porque o valor não se altera com base no uso, impedindo o escalonador automático 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 Stackdriver Monitoring e gravar seus próprios dados de monitoramento no serviço de monitoramento. 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, pode 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.
  • 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 os dados relevantes para cada instância 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 de ID numérico exclusivo atribuído à instância.
  • 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.
  • 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.
  • Exportar os valores de dados int64 ou double.

Para o escalonador automático 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 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 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. Cada uma dessas propriedades é descrita brevemente abaixo:

  • 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: 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 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, digite 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 a granularidade de medida da métrica.
  9. Salve suas alterações quando estiver pronto.

Para configurar o escalonamento automático de 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, 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

Opcionalmente, é possível usar a sinalização --cool-down-period, que informa ao autoescalador quantos segundos esperar após o início de uma nova máquina virtual antes que o autoescalador comece a coletar informações de uso. 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 gerenciadas multi-zonais, use a sinalização --region para especificar onde encontrar o grupo de instâncias. 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 disponíveis para a ferramenta gcloud, consulte a referência .

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.

Opcionalmente, é possível usar o parâmetro coolDownPeriodSec, que informa ao autoescalador quantos segundos esperar após uma nova instância ser iniciada antes de 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 espera padrão é de 60 segundos.

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

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

Como filtrar métricas por instância

É possível aplicar filtros a métricas por instância do Stackdriver Monitoring, 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 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 Google Compute Engine para adicionar filtros de métricas 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 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

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 (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/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 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 escalonador automático 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 representa quanto trabalho você espera que cada instância manipule. 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. 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 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 escalonador automático adiciona e remove instâncias em resposta a um valor de métrica para manter uma meta de utilização.Como adicionar e remover automaticamente instâncias no autoescalador para manter uma utilização de destino.

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

  • Atribuição de instância: ajuste o tamanho dos grupos de instâncias gerenciadas com base no número de mensagens não confirmadas em uma assinatura pub/sub ou em uma taxa QPS total 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á o escalonamento para 0 instâncias até que a métrica detecte que um novo trabalho está disponível. Ao contrário de uma atribuição de instância por grupo, o escalonamento automático por instância requer métricas de utilização de recursos de pelo menos uma instância, de modo que o grupo não pode ser dimensionado abaixo de 1.

Como filtrar métricas por grupo

É possível aplicar filtros a métricas do Stackdriver Monitoring por grupo, o que permite dimensionar grupos de instâncias gerenciadas usando valores individuais de métricas que têm 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 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 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.
  11. 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.
  12. Se você selecionar uma política de meta de utilização:
    • Forneça um valor de Meta de utilização que represente o valor da métrica que o autoescalador precisa tentar manter.
    • Selecione o Tipo de meta de utilização que representa o tipo de valor para a métrica.
  13. Salve suas alterações quando estiver pronto.

gcloud

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 escalonador automático 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]

em que:

  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um escalonador automático.
  • [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 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 escalonador automático criará instâncias 20 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 a meta e o tipo de meta com o sinalizador --stackdriver-metric-utilization-target. Você também deve especificar um filtro para a métrica usando a sinalização --stackdriver-metric-filter.

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 escalonador automático.
  • [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 Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver 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 autoescalador 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 do valor ou pelo delta-per-second do valor.

Para ver uma lista de comandos e sinalizadores disponíveis da linha da ferramenta de linha de comando gcloud do autoescalador, que funcionem com o escalonamento automático por grupo, veja a referência da ferramenta de linha de comando (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. 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 instância manipule.

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]",
      "singleInstanceAssignment": [INSTANCE_ASSIGNMENT]
    }
  ],
 }
}

em que:

  • [PROJECT_ID] é o ID 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 Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver 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 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 escalonador automático criará instâncias 20 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 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]
    }
  ],
 }
}

em que:

  • [GROUP_NAME] é o nome do grupo de instâncias gerenciadas a que você quer adicionar um escalonador automático.
  • [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 Monitoring.
  • [METRIC_FILTER] é um filtro do Stackdriver 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 autoescalador 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 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 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 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, é possível 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.
    • 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, é 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.

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 é 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 é 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 grupo de instâncias gerenciadas 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 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 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 grupo da instância, 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, é possível liberar alguns recursos. O escalonamento automático adiciona ou remove instâncias gradualmente 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 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
Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Compute Engine