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 dovuti a eventi di sistema vengono generati dai sistemi Google o dal sistema operativo della tua VM. 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 dalla VM.
Prima di iniziare
-
Se non l'hai ancora fatto, configura l'autenticazione.
L'autenticazione è la procedura mediante la quale la tua identità viene verificata per l'accesso alle API e ai servizi 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
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Nella console Google Cloud, vai alla pagina Esplora log.
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.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.
Fai clic su Esegui query. I risultati vengono visualizzati nella sezione Risultati query.
Fai clic sulla freccia di espansione
accanto a ciascun risultato per visualizzare informazioni dettagliate.Consulta Esamina Cloud Audit Logs per saperne di più sui campi
method
eprincipalEmail
associati agli arresti e ai riavvii e su cosa puoi fare per evitarli.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 datetimes nell'argomento gcloud.VM_NAME
: il nome della VM che è stata arrestata o riavviata.
Vengono visualizzati i risultati.
Consulta Esamina Cloud Audit Logs per saperne di più sui campi
method
eprincipalEmail
associati agli arresti e ai riavvii e su cosa puoi fare per evitarli.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:
- Guasti hardware.
- Terminazione di un' istanza preassegnabile.
- Eventi di manutenzione dell'infrastruttura quando l'istanza VM non è impostata per la migrazione live.
- Eliminazione di un'istanza MIG utilizzando uno dei seguenti metodi:
- Il metodo dell'API
instances.delete
- Il comando
gcloud compute instances delete
- Il metodo dell'API
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 (anteprima). 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:
- Progettazione di sistemi solidi
- Pattern per app scalabili e resilienti
- Creazione di gruppi di istanze gestite
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 eventoterminateOnHostMaintenance
se il criterio di manutenzione dell'automaticRestart
host della VM è impostato sutrue
. Nei log, questa voce è preceduta da una voce di loghostError
oterminateOnHostMaintenance
.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 suTERMINATE
, 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 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 ogni volta che 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 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 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.
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 Identity and Access Management sugli account utente. Per ulteriori informazioni, consulta Concessione, modifica e revoca dell'accesso alle risorse.
Nella console Google Cloud, vai alla pagina Metriche basate su log.
Fai clic su Crea metrica.
- Seleziona
Counter
. - Lascia l'impostazione predefinita non selezionata per Distribuzione.
- Nome della metrica basata su log:
vm-lifecycle-events
. Devi utilizzare questo nome esatto affinché la dashboard funzioni correttamente. - Descrizione: (Facoltativo) inserisci una descrizione per questa metrica.
- Unità:
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"
Nella sezione Etichette, fai clic su Aggiungi etichetta.
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)
- Nome dell'etichetta:
Fai clic su Fine.
Fai clic su Crea metrica.
- Esegui un'operazione
stop
estart
su qualsiasi VM esistente o crea una nuova VM a scopo di test. Apri Dashboard nella console Google Cloud.
Dalla scheda Elenco dashboard, apri la dashboard
GCE VM Lifecycle Events Monitoring
.Seleziona la VM dal menu a discesa Nome.
Restringi la serie temporale a un periodo di tempo pertinente.
Per altri modi per filtrare la dashboard, consulta Aggiungere un filtro temporaneo.
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 indica che è attiva e 0 indica che è inattiva. Tieni presente che questa metrica riflette la disponibilità in base all'attività utente e agli eventi di sistema e non è un'indicazione dell'SLA di Compute Engine. - La metrica basata su log
vm-lifecycle-events
per conteggiare il numero di azioni di ciclo di vita, comestop
ostart
, eseguite sulla VM in un determinato momento
- La metrica
Il grafico Eventi mostra la stessa metrica basata su log
vm-lifecycle-events
, ma in una visualizzazione ingrandita per una maggiore leggibilità. Tieni presente che, anche se gli assi X sono allineati, i colori non sono sincronizzati tra i due grafici.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
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"
Se applicabile, abilita la fatturazione nel progetto host.
- Arresti e riavvii attivati da eventi di sistema:identifica le interruzioni avviate dai sistemi Google Cloud interni a causa di eventi di manutenzione del sistema, normali guasti hardware, vincoli delle risorse.
- Arresti/riavvii attivati da attività di amministrazione di sistema: esamina le interruzioni causate da azioni dirette, ad esempio chiamate API effettuate da utenti o account di servizio. Queste azioni possono includere arresti manuali, riavvii o processi automatici che influiscono sugli stati delle VM.
- Generare un testo non ufficiale dell'analisi RCA: fornisce un testo dettagliato dell'analisi della causa principale, che illustra la causa identificata dell'interruzione, i sistemi o le attività coinvolti e i consigli per evitare il verificarsi di nuovi casi, ove applicabile.
- Completa e poi copia il seguente comando.
- Apri la console Google Cloud e attiva Cloud Shell. Apri Cloud Console
- Incolla il comando copiato.
- Esegui il comando
gcpdiag
, che scarica l'immagine Dockergcpdiag
, quindi esegui i controlli diagnostici. Se applicabile, segui le istruzioni di output per risolvere i problemi relativi ai controlli non riusciti. - Copia ed esegui il seguente comando sulla tua workstation locale.
curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
- Esegui il comando
gcpdiag
../gcpdiag runbook gce/vm-termination \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE
- PROJECT_ID: l'ID del progetto contenente la risorsa
- VM_NAME: il nome della VM di destinazione all'interno del progetto.
- ZONE: la zona in cui si trova la VM di destinazione.
--universe-domain
: se applicabile, il dominio Trusted Partner Sovereign Cloud che ospita la risorsa--parameter
o-p
: parametri del runbook
Diagnosi degli arresti e dei riavvii delle VM
Per diagnosticare la causa dell'arresto o del riavvio spontanei di una VM, devi eseguire una query sui log della VM. Per identificare rapidamente la causa di eventuali arresti o riavvii futuri della VM, crea una dashboard contenente i log. Dopo aver eseguito la query sui log, esamina i campi
method
eprincipalEmail
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 di eventi di sistema e attività amministrative che potrebbero aver causato l'arresto o il riavvio.
Console
gcloud
Analisi di Cloud Audit Logs
Esamina i campi
method
eprincipalEmail
di Cloud Audit Logs per determinare perché la tua VM è stata arrestata o riavviata.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 gli eventi di sistema e le attività di amministrazione descritti in maggiore dettaglio nella sezione Esamina gli audit log di questo documento.
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 saperne di più 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:
Nella sezione Tipo di metrica:
Nella sezione Dettagli, inserisci le seguenti informazioni:
Utilizzare la dashboard
Nella dashboard non vengono visualizzati dati finché una VM non registra un evento di sistema o un'attività di amministrazione. Per verificare il funzionamento della dashboard, esegui un'attività di amministrazione, ad esempio un'operazione
stop
estart
: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 saperne di più 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.
La dashboard contiene due grafici che mostrano una cronologia degli eventi di sistema e delle attività di amministrazione che si verificano in una VM:
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:
Per evitare che il problema si ripresenti, consulta Proteggere il collegamento tra un progetto e il relativo account di fatturazione.
Indagine sui problemi di terminazione delle VM con gcpdiag
gcpdiag
è uno strumento open source. Non è un prodotto Google Cloud supportato ufficialmente. Puoi utilizzare lo strumentogcpdiag
per identificare e risolvere i problemi dei progetti Google Cloud. Per maggiori informazioni, consulta il progetto gcpdiag su GitHub.Questo runbook gcpdiag esamina i problemi di interruzione delle VM, esaminando le seguenti aree:Console Google Cloud
gcpdiag runbook gce/vm-termination \ --parameter project_id=PROJECT_ID \ --parameter name=VM_NAME \ --parameter zone=ZONE
Docker
Puoi eseguire
gcpdiag
utilizzando un wrapper che avviagcpdiag
in un container Docker. È necessario installare Docker o Podman.Visualizza i parametri disponibili per questo runbook.
Sostituisci quanto segue:
Flag utili:
Per un elenco e una descrizione di tutti i flag dello strumento
gcpdiag
, consulta le istruzioni per l'utilizzo digcpdiag
.Salvo quando diversamente specificato, i contenuti di questa pagina sono concessi in base alla licenza Creative Commons Attribution 4.0, mentre gli esempi di codice sono concessi in base alla licenza Apache 2.0. Per ulteriori dettagli, consulta le norme del sito di Google Developers. Java è un marchio registrato di Oracle e/o delle sue consociate.
Ultimo aggiornamento 2024-12-19 UTC.
-