Resolução de problemas de encerramentos e reinícios de VMs


Este documento descreve as causas comuns de encerramentos e reinícios inesperados das instâncias do Compute Engine e como evitá-los.

Os encerramentos e os reinícios de instâncias podem ser causados por eventos do sistema ou atividades administrativas. Os encerramentos e os reinícios de eventos do sistema são gerados pelos sistemas Google ou pelo sistema operativo das suas instâncias. Os encerramentos e os reinícios da atividade de administrador são gerados por uma chamada API gerada por um utilizador ou uma conta de serviço. Todos os encerramentos e reinícios são registados, exceto os reinícios iniciados a partir da instância.

Antes de começar

  • Se ainda não o tiver feito, configure a autenticação. A autenticação valida a sua identidade para aceder a Google Cloud serviços e APIs. Para executar código ou exemplos a partir de um ambiente de desenvolvimento local, pode autenticar-se no Compute Engine selecionando uma das seguintes opções:

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

    Console

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

    gcloud

    1. Instale a CLI Google Cloud. Após a instalação, inicialize a CLI gcloud executando o seguinte comando:

      gcloud init

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    2. Set a default region and zone.

Diagnosticar encerramentos e reinícios de instâncias

Para diagnosticar a causa do encerramento ou do reinício espontâneo de uma instância, tem de consultar os registos da instância. Para identificar rapidamente a causa de futuros encerramentos ou reinícios de VMs, crie um painel de controlo que contenha os registos. Depois de consultar os registos, reveja os campos method e principalEmail para determinar que evento e que utilizador ou serviço iniciou o encerramento ou o reinício.

Consultar registos de auditoria do Cloud

Consulte os registos de auditoria na nuvem para apresentar uma lista de eventos do sistema e atividades administrativas que podem ter causado o encerramento ou o reinício.

Consola

  1. Na Google Cloud consola, aceda à página Explorador de registos.

    Aceda ao Explorador de registos

  2. No campo Consulta, introduza a seguinte consulta:

    resource.type="gce_instance"
    "VM_NAME"
    logName:("logs/cloudaudit.googleapis.com%2Fsystem_event" OR "logs/cloudaudit.googleapis.com%2Factivity")
    

    Substitua VM_NAME pelo nome da VM que foi encerrada ou reiniciada.

  3. Se o evento que procura ocorreu há mais de uma hora, defina um intervalo de tempo personalizado clicando no símbolo de relógio e introduzindo um intervalo personalizado.

    Defina o período de consulta.

  4. Clique em Executar consulta. Os resultados são apresentados na secção Resultados da consulta.

  5. Clique na seta de expansão junto a cada resultado para mostrar informações detalhadas.

  6. Consulte o artigo Rever registos de auditoria do Cloud para saber mais acerca dos campos method e principalEmail associados a encerramentos e reinícios, e o que pode fazer para os evitar.

gcloud

  1. Veja os registos de auditoria do Cloud com o comando gcloud logging read:

    gcloud logging read --freshness=TIME 'resource.type="gce_instance" "VM_NAME" logName:("logs/cloudaudit.googleapis.com%2Fsystem_event" OR "logs/cloudaudit.googleapis.com%2Factivity")'
    

    Substitua o seguinte:

    • TIME: o período durante o qual quer consultar. Por exemplo, 1h consulta as entradas de registo na última hora. Para obter informações sobre os formatos de data e hora, consulte o artigo gcloud topic datetimes.
    • VM_NAME: o nome da VM que foi encerrada ou reiniciada.

    Os resultados são apresentados.

  2. Consulte o artigo Rever registos de auditoria do Cloud para saber mais acerca dos campos method e principalEmail associados a encerramentos e reinícios, e o que pode fazer para os evitar.

Rever registos de auditoria do Cloud

Reveja os campos method e principalEmail dos registos de auditoria na nuvem para determinar por que motivo a sua VM foi encerrada ou reiniciada.

  1. Reveja os campos methoddos registos de auditoria da nuvem e compare-os com os métodos indicados na tabela seguinte.

    Método Tipo de encerramento Descrição
    compute.instances.repair.recreateInstance Evento do sistema

    Se a sua VM pertencer a um grupo de instâncias gerido (MIG), o MIG recria a VM se o estado da VM mudar de RUNNING e o MIG não tiver iniciado a alteração do estado.

    As alterações ao estado da instância que não são iniciadas pelo MIG incluem:

    compute.instances.hostError Evento do sistema

    Um erro de anfitrião (compute.instances.hostError) significa que ocorreu um problema de hardware ou software na máquina física ou na infraestrutura do centro de dados que aloja a sua instância de computação, o que fez com que a instância falhasse. Um erro do anfitrião que envolva uma falha de hardware total ou outros problemas de hardware pode impedir a migração em direto da sua instância. Se a sua instância estiver definida para ser reiniciada automaticamente, que é a predefinição, o Compute Engine reinicia a instância, normalmente, no prazo de três minutos a partir do momento em que o erro foi detetado. Consoante o problema, o reinício pode demorar até 5,5 minutos.

    Ocasionalmente, uma instância de computação pode deixar de responder antes de ser sinalizado um erro do anfitrião. Pode reduzir o tempo que o Compute Engine aguarda para reiniciar ou terminar a instância ao definir o limite de tempo de recuperação de erros do anfitrião. Para mais informações, consulte o artigo Defina políticas de disponibilidade.

    As falhas físicas de hardware e software podem ocorrer ocasionalmente, mas são raras. Para proteger as suas aplicações e serviços destes eventos do sistema potencialmente disruptivos, reveja os seguintes recursos:

    A Google também oferece serviços geridos, como o App Engine e o ambiente flexível do App Engine.

    compute.instances.automaticRestart Evento do sistema

    Este evento ocorre após um evento hostError ou um evento terminateOnHostMaintenance se a política de manutenção do anfitrião da sua VM estiver definida como true.automaticRestart Nos registos, uma entrada de registo hostError ou terminateOnHostMaintenance precede este registo.

    Se quiser alterar a política de manutenção do anfitrião da sua VM, consulte o artigo Atualizar opções de uma instância.

    compute.instances.guestTerminate Evento do sistema O sistema operativo da VM iniciou o encerramento.
    compute.instances.terminateOnHostMaintenance Evento do sistema

    Se definir a política de manutenção do anfitrião da VM como TERMINATE, o Compute Engine para a VM quando existir um evento de manutenção em que a Google tem de mover a VM para outro anfitrião.onHostMaintenance

    Se quiser alterar a onHostMaintenancepolítica da VM, consulte o artigo Atualizar opções de uma instância.

    compute.instances.preempted Evento do sistema

    O Compute Engine anulou a sua VM do Spot ou VM anulável antiga:

    • Quando o Compute Engine antecipa uma VM do Spot, o Compute Engine para ou elimina a VM do Spot com base na respetiva ação de encerramento. As VMs de spot não têm um tempo de execução máximo.
    • Quando o Compute Engine antecipa uma VM antecipável, o Compute Engine para a VM após um tempo de execução máximo de 24 horas. Para evitar estas limitações, use VMs de spot.

    As VMs de capacidade instantânea e as VMs preemptíveis são capacidade excessiva do Compute Engine, pelo que o Compute Engine pode preemptá-las em qualquer altura que essa capacidade seja necessária noutro local. Pode ajudar a mitigar os efeitos da preempção seguindo as práticas recomendadas. Em alternativa, se precisar de VMs com tempos de execução controlados pelo utilizador, crie VMs padrão em vez disso.

    compute.instances.stop Atividade do administrador

    Um utilizador ou uma conta de serviço parou a sua VM.

    Continue para o passo seguinte para identificar o utilizador ou a conta de serviço que parou a sua VM. Para obter informações sobre como reiniciar a VM, consulte o artigo Reiniciar uma instância parada.

    compute.instances.delete Atividade do administrador ou evento do sistema

    Um utilizador ou uma conta de serviço eliminou a sua VM, ou a VM foi configurada para ser eliminada automaticamente.

    Especificamente, um registo do método compute.instances.delete pode indicar qualquer um dos seguintes pedidos para a sua VM:

    • Os pedidos de um utilizador ou de uma conta de serviço para eliminar diretamente a sua VM são indicados apenas por um método compute.instances.delete do utilizador ou da conta de serviço.
    • Os pedidos que eliminam automaticamente a sua VM são indicados por um método compute.instances.delete de system@google.com, mas o método que explica a causa da eliminação automática pode ou não aparecer nos registos de auditoria do Cloud.

      Por exemplo, se uma VM Spot estiver configurada para ser eliminada automaticamente durante a preempção e for preempted, vê um método compute.instances.delete de system@google.com, mas também pode ver ou não um método compute.instances.preempted.

    • Os pedidos à VM que ocorreram pouco antes ou depois de um método compute.instances.delete podem ou não aparecer nos registos de auditoria da nuvem.

      Por exemplo, se uma VM for interrompida devido à manutenção do anfitrião pouco antes de ser eliminada, vê um método compute.instances.delete, mas também pode ver ou não um método compute.instances.terminateOnHostMaintenance.

    Continue para o passo seguinte para identificar o utilizador ou a conta de serviço que eliminou a sua VM. Para obter informações sobre como criar uma nova VM, consulte o artigo Criar e iniciar uma VM.

    compute.instances.insert Atividade do administrador

    A VM foi criada por um utilizador ou uma conta de serviço.

    Continue para o passo seguinte para identificar o utilizador ou a conta de serviço que criou a sua VM. Para obter informações sobre como criar uma nova VM, consulte o artigo Criar e iniciar uma VM.

    compute.instances.reset Atividade do administrador

    Um utilizador ou uma conta de serviço repôs a sua VM.

    Continue para o passo seguinte para identificar o utilizador ou a conta de serviço que parou a sua VM.

  2. Reveja os campos principalEmail dos registos de auditoria na nuvem para identificar o utilizador ou o serviço que iniciou o encerramento ou o reinício. A tabela seguinte inclui serviços geridos pela Google comuns que iniciam encerramentos ou reinícios.

    Email Descrição
    system@google.com Um evento do sistema causou o encerramento ou o reinício.
    project-number@cloudservices.gserviceaccount.com

    Um agente do serviço iniciou o encerramento.

    Para determinar a partir de que projeto o serviço iniciou o encerramento, reveja o project-number do agente do serviço.

    Para determinar que serviço Google fez o pedido, reveja o campo protoPayload.requestMetadata.callerSuppliedUserAgent.

    Se um utilizador tiver acionado o encerramento ou o reinício, o respetivo endereço de email é apresentado no campo principalEmail. Por exemplo, cloudysanfrancisco@gmail.com.

    Os administradores podem impedir que os utilizadores alterem o estado das VMs do projeto alterando as autorizações de gestão de identidades e acessos nas contas de utilizador. Para mais informações, consulte Conceder, alterar e revogar o acesso a recursos.

Monitorize eventos de ciclo de vida de VMs

Pode monitorizar eventos do ciclo de vida da VM (incluindo encerramentos, reinícios e erros do anfitrião) criando um painel de controlo do Cloud Monitoring.

Este painel de controlo permite-lhe visualizar os eventos do sistema e as atividades do administrador descritos mais detalhadamente na secção de revisão dos registos de auditoria deste documento.

Painel de controlo do ciclo de vida da VM: eventos de paragem e início Figura 1. Um painel de controlo de exemplo que mostra a disponibilidade de uma instância e os respetivos eventos do ciclo de vida, como uma instância parada.

Crie uma métrica baseada em registos

Para captar eventos do ciclo de vida da VM, crie uma métrica baseada em registos definida pelo utilizador. Esta métrica usa os registos de auditoria para manter a contagem do número de vezes que ocorreu um evento específico do ciclo de vida da VM.

Para obter as autorizações de que precisa para criar a métrica, peça ao seu administrador que lhe conceda a função de IAM de escritor de registos (roles/logging.logWriter) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

Crie uma métrica baseada em registos definida pelo utilizador fazendo o seguinte:

  1. Na Google Cloud consola, aceda à página Métricas baseadas em registos.

    Aceda a Métricas baseadas em registos

  2. Clique em Criar métrica.

Na secção Tipo de métrica, faça o seguinte:

  • Selecione Counter.
  • Mantenha a Distribuição na predefinição de não selecionada.

Na secção Detalhes, introduza as seguintes informações:

  • Nome da métrica baseada em registos: vm-lifecycle-events. Tem de usar este nome exato para que o painel de controlo funcione corretamente.
  • Descrição: opcional. Introduza uma descrição para esta métrica.
  • Unidades: 1
  1. Na secção Seleção de filtros, especifique o seguinte:

    • No menu Selecionar projeto ou contentor de registos, selecione: Registos do projeto
    • Em Criar filtro, introduza:
      resource.type = "gce_instance" AND
      log_id("cloudaudit.googleapis.com/activity") OR
      log_id("cloudaudit.googleapis.com/system_event")
      operation.first="true"
  2. Na secção Etiquetas, clique em Adicionar etiqueta.

  3. Especifique o seguinte:

    • Nome da etiqueta: method
    • Tipo de etiqueta: STRING
    • Nome do campo: protoPayload.methodName
    • Expressão regular:
      (recreateInstance|hostError|automaticRestart|guestTerminate|terminateOnHostMaintenance|preempted|insert|stop|delete|reset|start)
  4. Clique em Concluído

  5. Clique em Criar métrica.

Use o painel de controlo

Não são apresentados dados no painel de controlo até que uma instância tenha um evento do sistema ou uma atividade de administrador. Para testar se o painel de controlo funciona, execute uma atividade de administrador, como uma operação stop e start:

  1. Realize uma operação stop e start em qualquer instância existente ou crie uma nova VM para fins de teste.

Para receber as autorizações de que precisa para usar o painel de controlo, peça ao seu administrador para lhe conceder a função de IAM Visualizador do painel de controlo de monitorização (roles/monitoring.dashboardViewer) no projeto. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.

  1. Abra Painéis de controlo na Google Cloud consola.

    Aceder a Painéis de controlo

  2. No separador Lista de painéis de controlo, abra o painel de controlo GCE VM Lifecycle Events Monitoring.

  3. Selecione a VM no menu pendente Nome.

  4. Restrinja a série cronológica a um intervalo de tempo relevante.

    Para ver mais formas de filtrar o painel de controlo, consulte o artigo Adicione um filtro temporário.

O painel de controlo contém dois gráficos que apresentam uma cronologia dos eventos do sistema e das atividades do administrador que ocorrem numa instância:

  1. O gráfico Linha cronológica do ciclo de vida da VM apresenta o seguinte:

    • A métrica compute.googleapis.com/instance/uptime que indica se a VM estava em execução num determinado momento, em que 1 significa em funcionamento e 0 significa inativo. Tenha em atenção que esta métrica reflete a disponibilidade como resultado da atividade do utilizador e dos eventos do sistema, e não é uma indicação do ANS do Compute Engine.
    • A métrica baseada em registos para contar o número de ações do ciclo de vida, como stop ou start, que foram realizadas na instância num determinado momentovm-lifecycle-events
  2. O gráfico Eventos mostra a mesma métrica baseada em registos, mas numa vista ampliada para facilitar a leitura.vm-lifecycle-events Tenha em atenção que, embora os eixos X estejam alinhados, as cores não estão sincronizadas entre os dois gráficos.

Investigação do encerramento em massa de VMs em vários projetos

O Compute Engine pode encerrar várias VMs ligadas a um projeto anfitrião de VPC partilhada se a faturação do projeto anfitrião de VPC partilhada estiver inativa ou desativada.

Para determinar se as suas VMs foram encerradas por um pedido de encerramento em massa, procure operações de paragem iniciadas por cloud-cluster-manager@prod.google.com.

O início de uma instância afetada devolve um erro semelhante ao seguinte:

Starting instance(s) INSTANCE_NAME...failed.
ERROR: (gcloud.compute.instances.start) The default network interface [nic0] is frozen.

Para resolver este problema, faça o seguinte:

  1. Identifique a VPC partilhada usada pelas VMs através do comando gcloud compute instances describe:

    gcloud compute instances describe VM_NAME \
       --format="flattened(networkInterfaces[].network)"
    

    O resultado é semelhante ao seguinte:

    networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
    
  2. Verifique no projeto anfitrião da VPC partilhada se a faturação foi desativada.

    resource.type="project"
    protoPayload.request.@type="type.googleapis.com/google.internal.cloudbilling.billingaccount.v1.DisableResourceBillingRequest"
    protoPayload.response.resourceBillingInfo.billingAccountAssignmentType="DISABLED"
    
  3. Se aplicável, ative a faturação no projeto anfitrião.

Para ajudar a evitar que este problema se repita, leia o artigo Proteja a associação entre um projeto e a respetiva conta de faturação.