Como fazer o escalonamento automático de um grupo de instâncias com métricas personalizadas do Cloud Monitoring

Este tutorial mostra como configurar um grupo de instâncias gerenciadas do Compute Engine que é escalonado automaticamente com base no valor de uma métrica personalizada do Cloud Monitoring. Você pode usar as técnicas demonstradas neste tutorial para implementar sua própria métrica de monitoramento para escalonar um grupo de instâncias gerenciadas.

Objetivos

  • Implantar um grupo de instâncias do Compute Engine com escalonamento automático.
  • Criar uma métrica personalizada que será usada para escalonar o grupo de instâncias.
  • Use o Console do Google Cloud para visualizar a métrica personalizada e o tamanho do grupo de instâncias.

Custos

Neste tutorial, há componentes faturáveis do Google Cloud, como estes:

Antes de começar

  1. No Console do Google Cloud, na página do seletor de projetos, selecione ou crie um projeto do Google Cloud.

    Acessar a página do seletor de projetos

  2. Verifique se o faturamento está ativado para seu projeto na nuvem. Saiba como confirmar se o faturamento está ativado para o projeto.

  3. Ative as APIs Cloud Storage and Monitoring.

    Ative as APIs

  4. Se você ainda não tiver um, crie um novo espaço de trabalho.

Arquitetura do aplicativo

Neste tutorial, orientamos você no processo de criação de um exemplo de aplicativo com escalonamento automático. Esse aplicativo usa um script em Node.js instalado nas instâncias do Compute Engine. O script informa um valor numérico para uma métrica do Monitoring. Não é necessário ter qualquer conhecimento em Node.js ou JavaScript para executar este tutorial. Em resposta ao valor da métrica, o aplicativo escalona automaticamente o grupo de instâncias do Compute Engine, aumentando ou reduzindo conforme a necessidade.

O script em Node.js deste tutorial é usado como uma maneira de sugestionar uma métrica personalizada com valores a que o grupo de instâncias pode responder. Em um ambiente de produção, o escalonamento automático deve ser baseado na métrica que é relevante para o caso de uso.

Arquitetura do aplicativo, mostrando como um grupo de instâncias usa um modelo e scripts de inicialização lidos no Cloud Storage para iniciar novas instâncias.

O aplicativo inclui os componentes a seguir:

  1. Modelo de instância do Compute Engine: um modelo usado para criar cada instância no grupo.
  2. Cloud Storage: um bucket usado para hospedar o script de inicialização e outros arquivos de script.
  3. Script de inicialização do Compute Engine: um script de inicialização que instala os componentes de código necessários em cada instância. Ele é instalado e iniciado automaticamente quando uma instância é iniciada. Quando o script de inicialização é executado, ele instala e inicia o código na instância que grava valores na métrica personalizada do Monitoring.
  4. Grupo de instâncias do Compute Engine: é escalonado automaticamente com base no valor das métricas do Cloud Monitoring.
  5. Instâncias do Compute Engine: um número variável de instâncias do Compute Engine.
  6. Métrica personalizada do Cloud Storage: uma métrica de monitoramento personalizada usada como valor de entrada para o escalonamento automático do grupo de instâncias do Compute Engine.

Como criar o aplicativo

Para criar o aplicativo de escalonamento automático, você precisa fazer o download dos componentes de código necessários, criar um grupo de instâncias gerenciadas e configurar o escalonamento automático para esse grupo.

Como fazer upload dos arquivos de script para o Cloud Storage

Durante o escalonamento automático, talvez o grupo de instâncias precise criar novas instâncias do Compute Engine. Quando isso acontece, ele cria as instâncias com base em um modelo. Cada instância precisa de um script de inicialização. Portanto, é necessário que o modelo faça referência ao script de inicialização de alguma forma. O Compute Engine é compatível com o uso de buckets do Cloud Storage como fonte do script de inicialização.

Siga estas etapas para fazer upload do script de inicialização em um bucket do Cloud Storage:

  1. Acesse o repositório do GitHub para fazer o download dos scripts abaixo, que serão usados neste tutorial:

    • startup.sh
    • writeToCustomMetric.js
    • writeToCustomMetric.sh
    • config.json
    • package.json
  2. No Console do Cloud, acesse a página do Cloud Storage.

    Acessar a página do Cloud Storage

  3. Clique em Create bucket e aceite os valores padrão para criar um novo bucket do Cloud Storage. Para saber mais detalhes sobre como nomear um intervalo, consulte as diretrizes para nomear intervalos.

  4. Copie os arquivos de script para seu bucket do Cloud Storage.

    1. Clique no bucket do Cloud Storage criado para acessar os componentes nele.
    2. Clique em **Fazer upload de arquivos**, selecione todos os arquivos de script baixados anteriormente do GitHub (startup.sh, writeToCustomMetric.js, writeToCustomMetric.sh, config.json, package.json) e faça o upload por meio de links.

    Após a conclusão do upload dos scripts, os arquivos aparecerão no bucket do Cloud Storage:

    Como listar os arquivos no bucket do usuário

    Explicamos a funcionalidade de cada um desses scripts na próxima seção.

  5. Anote o local do arquivo do script de inicialização no Cloud Storage, que terá um formato semelhante a este:

    gs://[YOUR_BUCKET_NAME]/startup.sh

Noções básicas sobre os componentes do código

  • startup.sh: um script de shell que instala os componentes necessários em cada instância do Compute Engine à medida que a instância é adicionada ao grupo de instâncias gerenciadas.
  • writeToCustomMetric.js: um snippet do Node.js que cria uma métrica de monitoramento personalizada com valor que aciona o escalonamento. Para emular valores de métrica reais, esse script varia o valor ao longo do tempo. Em uma implantação de produção, substitua esse script pelo código personalizado que informa a métrica de monitoramento do seu interesse, como um valor de fila de processamento.
  • config.json: um arquivo de configuração do Node.js que especifica os valores da métrica de monitoramento personalizada e é usado em writeToCustomMetric.js.
  • package.json: um arquivo de pacote do Node.js que especifica a instalação padrão e as dependências do writeToCustomMetric.js.
  • writeToCustomMetric.sh: um script de shell que executa continuamente o programa writeToCustomMetric.js em cada instância do Compute Engine.

Como criar um modelo de instância

Nesta seção, ensinaremos como criar um modelo para instâncias criadas no grupo usando escalonamento automático. Como parte do modelo, especifique o local (no Cloud Storage) do script de inicialização que precisará ser executado quando a instância for iniciada.

  1. No Console do Cloud, acesse a página Modelos de instância do Compute Engine.

    Acesse a página "Modelos de instância"

  2. Clique em Criar modelo de instância.

  3. Nomeie o modelo de instância autoscaling-instance01 e aceite os valores padrão para Tipo de máquina, Disco de inicialização, Identidade e acesso à API e Firewall.

    Imagem de "Criar um modelo de instância" que mostra o nome preenchido

  4. Clique em Gerenciamento, segurança, discos, rede, locatário individual para expandir as opções de entrada.

  5. Na seção Metadados da guia Gerenciamento, insira estas chaves e valores de metadados:

    • startup-script-url = gs://[YOUR_BUCKET_NAME]/startup.sh
    • gcs-bucket = gs://[YOUR_BUCKET_NAME]

    Seção "Metadados" da página "Criar um modelo de instância" que mostra os pares de chave-valor recomendados preenchidos

  6. Clique em Criar

Como criar o grupo de instâncias

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

    Acessar a página Grupos de instâncias

  2. Clique em Criar um novo grupo de instâncias e nomeie o grupo de instâncias como autoscaling-instance-group-1..

  3. Em Local, selecione Única zona.

  4. Em Zona, selecione sua zona de escolha.

  5. Em Tipo de grupo, selecione Grupo de instâncias gerenciadas.

    Página "Criar grupo de instâncias" mostrando a opção "Grupo de instâncias gerenciadas" selecionada

  6. Em Modelo de instância, selecione o modelo de instância que você acabou de criar.

  7. Defina Escalonamento automático como Off.

    Você editará a configuração de escalonamento automático após a criação do grupo de instâncias. Mantenha os valores padrão das outras configurações.

    Página "Criar grupo de instâncias" mostrando a opção "Escalonamento automático" definida como "Desativado"

  8. Clique em Criar

Você acabou de criar um grupo de instâncias com uma única instância que informa os valores da métrica personalizada. A próxima etapa é verificar a configuração.

Como verificar se o grupo de instâncias foi criado

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

    Acessar a página Grupos de instâncias

  2. Verifique se o ícone de status verde é exibido para o grupo de instâncias chamado autoscaling-instance-group-1 criado usando o modelo autoscaling-instance01. Isso indica que o grupo de instâncias foi criado com êxito.

    Listagem de grupos de instâncias, mostrando o ícone de status verde para o grupo "autoscaling-instance-group-1"

Como verificar se o script em Node.js está em execução

A métrica personalizada custom.googleapis.com/appdemo_queue_depth_01 não é criada até que a primeira instância do grupo seja criada e a instância comece a relatar valores de métrica personalizada.

Para verificar se o script writeToCustomMetric.js está sendo executado na primeira instância do grupo, verifique se a instância está registrando valores de métrica personalizada.

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

    Acessar a página Grupos de instâncias

  2. Clique no autoscaling-instance-group-1 para exibir as instâncias em execução no grupo.

  3. Clique em qualquer instância. Como o escalonamento automático não iniciou outras instâncias, clique na única instância que você está vendo.

    Página que exibe os detalhes do grupo de instâncias, mostrando uma única instância iniciada pelo grupo

  4. Na página Detalhes da instância de VM, em Registros, clique em Cloud Logging para ver os registros da instância de VM.

  5. Digite nodeapp para filtrar os registros dessa instância do Compute Engine.

    Se o script Node.js estiver sendo executado na instância do Compute Engine, uma solicitação será enviada para a API, e as entradas de registro que mostram Finished writing time series data aparecerão nos registros. Por exemplo, na captura de tela a seguir, as entradas com esse texto aparecem às 10:31:05.000 e às 10:30:53.000. Se você não vir entradas de registro como essas, isso significará que o script em Node.js não está informando os valores da métrica personalizada.

    Listagem de entradas de registro

Configurar o escalonamento automático para o grupo de instâncias

Depois de verificar que a métrica personalizada está informando os dados da primeira instância com êxito, configure o grupo de instâncias para fazer escalonamento automático com base no valor da métrica personalizada.

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

    Acessar a página Grupos de instâncias

  2. Selecione o grupo autoscaling-instance-group-1 e clique em Editar.

    Listagem de grupos de instâncias mostrando o grupo "autoscaling-instance-group-1"

  3. Defina Escalonamento automático como Ativado.

    Página "Grupos de instâncias" no modo de edição, com a opção "Escalonamento automático" definida como "Ativado"

  4. Em Escalonamento automático baseado em, selecione Métrica do Monitoring.

  5. No campo Identificador de métrica, digite custom.googleapis.com/appdemo_queue_depth_01.

  6. No campo Meta, digite 150.

    Quando os valores da métrica de monitoração personalizada são maiores ou menores do que o valor em Meta, o autoescalador faz o escalonamento do grupo de instâncias gerenciadas, aumentando ou reduzindo o número de instâncias. O valor da meta pode ser qualquer valor duplo. Neste tutorial, usamos 150 porque esse valor corresponde aos valores informados pela métrica de monitoramento personalizada.

  7. Na lista Target mode, selecione Gauge.

    A configuração Gauge especifica que o autoescalador precisa calcular o valor médio dos dados coletados ao longo dos últimos minutos e compará-lo com o valor da meta. Por outro lado, definir Modo da meta como DELTA_PER_MINUTE ou DELTA_PER_SECOND resulta em um escalonamento automático baseado na taxa de alteração observada, não em um valor médio.

  8. Em Número mínimo de instâncias, digite 1 e em Número máximo de instâncias, digite 5.

    Detalhe da página "Grupos de instâncias" no modo de edição mostrando as configurações recomendadas

  9. Clique em Salvar.

Como observar a realização do escalonamento automático pelo grupo de instâncias

Às vezes, o script em Node.js varia os valores da métrica personalizada que ele informa de cada instância. À medida que o valor da métrica aumenta, o grupo de instâncias cresce com a adição de instâncias do Compute Engine. Se o valor diminuir, o grupo de instâncias detectará a alteração e diminuirá com a remoção de instâncias. Conforme mencionado anteriormente, o script emula uma métrica real que o valor também pode flutuar para cima e para baixo.

Para ver o escalonamento do grupo de instâncias de acordo com a métrica, acesse o gráfico Tamanho autoajustado.

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

    Acessar a página Grupos de instâncias

  2. Clique no grupo de instâncias autoscaling-instance-group-1 na lista.

    A página exibe os detalhes sobre o grupo de instâncias, incluindo o gráfico de escalonamento automático.

    A página "Grupos de instâncias" do grupo selecionado mostrando um gráfico de "Tamanho escalonado automaticamente"

    O número de instâncias representadas no gráfico superior é alterado paralelamente com os valores informados pela métrica personalizada no gráfico inferior.

Como fazer a limpeza

Após concluir este tutorial, limpe os recursos que você criou no GCP para que eles não sejam faturados no futuro. Nas seções a seguir, descrevemos como excluir esses recursos.

Excluir o projeto

O jeito mais fácil de evitar cobranças é excluir o projeto que você criou para o tutorial.

Para excluir o projeto:

  1. No Console do Cloud, acesse a página Gerenciar recursos:

    Acessar "Gerenciar recursos"

  2. Na lista de projetos, selecione o projeto que você quer excluir e clique em Excluir .
  3. Na caixa de diálogo, digite o ID do projeto e clique em Encerrar para excluí-lo.

Como excluir todos os componentes

  1. Exclua o grupo de instâncias.
  2. Exclua os modelos de instância.
  3. Exclua o bucket do Cloud Storage.

A seguir