Risoluzione dei problemi di arresto e riavvio delle VM


Questo documento descrive le cause comuni di arresti e riavvii imprevisti delle istanze Compute Engine e come evitarli.

Gli arresti e i riavvii delle istanze possono essere causati da eventi di sistema o da attività amministrative. Gli arresti e i riavvii dovuti a eventi di sistema vengono generati dai sistemi Google o dal sistema operativo delle tue istanze. Gli arresti e i riavvii dovuti ad attività amministrative vengono generati da una chiamata API dall'utente o dall'account di servizio. Vengono registrati tutti gli arresti e i riavvii, tranne i riavvii innescati dall'istanza.

Prima di iniziare

  • Se non l'hai ancora fatto, configura l'autenticazione. L'autenticazione è il processo mediante il quale la tua identità viene verificata per l'accesso a servizi e API. Google Cloud Per eseguire codice o esempi da un ambiente di sviluppo locale, puoi autenticarti su Compute Engine selezionando una delle seguenti opzioni:

    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.

Diagnostica degli arresti e dei riavvii delle istanze

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

Esecuzione di query su Cloud Audit Logs

Esegui una query su Cloud Audit Logs per visualizzare un elenco di eventi di sistema e attività amministrative 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 che è stata 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 query.

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

  6. Consulta Esamina Cloud Audit Logs per saperne di più sui campi method e principalEmail associati agli arresti e ai riavvii e su cosa puoi fare per evitarli.

gcloud

  1. Visualizza gli audit log di Cloud 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: il periodo di tempo per cui vuoi eseguire la query. Ad esempio, 1h esegue query sulle voci di log 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. Consulta Esamina Cloud Audit Logs per saperne di più sui campi method e principalEmail associati agli arresti e ai riavvii e su cosa puoi fare per evitarli.

Analisi di Cloud Audit Logs

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

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

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

    Se la VM appartiene a un gruppo di istanze gestite (MIG), il MIG rielabora la VM se lo stato della VM cambia da RUNNING e il MIG 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 o sull'infrastruttura del data center che ospita l'istanza di calcolo e che ne ha causato l'arresto anomalo. Un errore dell'host che coinvolge un guasto hardware totale o altri problemi hardware potrebbe impedire la migrazione live dell'istanza. Se l'istanza è impostata per il riavvio automatico, che è l'impostazione predefinita, Compute Engine la riavvia, in genere entro tre minuti dal rilevamento dell'errore. A seconda del problema, il riavvio potrebbe richiedere fino a 5,5 minuti.

    A volte, un'istanza di calcolo potrebbe non rispondere prima che venga segnalato un errore dell'host. Puoi ridurre il tempo di attesa di Compute Engine per riavviare o terminare l'istanza impostando il timeout per il recupero degli errori dell'host. Per ulteriori informazioni, consulta Impostare i criteri di disponibilità.

    A volte possono verificarsi guasti hardware e software fisici, ma si tratta di casi rari. Per proteggere le tue applicazioni e i tuoi servizi da questi eventi di sistema potenzialmente disgregatori, consulta le seguenti risorse:

    Google offre anche 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 un evento terminateOnHostMaintenance se il criterio di manutenzione dell'automaticRestart host della VM è impostato su true. Nei log, questa voce è preceduta da una voce hostError o terminateOnHostMaintenance.

    Se vuoi modificare il criterio di manutenzione dell'host della VM, consulta Opzioni di aggiornamento per un'istanza.

    compute.instances.guestTerminate Evento di sistema L'arresto è stato avviato dal sistema operativo della VM.
    compute.instances.terminateOnHostMaintenance Evento di sistema

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

    Se vuoi modificare il onHostMaintenance piano della tua VM, consulta Opzioni di aggiornamento per un'istanza.

    compute.instances.preempted Evento di sistema

    Compute Engine ha prerilasciato la tua VM Spot o la VM prerilasciabile precedente:

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

    Le VM spot e le VM prerilasciabili rappresentano la capacità in eccesso di Compute Engine, pertanto Compute Engine potrebbe prerilasciarle in qualsiasi momento se la capacità è necessaria altrove. Puoi contribuire a mitigare gli effetti della prelazione 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 interrotto la VM.

    Vai al passaggio successivo per identificare l'account utente o di servizio che ha arrestato la VM. Per informazioni su come riavviare la VM, consulta riavviare un'istanza arrestata.

    compute.instances.delete Attività di amministrazione o evento di sistema

    Un account utente o di servizio ha eliminato la VM o la VM è stata configurata per essere eliminata automaticamente.

    In particolare, un log per il metodo compute.instances.delete potrebbe indicare una delle seguenti richieste per la tua VM:

    • Le richieste di un account utente o di servizio di eliminare direttamente la VM sono indicate solo da un metodo compute.instances.delete dell'account utente o di servizio.
    • Le richieste che eliminano automaticamente la VM sono indicate da un metodo compute.instances.delete di system@google.com, ma il metodo che spiega la causa dell'eliminazione automatica potrebbe o meno essere visualizzato nei log di controllo di Cloud.

      Ad esempio, se una VM spot è configurata per essere eliminata automaticamente durante la preemption e viene prerilasciata, viene visualizzato un metodo compute.instances.delete da system@google.com, ma potresti o meno visualizzare anche un metodo compute.instances.preempted.

    • Le richieste alla VM avvenute poco prima o dopo un metodo compute.instances.delete potrebbero o meno essere visualizzate in Cloud Audit Logs.

      Ad esempio, se una VM viene interrotta a causa della manutenzione dell'host poco prima dell'eliminazione, viene visualizzato un metodo compute.instances.delete, ma potresti o meno vedere anche un metodo compute.instances.terminateOnHostMaintenance.

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

    compute.instances.insert Attività di amministrazione

    Un account utente o di servizio ha creato la VM.

    Vai al passaggio successivo per identificare l'utente o l'account di servizio che ha creato la VM. Per informazioni sulla creazione di una nuova VM, consulta Creare e avviare 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 tabella seguente include i servizi gestiti di Google più comuni 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 agente di servizio ha avviato l'arresto.

    Per determinare da quale progetto il servizio ha avviato l'interruzione, controlla il project-number dell'agente di servizio.

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

    Se un utente ha attivato l'arresto 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 gestione dell'identità e dell'accesso sugli account utente. Per ulteriori 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 ti consente di visualizzare eventi di sistema e attività di amministrazione che vengono descritti in modo più dettagliato nella sezione Revisione dei log di controllo di questo 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 i log di controllo per tenere conto del numero di volte in cui si è verificato un determinato evento del ciclo di vita della VM.

Per ottenere le autorizzazioni necessarie per creare la metrica, chiedi all'amministratore di concederti il ruolo IAM Scrittore di log (roles/logging.logWriter) nel progetto. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

Per creare una metrica basata su log definita dall'utente:

  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:

  • Seleziona Counter.
  • Lascia Distribuzione deselezionata per impostazione predefinita.

Nella sezione Dettagli, inserisci le seguenti informazioni:

  • Nome metrica basata su log: vm-lifecycle-events. Devi utilizzare questo nome esatto affinché la dashboard funzioni correttamente.
  • (Facoltativo) Descrizione: inserisci una descrizione per questa metrica.
  • Unità: 1
  1. Nella sezione Selezione filtro, specifica quanto segue:

    • Nel menu Seleziona il bucket di progetto o di 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 dell'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é un'istanza non registra un evento di sistema o un'attività dell'amministratore. Per verificare il funzionamento della dashboard, esegui un'attività di amministratore, ad esempio un'operazione stop e start:

  1. Esegui un'operazione stop e start su qualsiasi istanza 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 della dashboard di monitoraggio (roles/monitoring.dashboardViewer) nel progetto. Per ulteriori informazioni sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.

Potresti anche riuscire a ottenere le autorizzazioni richieste tramite i ruoli personalizzati o altri ruoli predefiniti.

  1. Apri Dashboard nella console Google Cloud.

    Accedi 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 la serie temporale a un periodo di tempo pertinente.

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

La dashboard contiene due grafici che mostrano una sequenza temporale degli eventi di sistema e delle attività di amministratore che si verificano in un'istanza:

  1. Il grafico Cronologia del ciclo di vita della 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 è attivo e 0 è inattivo. Tieni presente che questa metrica riflette la disponibilità come risultato dell'attività utente e degli eventi di sistema e non è un'indicazione del SLA di Compute Engine.
    • La metrica basata su log vm-lifecycle-events per conteggiare il numero di azioni di ciclo di vita, ad esempio stop o start, eseguite sull'istanza in un determinato momento
  2. Il grafico Eventi mostra la stessa metrica vm-lifecycle-events basata su log, ma in una visualizzazione ingrandita per una maggiore leggibilità. Tieni presente che, anche se gli assi X sono alinhati, i colori non sono sincronizzati tra i due grafici.

Indagine sull'arresto collettivo delle VM nei progetti

Compute Engine potrebbe arrestare più VM collegate 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 collettivo, 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 utilizzando 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 disattivata.

    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 il problema si ripresenti, consulta Proteggere il collegamento tra un progetto e il relativo account di fatturazione.