Escalonamento automático de um grupo de instâncias com métricas personalizadas do Stackdriver

Neste tutorial, mostramos como configurar um grupo de instâncias gerenciadas do Compute Engine que faz o escalonamento automático com base no valor de uma métrica personalizada do Stackdriver 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.
  • Usar o Console do Google Cloud Platform para ver a métrica personalizada e o tamanho do grupo de instâncias.

Custos

Neste tutorial, usamos componentes faturáveis do GCP, inclusive os seguintes:

  • Cloud Storage
  • Compute Engine
  • Stackdriver Monitoring

    O Monitoring apresenta métricas personalizadas, que têm custos associados. Para ver mais informações, consulte Preços do Stackdriver.

Antes de começar

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

    Acessar a página do seletor de projetos

  2. Verifique se a cobrança está ativada para o seu projeto do Google Cloud. Saiba como confirmar se a cobrança está ativada para o seu projeto.

  3. Ative as APIs Cloud Storage e Stackdriver.

    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 Stackdriver (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 intervalo 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 os valores na métrica personalizada do Stackdriver.
  4. Grupo de instâncias do Compute Engine: um grupo de instâncias que faz escalonamento automático com base nos valores da métrica do Stackdriver 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 intervalos do Cloud Storage como fonte do script de inicialização.

Siga estas etapas para fazer upload do script de inicialização em um intervalo 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 GCP, 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 intervalo 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 intervalo do Cloud Storage.

    1. Clique no intervalo do Cloud Storage criado para acessar os componentes nele.
    2. Clique em **Upload Files, **selecione todos os arquivos de script baixados do GitHub anteriormente (startup.sh, writeToCustomMetric.js, writeToCustomMetric.sh,config.json e package.json) e faça upload deles.

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

    Listagem dos arquivos no intervalo 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 assim que ela é adicionada ao grupo de instâncias gerenciadas.
  • writeToCustomMetric.js: um snippet em Node.js que cria uma métrica de monitoramento personalizada com um 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 em Node.js que especifica os valores da métrica de monitoramento personalizada e é usado em writeToCustomMetric.js.
  • package.json: um arquivo de pacote em Node.js que especifica a instalação padrão e as dependências de writeToCustomMetric.js.
  • writeToCustomMetric.sh: um script de shell que executa continuamente o programa writeToCustomMetric.js em cada instância do Compute Engine.

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 GCP, acesse a página Modelos de instância do Compute Engine.

    Acessar 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 de 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 GCP, 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 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 GCP, acesse a página Grupos de instâncias.

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

  2. Verifique se o ícone de status verde está sendo exibido no grupo de instâncias com o nome autoscaling-instance-group-1, criado a partir do 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 será gerada até que a primeira instância do grupo seja criada e comece a informar os valores.

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

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

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

  2. Clique em autoscaling-instance-group-1 para exibir as instâncias que estão 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 Stackdriver Logging para ver os registros da instância de VM.

    Detalhe da página "Detalhes da instância de VM" mostrando o cabeçalho "Registros" com o link "Stackdriver Logging"

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

    Se o script em Node.js estiver em execução na instância do Compute Engine, uma solicitação será enviada à API e as entradas com o texto 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 GCP, 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 depois clique em Editar.

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

  3. Defina Escalonamento automático como On.

    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 a Métrica do Stackdriver 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, configurar Modo da meta como DELTA_PER_MINUTE ou DELTA_PER_SECOND resulta em um escalonamento automático baseado na taxa de alteração observada, em vez de um valor médio.

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

    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 GCP, 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 é excluindo o projeto que você criou para o tutorial.

Para excluir o projeto:

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

    Acessar a página "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 intervalo do Cloud Storage.

Próximas etapas