Utilizza i dump del core per analizzare le cause di un'istanza di una macchina virtuale (VM) che non risponde.
Per raccogliere i dump del core su Compute Engine, devi configurare le VM in modo che ricevano un segnale di interruzione non mascherabile (NMI), quindi eseguire un comando SendDiagnosticInterrupt
per attivare un panico del kernel o una schermata blu nel sistema operativo. Un panico del kernel o una schermata blu avviano una raccolta di dump del core da parte del sistema operativo guest. Questi dump del core possono essere utilizzati per scopi di debugging, in particolare in scenari difficili da riprodurre, come un blocco del kernel.
Prima di iniziare
- L'invio di indicatori NMI viene conteggiato nella quota predefinita dell'API Queries. Per maggiori informazioni, consulta Limiti di frequenza dell'API.
-
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:
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
REST
Per utilizzare gli esempi dell'API REST in questa pagina in un ambiente di sviluppo locale, utilizza le credenziali fornite a gcloud CLI.
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
Per ulteriori informazioni, consulta Eseguire l'autenticazione per l'utilizzo di REST nella documentazione Google Cloud sull'autenticazione.
-
Ruoli obbligatori
Per assicurarti che il tuo account utente o di servizio disponga dell'autorizzazione necessaria per inviare indicatori NMI a una VM,
chiedi all'amministratore di concedere al tuo account utente o di servizio il ruolo IAM Amministratore istanze Compute (v1) (roles/compute.instanceAdmin.v1
) nel tuo progetto.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Questo ruolo predefinito contiene l'autorizzazione compute.instances.sendDiagnosticInterrupt
, necessaria per inviare segnali NMI a una VM.
L'amministratore potrebbe anche assegnare questa autorizzazione al tuo account utente o di servizio con ruoli personalizzati o altri ruoli predefiniti.
Panoramica
Per utilizzare i dump del core per eseguire il debug di una VM non rispondente o di un problema di sicurezza, devi completare i seguenti passaggi:
- Configura la VM per generare dump del core
- Invia un segnale NMI per generare dump del core
- Esamina i dump del core
Limitazioni
Per le VM in cui è attivato l'avvio protetto, devi disattivarlo prima di inviare un segnale di interruzione NMI. Per le istruzioni, consulta Modifica delle opzioni delle VM schermate in un'istanza VM.
Configura la VM
La risposta di una VM alla ricezione di un segnale di interruzione NMI dipende dalla configurazione del sistema operativo della VM.
Ogni sistema operativo scrive i log del core dump in una posizione diversa. Ad esempio, nei sistemi operativi Ubuntu il file dump di arresto anomalo viene salvato in /var/crash/
per impostazione predefinita.
Per configurare il sistema operativo guest in modo da generare un dump di arresto anomalo quando viene ricevuto un segnale NMI, consulta la documentazione del sistema operativo supportato.
Sistema operativo | Link alle istruzioni | Note aggiuntive |
---|---|---|
Ubuntu | Ubuntu: dump del crash del kernel | Per le VM Linux, devi configurare il kernel in modo che abbia un arresto anomalo quando riceve il segnale di interruzione NMI. Per configurare il kernel in modo che abbia un arresto anomalo, aggiungi quanto segue al file di configurazione: kernel.unknown_nmi_panic=1 |
SUSE Linux Enterprise Server (SLES) | Configura la memoria crashkernel per l'analisi del dump del core del kernel | |
Red Hat Enterprise Linux (RHEL) | Utilizza entrambi i seguenti documenti: |
|
Container-Optimized OS (COS) | Abilitazione del dump del crash del kernel nelle istanze GCE COS | Solo COS 93 e versioni successive supportano la generazione di kdump utilizzando l'indicatore NMI. |
Windows | Generare un dump del kernel o un dump completo dell'arresto anomalo | Le VM client Windows non conservano i file di dump della memoria, a meno che non siano membri di un dominio AD o se si verificano le seguenti condizioni:
Per ulteriori informazioni, consulta Comportamento di archiviazione e pulizia dei dump del kernel in Windows 7 |
Invia NMI per generare dump del core
Dopo aver configurato la VM, puoi inviare il segnale NMI alla VM utilizzando Google Cloud CLI o REST.
Per inviare l'indicatore NMI, utilizza il
comando instances send-diagnostic-interrupt
.
gcloud compute instances send-diagnostic-interruptVM_NAME \ --zone=ZONE
Sostituisci quanto segue:
VM_NAME
: ID istanza o nome della VM da cui raccogliere i dump del coreZONE
: la zona in cui si trova la VM
L'output è simile al seguente:
<Empty Response>
Per un elenco completo degli output, consulta la sezione successiva di questo documento relativa alle "risposte ai comandi NMI".
Facoltativo. Se non è già disponibile, crea una chiave API. Per saperne di più sulla creazione delle chiavi API, consulta Creare una chiave API.
Per inviare l'indicatore NMI, invia una richiesta
POST
al metodosendDiagnosticInterrupt
.POST https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /instances/VM_NAME /sendDiagnosticInterrupt?key=API_KEY Ad esempio, puoi utilizzare il comando
curl
per effettuare la richiesta come segue:curl --request POST 'https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /instances/VM_NAME /sendDiagnosticInterrupt?key=API_KEY ' \ --header 'Authorization: Bearer $(gcloud auth print-access-token)' \ --header 'Accept: application/json' \ --compressedSostituisci quanto segue:
PROJECT_ID
: l'ID del progetto in cui creare la VMZONE
: la zona in cui si trova la VMVM_NAME
: ID istanza o nome della VM da cui raccogliere i dump del coreAPI_KEY
: la tua chiave API
L'output è simile al seguente:
<Empty Response>
Per un elenco completo degli output, consulta la sezione successiva di questo documento relativa alle "risposte ai comandi NMI".
Risposte ai comandi NMI
Quando provi a inviare un segnale NMI, viene restituita una delle seguenti risposte.
Stato | Corpo | Note |
---|---|---|
SUCCESS | <Empty Response> |
SUCCESS indica che il segnale NMI viene inviato al
sistema operativo. Non garantisce che il dump del core venga raccolto o che la VM si arresti o si riavvii. Questi comportamenti sono determinati dalla configurazione del sistema operativo. |
FAIL | UNSUPPORTED_OPERATION
|
Questo accade quando il sistema operativo non riesce a ricevere il segnale NMI. I motivi sono diversi. Gli scenari comuni sono che la VM è in fase di migrazione live o non è configurata correttamente per ricevere gli indicatori NMI.
Per risolvere il problema, puoi provare quanto segue:
|
FAIL | Required 'compute.instances.sendDiagnosticInterrupt' permission for [..]
|
Il comando non è riuscito perché l'utente che effettua la richiesta non dispone di autorizzazioni sufficienti. Per risolvere il problema, puoi assegnare all'utente un ruolo contenente l'autorizzazione compute.instances.sendDiagnosticInterrupt . |
Esamina i dump del core
Esamina il file dump dell'arresto anomalo nella posizione configurata o predefinita per il sistema operativo.
Ad esempio, nei sistemi operativi Ubuntu, per impostazione predefinita il file dump dell'arresto anomalo viene
salvato in /var/crash/
.