Solução de problemas de desligamentos e reinicializações de VM


Este documento descreve as causas comuns de desligamentos e reinicializações inesperados de instâncias do Compute Engine e como evitá-los.

Os encerramentos e reinicializações de instâncias podem ser causados ​​por eventos do sistema ou atividades administrativas. Os encerramentos e reinicializações de eventos do sistema são gerados pelos sistemas do Google ou pelo sistema operacional das suas instâncias. Os encerramentos e reinicializações de atividades administrativas são gerados por uma chamada de API gerada por uma conta de usuário ou de serviço. Todos os desligamentos e reinicializações são registrados, exceto as reinicializações que são iniciadas na instância.

Antes de começar

  • Se ainda não o fez, configure a autenticação. Autenticação é o processo pelo qual sua identidade é verificada para acesso a Google Cloud serviços e APIs. Para executar códigos ou amostras em um ambiente de desenvolvimento local, você pode se autenticar 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. After installing the Google Cloud CLI, initialize it by running the following command:

      gcloud init

      If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.

    2. Set a default region and zone.

Diagnosticando encerramentos e reinicializações de instâncias

Para diagnosticar a causa do encerramento ou reinicialização espontânea de uma instância, você deve consultar os logs das suas instâncias . Para identificar rapidamente a causa de futuros desligamentos ou reinicializações de VM, crie um painel que contenha os logs. Depois de consultar os logs, revise os campos method e principalEmail para determinar qual evento e qual usuário ou serviço iniciou o desligamento ou a reinicialização.

Consultando registros de auditoria da nuvem

Consulte os registros de auditoria da nuvem para exibir uma lista de eventos do sistema e atividades administrativas que podem ter causado o desligamento ou a reinicialização.

Console

  1. No console do Google Cloud, acesse a página do Logs Explorer .

    Acesse o Explorador de registros

  2. No campo Consulta , insira 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 reinicializada.

  3. Se o evento que você procura aconteceu há mais de uma hora, defina um período de tempo personalizado clicando no símbolo do relógio e inserindo um intervalo personalizado.

    Defina o período de consulta.

  4. Clique em Executar consulta . Os resultados são exibidos na seção Resultados da consulta .

  5. Clique na seta expansora ao lado de cada resultado para mostrar informações detalhadas.

  6. Consulte Revisando logs de auditoria de nuvem para saber mais sobre os campos method e principalEmail associados a desligamentos e reinicializações e o que você pode fazer para evitá-los.

gcloud

  1. Visualize os registros de auditoria da nuvem usando 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 : a quantidade de tempo que você deseja consultar. Por exemplo, 1h consulta entradas de log na última hora. Para obter informações sobre formatos de data e hora, consulte o tópico gcloud datetimes .
    • VM_NAME : o nome da VM que foi desativada ou reinicializada.

    Os resultados são exibidos.

  2. Consulte Revisando logs de auditoria de nuvem para saber mais sobre os campos method e principalEmail associados a desligamentos e reinicializações e o que você pode fazer para evitá-los.

Revisão dos registros de auditoria da nuvem

Revise os campos method e principalEmail dos registros de auditoria da nuvem para determinar por que sua VM foi desligada ou reinicializada.

  1. Revise os campos method dos registros de auditoria do Cloud e compare-os com os métodos listados na tabela a seguir.

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

    Se sua VM pertencer a um grupo de instâncias gerenciadas (MIG), o MIG recriará a VM se o estado da VM mudar de RUNNING e o MIG não tiver iniciado a mudança de estado.

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

    compute.instances.hostError Evento do sistema

    Um erro de host ( compute.instances.hostError ) significa que houve um problema de hardware ou software na máquina física ou na infraestrutura do data center que hospeda sua instância de computação que causou a falha da instância. Um erro de host envolvendo uma falha total de hardware ou outros problemas de hardware pode impedir a migração em tempo real da sua instância. Se a instância estiver configurada para reiniciar automaticamente, que é a configuração padrão, o Compute Engine a reiniciará, normalmente dentro de três minutos a partir do momento em que o erro foi detectado. Dependendo do problema, a reinicialização pode levar até 5,5 minutos.

    Ocasionalmente, uma instância de computação pode parar de responder antes que um erro de host seja sinalizado. Você pode reduzir o tempo que o Compute Engine espera para reiniciar ou encerrar a instância definindo o tempo limite de recuperação de erros do host. Para obter mais informações, consulte Definir políticas de disponibilidade .

    Falhas físicas de hardware e software podem acontecer ocasionalmente, mas são ocorrências raras. Para proteger seus aplicativos e serviços contra esses eventos de sistema potencialmente perturbadores, revise os seguintes recursos:

    O Google também oferece serviços gerenciados 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 host automaticRestart da sua VM estiver definida como true . Nos logs, uma entrada de log hostError ou terminateOnHostMaintenance precede esse log.

    Se você quiser alterar a política de manutenção do host da sua VM, consulte Atualizando opções para uma instância .

    compute.instances.guestTerminate Evento do sistema O sistema operacional da sua VM iniciou o desligamento.
    compute.instances.terminateOnHostMaintenance Evento do sistema

    Se você definir a política de manutenção do host onHostMaintenance da sua VM como TERMINATE , o Compute Engine interromperá sua VM quando houver um evento de manutenção em que o Google precise mover sua VM para outro host.

    Se você quiser alterar a política onHostMaintenance da sua VM, consulte Atualizando opções para uma instância .

    compute.instances.preempted Evento do sistema

    O Compute Engine interrompeu sua VM Spot ou VM preemptiva legada:

    • Quando o Compute Engine interrompe uma VM do Spot, ele interrompe ou exclui a VM do Spot com base na ação de encerramento . As VMs do Spot não têm um tempo de execução máximo.
    • Quando o Compute Engine interrompe uma VM preemptiva, o Compute Engine interrompe a VM após um tempo de execução máximo de 24 horas. Para evitar essas limitações, use VMs Spot.

    As VMs spot e as VMs preemptivas têm capacidade excessiva do Compute Engine, portanto, o Compute Engine pode preemptá-las sempre que a capacidade for necessária em outro lugar. Você pode ajudar a mitigar os efeitos da preempção seguindo as práticas recomendadas. Como alternativa, se você precisar de VMs com tempos de execução controlados pelo usuário, crie VMs padrão .

    compute.instances.stop Atividade administrativa

    Um usuário ou conta de serviço interrompeu sua VM.

    Continue na próxima etapa para identificar o usuário ou a conta de serviço que interrompeu sua VM. Para obter informações sobre como reiniciar sua VM, consulte Reiniciando uma instância interrompida .

    compute.instances.delete Atividade administrativa ou evento do sistema

    Um usuário ou conta de serviço excluiu sua VM ou a VM foi configurada para ser excluída automaticamente.

    Especificamente, um log para o método compute.instances.delete pode indicar qualquer uma das seguintes solicitações para sua VM:

    • As solicitações de um usuário ou conta de serviço para excluir diretamente sua VM são indicadas apenas por um método compute.instances.delete do usuário ou conta de serviço.
    • As solicitações que excluem automaticamente sua VM são indicadas por um método compute.instances.delete de system@google.com , mas o método que explica a causa da exclusão automática pode ou não aparecer nos registros de auditoria do Cloud.

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

    • As solicitações à VM que ocorreram pouco antes ou depois de um método compute.instances.delete podem ou não aparecer nos registros de auditoria do Cloud.

      Por exemplo, se uma VM for interrompida devido à manutenção do host pouco antes de a VM ser excluída, você verá um método compute.instances.delete , mas poderá ou não ver também um método compute.instances.terminateOnHostMaintenance .

    Passe para a próxima etapa para identificar o usuário ou a conta de serviço que excluiu sua VM. Para obter informações sobre como criar uma nova VM, consulte Criando e iniciando uma VM .

    compute.instances.insert Atividade administrativa

    Um usuário ou conta de serviço criou sua VM.

    Passe para a próxima etapa para identificar o usuário ou a conta de serviço que criou sua VM. Para obter informações sobre como criar uma nova VM, consulte Criando e iniciando uma VM .

    compute.instances.reset Atividade administrativa

    Um usuário ou conta de serviço redefiniu sua VM.

    Continue na próxima etapa para identificar o usuário ou a conta de serviço que interrompeu sua VM.

  2. Revise os campos principalEmail dos registros de auditoria da nuvem para identificar o usuário ou serviço que iniciou o desligamento ou a reinicialização. A tabela a seguir inclui serviços gerenciados comuns do Google que iniciam desligamentos ou reinicializações.

    E-mail Descrição
    system@google.com Um evento do sistema causou o desligamento ou a reinicialização.
    project-number @cloudservices.gserviceaccount.com

    Um agente de serviço iniciou o desligamento.

    Para determinar de qual projeto o serviço iniciou o encerramento, revise o project-number do agente de serviço.

    Para determinar qual serviço do Google fez a solicitação, revise o campo protoPayload.requestMetadata.callerSuppliedUserAgent .

    Se um usuário acionou o desligamento ou a reinicialização, seu endereço de e-mail aparecerá no campo principalEmail . Por exemplo, cloudysanfrancisco@gmail.com .

    Os administradores podem impedir que os usuários alterem o estado das VMs do projeto alterando as permissões de gerenciamento de identidade e acesso nas contas de usuário. Para obter mais informações, consulte Concedendo, alterando e revogando acesso a recursos .

Monitore eventos do ciclo de vida da VM

Você pode monitorar eventos do ciclo de vida da VM (incluindo desligamentos, reinicializações e erros de host) criando um painel do Cloud Monitoring.

Este painel permite visualizar eventos do sistema e atividades do administrador que são descritos com mais detalhes na seção Revisão de logs de auditoria deste documento.

Painel do ciclo de vida da VM: eventos de parada e início Figura 1. Painel de exemplo mostrando a disponibilidade de uma instância e seus eventos de ciclo de vida, como uma instância interrompida.

Criar métrica baseada em log

Para capturar eventos do ciclo de vida da VM, crie uma métrica baseada em log definida pelo usuário . Esta métrica utiliza registos de auditoria para manter a contagem do número de vezes que um determinado evento do ciclo de vida da VM ocorreu.

Para obter as permissões necessárias para criar a métrica, peça ao administrador que conceda a você a função do IAM Gravador de registros ( roles/logging.logWriter ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Você também poderá obter as permissões necessárias por meio de funções personalizadas ou outras funções predefinidas .

Crie uma métrica baseada em log definida pelo usuário fazendo o seguinte:

  1. No console do Google Cloud, acesse a página Métricas baseadas em registros .

    Vá para métricas baseadas em log

  2. Clique em Criar métrica .

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

  • Selecione Counter .
  • Deixe a distribuição com a configuração padrão desmarcada.

Na seção Detalhes , insira as seguintes informações:

  • Nome da métrica baseada em log : vm-lifecycle-events . Você deve usar esse nome exato para que o painel funcione corretamente.
  • Descrição : opcional — insira uma descrição para esta métrica.
  • Unidades : 1
  1. Na seção Seleção de filtro , especifique o seguinte:

    • No menu Selecionar projeto ou bucket de log , selecione: Logs do projeto
    • No filtro Build digite:
      resource.type = "gce_instance" AND
      log_id("cloudaudit.googleapis.com/activity") OR
      log_id("cloudaudit.googleapis.com/system_event")
      operation.first="true"
  2. Na seção Etiquetas , clique em Adicionar etiqueta .

  3. Especifique o seguinte:

    • Nome do rótulo : method
    • Tipo de rótulo : 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

Nenhum dado aparece no painel até que uma instância experimente um evento do sistema ou uma atividade do administrador. Para testar se o painel funciona, execute uma atividade de administrador, como uma operação stop e start :

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

Para obter as permissões necessárias para usar o painel, peça ao administrador para conceder a você a função do IAM de visualizador do painel de monitoramento ( roles/monitoring.dashboardViewer ) no projeto. Para obter mais informações sobre a concessão de funções, consulte Gerenciar acesso a projetos, pastas e organizações .

Você também poderá obter as permissões necessárias por meio de funções personalizadas ou outras funções predefinidas .

  1. Abra Painéis no console do Google Cloud.

    Vá para painéis

  2. Na guia Lista de painéis , abra o painel GCE VM Lifecycle Events Monitoring .

  3. Selecione a VM no menu suspenso Nome .

  4. Limite a série temporal a um período relevante.

    Para obter mais maneiras de filtrar o painel, consulte Adicionar um filtro temporário .

O painel contém dois gráficos que exibem uma linha do tempo de eventos do sistema e atividades do administrador que ocorrem em uma instância:

  1. O gráfico Linha do tempo do ciclo de vida da VM exibe o seguinte:

    • A métrica compute.googleapis.com/instance/uptime que indica se a VM estava em execução em um determinado momento, onde 1 está ativo e 0 está inativo. Observe que essa métrica reflete a disponibilidade como resultado da atividade do usuário e de eventos do sistema, e não é uma indicação do SLA do Compute Engine .
    • A métrica baseada em log vm-lifecycle-events para contar o número de ações do ciclo de vida, como stop ou start executadas na instância em um determinado momento
  2. O gráfico Eventos mostra a mesma métrica baseada em log vm-lifecycle-events , mas em uma visualização ampliada para facilitar a leitura. Observe que embora os eixos X estejam alinhados, as cores não estão sincronizadas entre os dois gráficos.

Investigando o desligamento em massa de VMs em projetos

O Compute Engine poderá encerrar várias VMs conectadas a um projeto host de VPC compartilhada se o faturamento do projeto host de VPC compartilhada estiver inativo ou desativado.

Para determinar se suas VMs foram encerradas por uma solicitação de desligamento em massa, procure operações de interrupção iniciadas por cloud-cluster-manager@prod.google.com .

Iniciar uma instância afetada retorna um erro semelhante a este:

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

Para resolver esse problema, faça o seguinte:

  1. Identifique a VPC compartilhada usada pelas VMs usando o comando gcloud compute instances describe :

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

    A saída é semelhante à seguinte:

    networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
    
  2. Verifique no projeto host da VPC compartilhada se o faturamento foi desativado.

    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 o faturamento no projeto host .

Para ajudar a evitar que esse problema se repita, leia Proteger o vínculo entre um projeto e sua conta de cobrança .