Neste documento, você verá as causas comuns de desligamentos e reinicializações inesperados de instâncias de máquina virtual (VM, na sigla em inglês) e como evitá-los.
Desligamentos e reinicializações da VM podem ser causados por eventos do sistema ou atividades do administrador. Desligamentos e reinicializações causados por eventos do sistema são gerados pelos sistemas do Google ou pelo sistema operacional da VM. Os encerramentos e reinicializações causados por atividades do administrador são gerados por uma chamada de API gerada pelo usuário ou pela conta de serviço. Todos as desligamentos e reinicializações são registrados, exceto as reinicializações que são iniciadas de dentro da VM.
Antes de começar
-
Configure a autenticação, caso ainda não tenha feito isso.
A autenticação é
o processo de verificação da sua identidade para acesso a serviços e APIs do Google Cloud.
Para executar códigos ou amostras de um ambiente de desenvolvimento local, autentique-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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
No console do Google Cloud, acesse a página do Explorador de registros.
No campo Consulta, digite 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 desligou ou foi reiniciada.Se o evento que você está procurando aconteceu há mais de uma hora, defina um período personalizado clicando no símbolo do relógio e inserindo um intervalo personalizado.
Clique em Run query. Os resultados são exibidos na seção Resultados da consulta.
Clique na seta de expansão
ao lado de cada resultado para mostrar informações detalhadas.Consulte Como analisar os registros de auditoria do Cloud para saber mais sobre os campos
method
eprincipalEmail
associados a desligamentos e reinicializações e o que é possível fazer para evitá-los.Visualize os registros de auditoria do Cloud 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:
TIME
: o intervalo de tempo que você quer consultar. Por exemplo,1h
consulta entradas de registro na última hora. Para informações sobre formatos de data e hora, consulte Data e hora no gcloud.VM_NAME
: o nome da VM que foi desligada ou reinicializada.
Os resultados serão exibidos.
Consulte Como analisar os registros de auditoria do Cloud para saber mais sobre os campos
method
eprincipalEmail
associados a desligamentos e reinicializações e o que é possível fazer para evitá-los.Revise os campos
method
do Cloud Audit Logging 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 a VM pertence a um grupo gerenciado de instâncias (MIG, na sigla em inglês), o MIG recriará a VM se o estado da VM mudar de
RUNNING
e o MIG não iniciou a alteração no estado.As alterações do estado da instância que não são iniciadas pelo MIG incluem:
- Falhas de hardware.
- Encerrar uma instância preemptiva.
- Eventos de manutenção de infraestrutura quando a instância de VM não está definida para migração em tempo real.
- Como excluir uma instância do MIG usando um dos seguintes métodos:
- O método da API
instances.delete
. - O comando
gcloud compute instances delete
- O método da API
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 a instância de computação que causou a falha dela. Um erro de host que envolve falha total de hardware ou outros problemas de hardware pode impedir a migração em tempo real da instância. Se a instância estiver configurada para reiniciar automaticamente, que é a configuração padrão, o Compute Engine vai reiniciar a instância, normalmente em 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 não responder antes que um erro do host seja sinalizado. É possível reduzir o tempo que o Compute Engine aguarda para reiniciar ou encerrar a instância definindo o tempo limite da recuperação de erros do host (Pré-lançamento). Para mais informações, consulte Definir políticas de disponibilidade.
Falhas físicas de hardware e software podem acontecer ocasionalmente, mas são raras. Para proteger aplicativos e serviços contra esses eventos de sistema potencialmente prejudiciais, analise os seguintes recursos:
- Como projetar sistemas robustos
- Padrões para apps escalonáveis e resilientes
- Como criar grupos de instâncias gerenciadas
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 Esse evento ocorrerá após um evento
hostError
outerminateOnHostMaintenance
se a política de manutenção do hostautomaticRestart
da VM estiver definida comotrue
. Nos registros, uma entradahostError
outerminateOnHostMaintenance
precede esse registro.Se você quiser alterar a política de manutenção do host da VM, consulte Como atualizar opções para uma instância.
compute.instances.guestTerminate
Evento do sistema O sistema operacional da VM iniciou o desligamento. compute.instances.terminateOnHostMaintenance
Evento do sistema Se você definir a política de manutenção do host
onHostMaintenance
da VM comoTERMINATE
, o Compute Engine interrompe a VM quando há um evento de manutenção em que o Google precise mover a VM para outro host.Se você quiser alterar a política
onHostMaintenance
da VM, consulte Como atualizar opções de uma instância.compute.instances.preempted
Evento do sistema O Compute Engine forçou a interrupção da VM do Spot ou da VM preemptiva legada:
- Quando o Compute Engine força a interrupção de uma VM do Spot, ele para ou exclui a VM do Spot com base na ação de encerramento. As VMs do Spot não têm tempo de execução máximo.
- Quando o Compute Engine força a interrupção de uma VM preemptiva, ele para a VM após um tempo de execução máximo de 24 horas. Para evitar essas limitações, use VMs do Spot.
As VMs do Spot e as VMs preemptivas são capacidade extra do Compute Engine. Por isso, o Compute Engine pode encerrá-las sempre que essa capacidade for necessária em outro lugar. É possível reduzir os efeitos da preempção seguindo as práticas recomendadas. Como alternativa, se você precisar de VMs com ambientes 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 a VM.
Passe para a próxima etapa para identificar a conta de serviço ou o usuário que interrompeu a VM. Para mais informações sobre como reiniciar a VM, consulte Como reiniciar uma instância interrompida.
compute.instances.delete
Atividade administrativa Um usuário ou conta de serviço excluiu a VM.
Passe para a próxima etapa para identificar a conta de serviço ou o usuário que excluiu a VM. Para informações sobre como criar uma nova VM, consulte Como criar e iniciar uma VM.
compute.instances.insert
Atividade administrativa Um usuário ou uma conta de serviço criou sua VM.
Passe para a próxima etapa para identificar a conta de serviço ou o usuário que criou a VM. Para informações sobre como criar uma nova VM, consulte Como criar e iniciar uma VM.
compute.instances.reset
Atividade administrativa Um usuário ou uma conta de serviço redefine a VM.
Passe para a próxima etapa para identificar a conta de serviço ou o usuário que interrompeu a VM.
Revise os campos
principalEmail
do Cloud Audit Logging para identificar o usuário ou serviço que iniciou o desligamento ou a reinicialização. A tabela a seguir inclui serviços comuns gerenciados pelo Google que iniciam reinicializações ou desligamentos.E-mail Descrição system@google.com
Um evento do sistema causou o desligamento ou 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 desligamento, 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 tiver acionado o encerramento ou a reinicialização, o endereço de e-mail dele 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 do Identity and Access Management nas contas de usuário. Saiba mais em Como conceder, alterar e revogar o acesso a recursos.
No console do Google Cloud, acesse a página Métricas com base em registros.
Clique em Criar métrica.
- Selecione
Counter
. - Deixe Distribuição com a configuração padrão desmarcada.
- Nome da métrica com base em registros:
vm-lifecycle-events
. Use esse nome exato para que o painel funcione corretamente. - Descrição (opcional): insira uma descrição para a métrica.
- Unidades:
1
Na seção Seleção de filtros, especifique o seguinte:
- No menu Selecionar bucket do projeto ou do registro, escolha: "Registros do projeto"
- Em Criar filtro, digite:
resource.type = "gce_instance" AND log_id("cloudaudit.googleapis.com/activity") OR log_id("cloudaudit.googleapis.com/system_event") operation.first="true"
Na seção Marcadores, clique em Adicionar marcador.
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)
- Nome do rótulo:
Clique em Concluir.
Clique em Criar métrica.
- Execute uma operação
stop
estart
em qualquer VM ou crie uma nova para fins de teste. Abra Painéis no console do Google Cloud.
Na guia Lista de painéis, abra o painel do
GCE VM Lifecycle Events Monitoring
.Selecione a VM no menu suspenso Nome.
Restrinja a série temporal a um período relevante.
Para conhecer outras formas de filtrar o painel, consulte Adicionar um filtro temporário.
O gráfico Cronograma do ciclo de vida da VM mostra o seguinte:
- A métrica
compute.googleapis.com/instance/uptime
que indica se a VM estava sendo executada em um determinado momento, em que 1 está ativo e 0 está inativo. 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 com base em registros
vm-lifecycle-events
para contar o número de ações do ciclo de vida, comostop
oustart
, que foram realizadas na VM em um determinado momento
- A métrica
O gráfico de eventos mostra a mesma métrica com base em registros do
vm-lifecycle-events
, mas em uma visualização ampliada para facilitar a leitura. Embora os eixos X estejam alinhados, as cores não são sincronizadas entre os dois gráficos.Identifique a VPC compartilhada usada pelas VMs com o comando
gcloud compute instances describe
:gcloud compute instances describe VM_NAME \ --format="flattened(networkInterfaces[].network)"
O resultado será assim:
networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
Verifique no projeto host da VPC compartilhada se o faturamento tiver sido desativado.
resource.type="project" protoPayload.request.@type="type.googleapis.com/google.internal.cloudbilling.billingaccount.v1.DisableResourceBillingRequest" protoPayload.response.resourceBillingInfo.billingAccountAssignmentType="DISABLED"
Se aplicável, ative o faturamento no projeto host.
- Desligamentos e reinicializações causados por eventos do sistema:identifica encerramentos iniciados por sistemas internos do Google Cloud devido a eventos de manutenção do sistema, falhas normais de hardware e restrições de recursos.
- Desligamentos/reinicializações acionados por atividades do administrador do sistema:investiga encerramentos causados por ações diretas, como chamadas de API feitas por usuários ou contas de serviço. Essas ações podem incluir desligamentos manuais, reinicializações ou processos automatizados que afetam os estados da VM.
- Geração de texto de RCA não oficial:fornece um texto detalhado de análise de causa raiz, descrevendo a causa identificada da interrupção, os sistemas ou atividades envolvidos e recomendações para evitar ocorrências futuras, quando aplicável.
- Preencha e copie o comando a seguir.
- Abra o console do Google Cloud e ative o Cloud Shell. Abrir Console do Cloud
- Cole o comando copiado.
- Execute o comando
gcpdiag
, que faz o download da imagem Dockergcpdiag
. e realiza verificações de diagnóstico. Se aplicável, siga as instruções de saída para corrigir verificações com falha. - Copie e execute o seguinte comando na estação de trabalho local.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Execute o comando
gcpdiag
../gcpdiag runbook gce/vm-termination \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE
- PROJECT_ID: o ID do projeto que contém o recurso
- VM_NAME: o nome da VM de destino no seu projeto.
- ZONE: a zona em que a VM de destino está localizada.
--universe-domain
: se aplicável, a Nuvem soberana de parceiro confiável que hospeda o recurso--parameter
ou-p
: parâmetros do runbook
Como diagnosticar desligamentos e reinicializações da VM
Para diagnosticar a causa do desligamento ou da reinicialização espontânea de uma VM, é necessário consultar os registros da VM. Para identificar rapidamente a causa de futuros desligamentos ou reinicializações da VM, crie um painel que contenha os registros. Depois de consultar os registros, revise os campos
method
eprincipalEmail
para determinar qual evento e qual usuário ou serviço iniciou o encerramento ou a reinicialização.Como consultar o Cloud Audit Logging
Consulte o Cloud Audit Logging para ver uma lista de eventos do sistema e atividades do administrador que podem ter causado o desligamento ou a reinicialização.
Console
gcloud
Como analisar o Cloud Audit Logging
Revise os campos
method
eprincipalEmail
do Cloud Audit Logging para determinar o motivo pelo qual a VM foi desligada ou reinicializada.Monitorar eventos do ciclo de vida da VM
É possível monitorar eventos de ciclo de vida de VMs (incluindo desligamentos, reinicializações e erros do host) criando um painel do Cloud Monitoring.
Esse painel permite visualizar eventos do sistema e atividades do administrador, que são descritos em mais detalhes na seção Como analisar registros de auditoria deste documento.
Figura 1. Um exemplo de painel que mostra a disponibilidade de uma instância e os eventos de ciclo de vida dela, como uma instância interrompida.
Criar métrica com base em registros
Para capturar eventos de ciclo de vida da VM, crie uma métrica com base em registros definida pelo usuário. Essa métrica usa registros de auditoria para registrar quantas vezes ocorreu um determinado evento de ciclo de vida da VM.
Para receber as permissões necessárias para criar a métrica, peça ao administrador para conceder a você o Gravador de registros (
roles/logging.logWriter
) do IAM um papel no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
Para criar uma métrica com base em registros definida pelo usuário, faça o seguinte:
Na seção Tipo de métrica, faça o seguinte:
Na seção Detalhes, digite o seguinte:
Usar o painel
Nenhum dado vai aparecer no painel até que uma VM apresente 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
estart
:Para receber as permissões necessárias para usar o painel, peça ao administrador para conceder a você o papel Leitor do painel do Monitoring (
roles/monitoring.dashboardViewer
) do IAM no projeto. Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.
O painel contém dois gráficos que exibem uma linha do tempo de eventos do sistema e atividades de administração que ocorrem em uma VM:
Investigação em massa do encerramento da VM entre projetos
O Compute Engine pode encerrar várias VMs conectadas a um projeto host da VPC compartilhada se o faturamento do projeto host estiver inativo ou desativado.
Para determinar se as VMs foram encerradas por uma solicitação de encerramento em massa, procure as operações de parada iniciadas por
cloud-cluster-manager@prod.google.com
.Iniciar uma instância afetada retorna 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 esse problema, faça o seguinte:
Para ajudar a evitar que esse problema ocorra novamente, leia Proteger o vínculo entre um projeto e a conta de faturamento.
Como investigar problemas de encerramento de VM com o gcpdiag
gcpdiag
é uma ferramenta de código aberto. Não é um produto do Google Cloud oficialmente compatível. Use a ferramentagcpdiag
para identificar e corrigir problemas no projeto do Google Cloud. Para mais informações, consulte o projeto gcpdiag no GitHub.Este runbook do gcpdiag investiga problemas de encerramento de VM, examinando as seguintes áreas:Console do Google Cloud
gcpdiag runbook gce/vm-termination \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE
Docker
Você pode executar
gcpdiag
usando um wrapper que iniciagcpdiag
em um contêiner do Docker. Docker ou Podman precisa ser instalado.Veja os parâmetros disponíveis para este runbook.
Substitua:
Flags úteis
Para conferir uma lista e descrição de todas as flags da ferramenta
gcpdiag
, consulte Instruções de uso dogcpdiag
.Exceto em caso de indicação contrária, o conteúdo desta página é licenciado de acordo com a Licença de atribuição 4.0 do Creative Commons, e as amostras de código são licenciadas de acordo com a Licença Apache 2.0. Para mais detalhes, consulte as políticas do site do Google Developers. Java é uma marca registrada da Oracle e/ou afiliadas.
Última atualização 2024-12-22 UTC.
-