Risoluzione dei problemi di arresto e riavvio delle VM

Questo documento descrive le cause comuni di arresti e riavvii imprevisti delle istanze di macchine virtuali (VM) e come evitarli.

Gli arresti e i riavvii delle VM possono essere causati da eventi di sistema o da attività amministrative. Gli arresti e i riavvii degli eventi di sistema vengono generati dai sistemi Google o dal sistema operativo della VM. Gli arresti e i riavvii delle attività di amministrazione vengono generati da una chiamata API generata da un utente o da un account di servizio. Vengono registrati tutti gli arresti e i riavvii, ad eccezione di quelli avviati dall'interno della VM.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale viene verificata l'identità per l'accesso ai servizi e alle API Google Cloud. Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti in Compute Engine nel seguente modo.

    Seleziona la scheda relativa a come prevedi di utilizzare gli esempi in questa pagina:

    Console

    Quando utilizzi la console Google Cloud per accedere ai servizi e alle API di Google Cloud, non devi configurare l'autenticazione.

    gcloud

    1. Installa Google Cloud CLI, quindi initialize eseguendo questo comando:

      gcloud init
    2. Imposta una regione e una zona predefinite.

Diagnosi degli arresti e dei riavvii delle VM

Per diagnosticare la causa dell'arresto o del riavvio spontaneo di una VM, devi eseguire una query sui log della VM. Per identificare rapidamente la causa di futuri riavvii o arresti delle VM, crea una dashboard contenente i log. Dopo aver eseguito una query sui log, esamina i campi method e principalEmail per determinare quale evento e quale utente o servizio ha avviato l'arresto o il riavvio.

Esecuzione di query su Cloud Audit Logs

Esegui una query su Cloud Audit Logs per visualizzare un elenco degli eventi di sistema e delle attività di amministrazione che potrebbero aver causato l'arresto o il riavvio.

Console

  1. Nella console Google Cloud, vai alla pagina Esplora log.

    Vai a Esplora log

  2. Nel campo Query, inserisci la seguente query:

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

    Sostituisci VM_NAME con il nome della VM arrestata o riavviata.

  3. Se l'evento che stai cercando si è verificato più di un'ora fa, imposta un intervallo di tempo personalizzato facendo clic sul simbolo dell'orologio e inserendo un intervallo personalizzato.

    Imposta l'intervallo di tempo della query.

  4. Fai clic su Esegui query. I risultati vengono visualizzati nella sezione Risultati delle query.

  5. Fai clic sulla freccia di espansione accanto a ogni risultato per visualizzare informazioni dettagliate.

  6. Per saperne di più sui campi method e principalEmail associati a chiusure e riavvii e cosa puoi fare per evitarli, consulta Analisi di Cloud Audit Logs.

gcloud

  1. Visualizza Cloud Audit Logs utilizzando il 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")'
    

    Sostituisci quanto segue:

    • TIME: per quanto tempo vuoi eseguire query. Ad esempio, 1h query registra voci nell'ultima ora. Per informazioni sui formati di data e ora, consulta gcloud topic datetimes.
    • VM_NAME: il nome della VM che è stata arrestata o riavviata.

    Vengono visualizzati i risultati.

  2. Per saperne di più sui campi method e principalEmail associati a chiusure e riavvii e cosa puoi fare per evitarli, consulta Analisi di Cloud Audit Logs.

Analisi di Cloud Audit Logs

Esamina i campi method e principalEmail di Cloud Audit Logs per determinare il motivo per cui la tua VM è stata arrestata o riavviata.

  1. Esamina i campi method di Cloud Audit Logs e confrontali con i metodi elencati nella seguente tabella.

    Metodo Tipo di arresto Descrizione
    compute.instances.repair.recreateInstance Evento di sistema

    Se la tua VM appartiene a un gruppo di istanze gestite, il gruppo di istanze gestite ricrea la VM se lo stato cambia da RUNNING e il gruppo di istanze gestite non ha avviato la modifica dello stato.

    Le modifiche dello stato dell'istanza non avviate dal gruppo di istanze gestite includono:

    compute.instances.hostError Evento di sistema

    Un errore dell'host (compute.instances.hostError) indica che si è verificato un problema hardware o software sulla macchina fisica che ospita la VM e che ha causato l'arresto anomalo della VM. Un errore dell'host che comporta guasti hardware totali o altri problemi hardware potrebbe impedire la migrazione live della VM. Se la VM è impostata per il riavvio automatico (impostazione predefinita), Google riavvia la VM, in genere entro tre minuti dal rilevamento dell'errore. A seconda del problema, il riavvio potrebbe richiedere fino a 5,5 minuti.

    VM con dischi SSD locali

    Se si verifica un errore dell'host su una VM a cui sono collegati uno o più dischi SSD locali, Compute Engine fa il possibile per riconnettersi alla VM e conservare i dati dell'SSD locale. Mentre Compute Engine recupera la VM e il disco SSD locale, il sistema host e il disco sottostante non rispondono.

    Puoi specificare la quantità di tempo che Compute Engine trascorre nel tentativo di recuperare i dati degli SSD locali impostando il timeout del ripristino degli SSD locali.

    Per saperne di più sul comportamento dei dischi SSD locali quando si verifica un errore dell'host, consulta la pagina relativa alla persistenza dei dati SSD locali.

    VM che non rispondono

    A volte, una VM potrebbe non rispondere prima che venga rilevato un errore dell'host. Puoi ridurre il tempo di attesa di Compute Engine per il riavvio o la terminazione della VM impostando il timeout del ripristino degli errori dell'host (Anteprima). Per maggiori informazioni, consulta Impostare i criteri di disponibilità.

    I guasti fisici e software possono verificarsi occasionalmente, ma si verificano raramente. Per proteggere le tue applicazioni e i tuoi servizi da questi eventi di sistema potenzialmente dirompenti, esamina le seguenti risorse:

    Google offre inoltre servizi gestiti come App Engine e l'ambiente flessibile di App Engine.

    compute.instances.automaticRestart Evento di sistema

    Questo evento si verifica dopo un evento hostError o terminateOnHostMaintenance se il criterio di manutenzione dell'host automaticRestart della VM è impostato su true. Nei log, questo log è preceduto da una voce di log hostError o terminateOnHostMaintenance.

    Se vuoi modificare il criterio di manutenzione dell'host della VM, consulta Aggiornamento delle opzioni per un'istanza.

    compute.instances.guestTerminate Evento di sistema Il sistema operativo della tua VM ha avviato l'arresto.
    compute.instances.terminateOnHostMaintenance Evento di sistema

    Se imposti il criterio di manutenzione dell'host onHostMaintenance della VM su TERMINATE, Compute Engine interrompe la VM quando si verifica un evento di manutenzione in cui Google deve spostare la VM in un altro host.

    Se vuoi modificare il criterio onHostMaintenance della VM, consulta Aggiornamento delle opzioni per un'istanza.

    compute.instances.preempted Evento di sistema

    Compute Engine ha prerilasciato la tua VM spot o la VM prerilasciabile legacy:

    • Quando Compute Engine prerilascia una VM spot, Compute Engine interrompe o elimina la VM spot in base alla sua azione di terminazione. Le VM spot non hanno un tempo di esecuzione massimo.
    • Quando Compute Engine prerilascia una VM prerilasciabile, la VM viene arrestata dopo un tempo di esecuzione massimo di 24 ore. Per evitare queste limitazioni, utilizza invece le VM spot.

    Le VM spot e le VM prerilasciabili sono capacità di Compute Engine in eccesso, perciò Compute Engine potrebbe prerilasciarle ogni volta che questa capacità è necessaria altrove. Puoi contribuire a mitigare gli effetti del prerilascio seguendo le best practice. In alternativa, se hai bisogno di VM con runtime controllati dall'utente, crea VM standard.

    compute.instances.stop Attività di amministrazione

    Un account utente o di servizio ha arrestato la VM.

    Vai al passaggio successivo per identificare l'account utente o di servizio che ha arrestato la VM. Per informazioni sul riavvio della VM, consulta Riavvio di un'istanza arrestata.

    compute.instances.delete Attività di amministrazione

    Un account utente o di servizio ha eliminato la VM.

    Vai al passaggio successivo per identificare l'account utente o di servizio che ha eliminato la VM. Per informazioni sulla creazione di una nuova VM, consulta Creazione e avvio di una VM.

    compute.instances.insert Attività di amministrazione

    La VM è stata creata da un account utente o di servizio.

    Vai al passaggio successivo per identificare l'account utente o di servizio che ha creato la VM. Per informazioni sulla creazione di una nuova VM, consulta Creazione e avvio di una VM.

    compute.instances.reset Attività di amministrazione

    Un account utente o di servizio ha reimpostato la VM.

    Vai al passaggio successivo per identificare l'account utente o di servizio che ha arrestato la VM.

  2. Esamina i campi principalEmail di Cloud Audit Logs per identificare l'utente o il servizio che ha avviato l'arresto o il riavvio. La seguente tabella include servizi gestiti comuni da Google che avviano arresti o riavvii.

    Email Descrizione
    system@google.com Un evento di sistema ha causato l'arresto o il riavvio.
    project-number@cloudservices.gserviceaccount.com

    Un account di servizio gestito da Google ha avviato la chiusura.

    Per determinare da quale progetto il servizio ha avviato la chiusura, controlla il project-number dell'account di servizio.

    Per determinare quale servizio Google ha effettuato la richiesta, rivedi il campo protoPayload.requestMetadata.callerSuppliedUserAgent.

    Se un utente ha attivato la chiusura o il riavvio, il suo indirizzo email viene visualizzato nel campo principalEmail. Ad esempio, cloudysanfrancisco@gmail.com.

    Gli amministratori possono impedire agli utenti di modificare lo stato delle VM del progetto modificando le autorizzazioni di Identity and Access Management per gli account utente. Per maggiori informazioni, consulta Concessione, modifica e revoca dell'accesso alle risorse.

Monitora gli eventi del ciclo di vita delle VM

Puoi monitorare gli eventi del ciclo di vita delle VM (inclusi arresti, riavvii ed errori dell'host) creando una dashboard di Cloud Monitoring.

Questa dashboard consente di visualizzare gli eventi di sistema e le attività di amministrazione descritti in maggiore dettaglio nella sezione Analisi degli audit log del presente documento.

Dashboard del ciclo di vita delle VM: eventi di arresto e avvio Figura 1. Una dashboard di esempio che mostra la disponibilità di un'istanza e i relativi eventi del ciclo di vita, ad esempio un'istanza arrestata.

Crea metrica basata su log

Per acquisire gli eventi del ciclo di vita delle VM, crea una metrica basata su log definita dall'utente. Questa metrica utilizza gli audit log per tenere il conteggio del numero di volte in cui si è verificato un determinato evento del ciclo di vita di una VM.

Per ottenere le autorizzazioni necessarie per creare la metrica, chiedi all'amministratore di concederti il ruolo IAM Writer log (roles/logging.logWriter) per il progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Crea una metrica basata su log definita dall'utente seguendo questi passaggi:

  1. Nella console Google Cloud, vai alla pagina Metriche basate su log.

    Vai a Metriche basate su log

  2. Fai clic su Crea metrica.

Nella sezione Tipo di metrica, procedi nel seguente modo:

  • Seleziona Counter.
  • Lascia deselezionata l'impostazione predefinita per l'opzione Distribuzione.

Nella sezione Dettagli, inserisci le seguenti informazioni:

  • Nome metrica basata su log: vm-lifecycle-events. Per il corretto funzionamento della dashboard, devi utilizzare questo nome esatto.
  • Descrizione: (facoltativo) inserisci una descrizione per questa metrica.
  • Unità: 1
  1. Nella sezione Selezione filtro, specifica quanto segue:

    • Nel menu a discesa Seleziona ambito log, seleziona Log di progetto.
    • In Crea filtro, inserisci:
      resource.type = "gce_instance" AND
      log_id("cloudaudit.googleapis.com/activity") OR
      log_id("cloudaudit.googleapis.com/system_event")
      operation.first="true"
  2. Nella sezione Etichette, fai clic su Aggiungi etichetta.

  3. Specifica quanto segue:

    • Nome etichetta: method
    • Tipo di etichetta: STRING
    • Nome campo: protoPayload.methodName
    • Espressione regolare:
      (recreateInstance|hostError|automaticRestart|guestTerminate|terminateOnHostMaintenance|preempted|insert|stop|delete|reset|start)
  4. Fai clic su Fine

  5. Fai clic su Crea metrica.

Utilizzare la dashboard

Nella dashboard non vengono visualizzati dati finché una VM non riscontra un evento di sistema o un'attività di amministrazione. Per verificare che la dashboard funzioni, esegui un'attività di amministrazione, ad esempio un'operazione stop e start:

  1. Esegui un'operazione stop e start su qualsiasi VM esistente o crea una nuova VM a scopo di test.

Per ottenere le autorizzazioni necessarie per utilizzare la dashboard, chiedi all'amministratore di concederti il ruolo IAM Visualizzatore dashboard Monitoring (roles/monitoring.dashboardViewer) per il progetto. Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.

Potresti anche essere in grado di ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

  1. Apri le Dashboard nella console Google Cloud.

    Vai a Dashboard

  2. Dalla scheda Elenco dashboard, apri la dashboard GCE VM Lifecycle Events Monitoring.

  3. Seleziona la VM dal menu a discesa Nome.

  4. Restringi le serie temporali a un periodo di tempo pertinente.

    Per altri modi per filtrare la dashboard, consulta l'articolo Aggiungere un filtro temporaneo.

La dashboard contiene due grafici che mostrano una sequenza temporale degli eventi di sistema e delle attività di amministrazione che si verificano su una VM:

  1. Il grafico Sequenza temporale del ciclo di vita delle VM mostra quanto segue:

    • La metrica compute.googleapis.com/instance/uptime che indica se la VM era in esecuzione in un determinato momento, dove 1 è alto e 0 non funziona. Tieni presente che questa metrica riflette la disponibilità come risultato dell'attività utente'utente e degli eventi di sistema e non indica lo SLA di Compute Engine.
    • La metrica basata su log vm-lifecycle-events per conteggiare il numero di azioni del ciclo di vita, ad esempio stop o start, che sono state eseguite sulla VM in un determinato momento
  2. Il grafico Eventi mostra la stessa metrica basata su log vm-lifecycle-events, ma in una vista ingrandita per una migliore leggibilità. Tieni presente che, anche se gli assi X sono allineati, i colori non vengono sincronizzati tra i due grafici.

Indagine sull'arresto collettivo delle VM nei progetti

Compute Engine potrebbe arrestare più VM connesse a un progetto host del VPC condiviso se la fatturazione del progetto host del VPC condiviso è inattiva o disabilitata.

Per determinare se le tue VM sono state arrestate da una richiesta di arresto di massa, cerca le operazioni di arresto avviate da cloud-cluster-manager@prod.google.com.

L'avvio di un'istanza interessata restituisce un errore simile al seguente:

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

Per risolvere il problema:

  1. Identifica il VPC condiviso utilizzato dalle VM con il comando gcloud compute instances describe:

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

    L'output è simile al seguente:

    networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
    
  2. Verifica nel progetto host del VPC condiviso se la fatturazione è stata disabilitata.

    resource.type="project"
    protoPayload.request.@type="type.googleapis.com/google.internal.cloudbilling.billingaccount.v1.DisableResourceBillingRequest"
    protoPayload.response.resourceBillingInfo.billingAccountAssignmentType="DISABLED"
    
  3. Se applicabile, abilita la fatturazione nel progetto host.

Per evitare che questo problema si ripeta, consulta Proteggere il collegamento tra un progetto e il relativo account di fatturazione.