Recoger los volcados principales


Usa volcados del núcleo para analizar las causas de que una instancia de máquina virtual (VM) no responda.

Para recoger volcados del núcleo en Compute Engine, debes configurar tus máquinas virtuales para que reciban una señal de interrupción no enmascarable (NMI) y, a continuación, ejecutar un comando SendDiagnosticInterrupt para provocar un pánico del kernel o una pantalla azul en tu sistema operativo. Un pánico del kernel o una pantalla azul inician una colección de volcado del núcleo por parte del sistema operativo invitado. Estos volcados de memoria se pueden usar para depurar, sobre todo en situaciones difíciles de reproducir, como un bloqueo del kernel.

Antes de empezar

  • El envío de señales de NMI se contabiliza en la cuota de API Consultas predeterminada. Para obtener más información, consulta la página Límites de frecuencia de la API.
  • Si aún no lo has hecho, configura la autenticación. La autenticación verifica tu identidad para acceder a Google Cloud servicios y APIs. Para ejecutar código o ejemplos desde un entorno de desarrollo local, puedes autenticarte en Compute Engine seleccionando una de las siguientes opciones:

    Select the tab for how you plan to use the samples on this page:

    gcloud

    1. Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    2. Set a default region and zone.

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI. Después de la instalación, inicializa la CLI de Google Cloud ejecutando el siguiente comando:

      gcloud init

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticarse para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para asegurarte de que tu cuenta de usuario o de servicio tiene el permiso necesario para enviar señales NMI a una VM, pide a tu administrador que le conceda a tu cuenta de usuario o de servicio el rol de gestión de identidades y accesos Administrador de instancias de Compute (v. 1) (roles/compute.instanceAdmin.v1) en tu proyecto. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol predefinido contiene el permiso compute.instances.sendDiagnosticInterrupt , que es necesario para enviar señales NMI a una VM.

Es posible que tu administrador también pueda conceder este permiso a tu usuario o cuenta de servicio con roles personalizados u otros roles predefinidos.

Información general

Para usar los volcados de memoria para depurar una máquina virtual que no responde o un problema de seguridad, debes completar los siguientes pasos:

  1. Configura tu VM para generar volcados del núcleo
  2. Enviar una señal NMI para generar volcados del núcleo
  3. Revisa los volcados principales.

Limitaciones

En las VMs que tienen habilitado el arranque seguro, debes inhabilitarlo antes de enviar una señal de interrupción NMI. Para obtener instrucciones, consulta Modificar las opciones de VM blindada en una instancia de máquina virtual.

Configurar una VM

La respuesta de una VM al recibir una señal de interrupción NMI depende de la configuración del sistema operativo de la VM.

Cada sistema operativo escribe sus registros de volcado de memoria en una ubicación diferente. Por ejemplo, en los sistemas operativos Ubuntu, el archivo de volcado de memoria se guarda en /var/crash/ de forma predeterminada.

Para configurar tu SO invitado de forma que genere un volcado de memoria cuando se reciba una señal NMI, consulta la documentación del sistema operativo compatible.

Sistema operativo Enlaces a instrucciones Notas adicionales
Ubuntu Ubuntu: volcado de memoria tras un fallo del kernel En el caso de las máquinas virtuales Linux, debes configurar el kernel para que falle cuando reciba la señal de interrupción NMI.

Para configurar el kernel para que falle, añade lo siguiente a tu archivo de configuración:
kernel.unknown_nmi_panic=1
SUSE Linux Enterprise Server (SLES) Configurar la memoria de crashkernel para analizar el volcado de memoria del kernel
Red Hat Enterprise Linux (RHEL) Utiliza los dos documentos siguientes:
Container-Optimized OS (COS) Habilitar el volcado de memoria tras un fallo del kernel en instancias de COS de GCE Solo COS 93 y versiones posteriores admiten la generación de kdump mediante la señal NMI.
Windows Generar un volcado de memoria del kernel o un volcado de memoria completo

Las VMs de cliente Windows no conservan los archivos de volcado de memoria a menos que sean miembros de un dominio de AD o se cumpla lo siguiente:

  • El registro asigna el valor 1 a AlwaysKeepMemoryDump.
  • El disco tiene más de 25 GB de espacio libre

Para obtener más información, consulta el artículo Almacenamiento de volcado del kernel y comportamiento de limpieza en Windows 7.

Enviar una interrupción no enmascarable para generar volcados principales

Una vez que hayas configurado la VM, podrás enviarle la señal NMI mediante la CLI de Google Cloud o REST.

gcloud

Para enviar la señal NMI, usa el comando instances send-diagnostic-interrupt.

gcloud compute instances send-diagnostic-interrupt VM_NAME \
    --zone=ZONE

Haz los cambios siguientes:

  • VM_NAME: ID o nombre de la instancia de VM de la que quieras recoger los volcados principales
  • ZONE: la zona en la que se encuentra tu VM

El resultado debería ser similar al siguiente:

<Empty Response>

Para ver una lista completa de las salidas, consulta la siguiente sección de este documento sobre las respuestas de los comandos NMI.

REST

  1. Opcional. Si aún no la tienes, crea una clave de API. Para obtener más información sobre cómo crear claves de API, consulta el artículo Crear una clave de API.

  2. Para enviar la señal NMI, haz una solicitud POST al método sendDiagnosticInterrupt.

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/sendDiagnosticInterrupt?key=API_KEY
    

    Por ejemplo, puedes usar el comando curl para hacer la solicitud de la siguiente manera:

    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' \
      --compressed
    

    Haz los cambios siguientes:

    • PROJECT_ID: ID del proyecto en el que se creará la VM.
    • ZONE: la zona en la que se encuentra tu VM
    • VM_NAME: ID o nombre de la VM de la que quieras recoger los volcados principales
    • API_KEY: tu clave de API

    El resultado debería ser similar al siguiente:

    <Empty Response>

    Para ver una lista completa de las salidas, consulta la siguiente sección de este documento sobre las respuestas de los comandos NMI.

Respuestas a comandos NMI

Cuando intentas enviar una señal NMI, se devuelve una de las siguientes respuestas.

Estado Body Notas
SE HA REALIZADO CORRECTAMENTE <Empty Response> SUCCESS muestra que la señal NMI se envía al sistema operativo. No garantiza que se recoja el volcado del núcleo ni que la VM se apague o se reinicie. Estos comportamientos se determinan en la configuración del sistema operativo.
FAIL UNSUPPORTED_OPERATION Esto ocurre cuando el sistema operativo no recibe la señal NMI. Esto puede ocurrir por varios motivos. Los casos habituales son que la máquina virtual se esté migrando en directo o que no esté configurada correctamente para recibir señales NMI.
Para solucionar este problema, puedes probar lo siguiente:
  • Comprueba que la VM esté configurada correctamente. Consulta Configurar una máquina virtual.
  • Espera y vuelve a intentar la solicitud SendDiagnosticInterrupt.
FAIL Required 'compute.instances.sendDiagnosticInterrupt' permission for [..] Se ha producido un error en el comando porque el usuario que ha hecho la solicitud no tiene permisos suficientes.

Para solucionar este problema, puedes asignar al usuario un rol que contenga el permiso compute.instances.sendDiagnosticInterrupt.

Revisar volcados principales

Revisa el archivo de volcado de memoria en la ubicación configurada o predeterminada de tu sistema operativo.

Por ejemplo, en los sistemas operativos Ubuntu, el archivo de volcado de fallos se guarda de forma predeterminada en /var/crash/.