Solución de problemas de apagado y reinicio de las VM


En este documento, se describen las causas comunes de apagados y reinicios inesperados de las instancias de máquina virtual (VM) y cómo evitarlos.

Los apagados y reinicios de la VM pueden ser ocasionados por eventos del sistema o actividades de administrador. Los sistemas de Google o el sistema operativo de tu VM generan los apagados y reinicios de los eventos del sistema. Los apagados y reinicios de la actividad de administrador se generan mediante una llamada a la API generada por el usuario o la cuenta de servicio. Se registran todos los apagados y reinicios, excepto los reinicios que se inician desde la VM.

Antes de empezar

  • Configura la autenticación si aún no lo hiciste. La autenticación es el proceso mediante el cual se verifica tu identidad para acceder a los servicios y las API de Google Cloud. Para ejecutar código o muestras desde un entorno de desarrollo local, puedes autenticarte en Compute Engine de la siguiente manera.

    Selecciona la pestaña para saber cómo planeas usar las muestras en esta página:

    Consola

    Cuando usas la consola de Google Cloud para acceder a los servicios y las APIs de Google Cloud, no necesitas configurar la autenticación.

    gcloud

    1. Instala Google Cloud CLI y, luego, inicializa la ejecución del siguiente comando:

      gcloud init
    2. Configura una región y una zona predeterminadas.

Diagnóstico reinicios y apagados de VM

Para diagnosticar la causa del cierre o reinicio automático de una VM, debes consultar los registros de la VM. Para identificar con rapidez la causa de los cierres o reinicios futuros de la VM, crea un panel que contenga los registros. Después de consultar los registros, revisa los campos method y principalEmail para determinar qué usuario o servicio inició el apagado o reinicio.

Consulta registros de auditoría de Cloud

Consulta los registros de auditoría de Cloud para mostrar una lista de los eventos del sistema y las actividades de administrador que podrían haber causado el apagado o el reinicio.

Consola

  1. En la consola de Google Cloud, ve a la página Explorador de registros.

    Ir al Explorador de registros

  2. En el campo Consulta, escribe la siguiente consulta:

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

    Reemplaza VM_NAME por el nombre de la VM que se cerró o reinició.

  3. Si el evento que buscas ocurrió hace más de una hora, establece un período personalizado haciendo clic en el símbolo del reloj y, luego, escribe un rango personalizado.

    Establecer el período de la búsqueda.

  4. Haga clic en Run query. Los resultados se muestran en la sección Resultados de la búsqueda.

  5. Haz clic en la flecha desplegable junto a cada resultado para mostrar información detallada.

  6. Consulta Revisa los registros de auditoría de Cloud para obtener más información sobre los campos method y principalEmail que están asociados con cierres y reinicios, y qué puedes hacer para evitarlos.

gcloud

  1. Visualiza los Registros de auditoría de Cloud con el 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")'
    

    Reemplaza lo siguiente:

    • TIME: es la cantidad de tiempo que deseas consultar. Por ejemplo, 1h consulta las entradas de registro en la última hora. Para obtener más información sobre los formatos de fecha y hora, consulta gcloud topic datetime.
    • VM_NAME: es el nombre de la VM que se cierra o reinicia.

    Se muestran los resultados.

  2. Consulta Revisa los registros de auditoría de Cloud para obtener más información sobre los campos method y principalEmail que están asociados con cierres y reinicios, y qué puedes hacer para evitarlos.

Revisa los registros de auditoría de Cloud

Revisa los campos method y principalEmail de los registros de auditoría de Cloud para determinar por qué se cerró o reinició tu VM.

  1. Revisa los campos method de los registros de auditoría de Cloud y compáralos con los métodos que se detallan en la siguiente tabla.

    Método Tipo de cierre Descripción
    compute.instances.repair.recreateInstance Evento del sistema

    Si tu VM pertenece a un grupo de instancias administrado (MIG), el MIG vuelve a crear la VM si el estado de la VM cambia de RUNNING y el MIG no inició el cambio en el estado.

    Dentro de los cambios del estado de la instancia que el MIG no inicia, se incluyen los siguientes:

    compute.instances.hostError Evento del sistema

    Un error de host (compute.instances.hostError) significa que hubo un problema de hardware o software en la máquina física que aloja tu VM que causó la falla. Un error de host que implica una falla total de hardware o, también, otros problemas de hardware podría evitar la migración en vivo de la VM. Si la VM está configurada para reiniciarse de manera automática, que es la configuración predeterminada, Google reinicia la VM, por lo general, dentro de los tres minutos posteriores a la detección del error. Según el problema, el reinicio puede tardar hasta 5.5 minutos.

    VMs con discos SSD locales

    Si se produce un error de host en una VM que tiene uno o más discos SSD locales conectados, Compute Engine vuelve a conectarse a la VM y preservar los datos del SSD local. Mientras Compute Engine recupera tu VM y el disco SSD local, el sistema host y el disco subyacente no responden.

    Puedes especificar cuánto tiempo dedica Compute Engine a recuperar datos de SSD locales configurando el tiempo de espera de recuperación de SSD local.

    Para obtener más información sobre cómo se comportan los discos SSD locales cuando se produce un error de host, consulta la persistencia de datos de SSD local.

    VMs que no responden

    En ocasiones, una VM puede dejar de responder antes de que se detecte un error de host. Puedes reducir el tiempo que Compute Engine espera para reiniciar o finalizar la VM si configuras el tiempo de espera de recuperación de errores del host (Vista previa). Para obtener más información, consulta Configura políticas de disponibilidad.

    Las fallas físicas de hardware y software pueden ocurrir de forma ocasional, pero son casos poco frecuentes. Para proteger tus aplicaciones y servicios de estos eventos del sistema que pueden ser disruptivos, revisa los siguientes recursos:

    Google también ofrece servicios administrados como App Engine y el entorno flexible de App Engine.

    compute.instances.automaticRestart Evento del sistema

    Este evento ocurre después de un evento hostError o terminateOnHostMaintenance si la política de mantenimiento del host automaticRestart de la VM se establece en true. En los registros, una entrada de registro hostError o terminateOnHostMaintenance precede a este registro.

    Si deseas cambiar la política de mantenimiento del host de tu VM, consulta Actualiza las opciones de una instancia.

    compute.instances.guestTerminate Evento del sistema El sistema operativo de la VM inició el cierre.
    compute.instances.terminateOnHostMaintenance Evento del sistema

    Si configuras la política de mantenimiento del host onHostMaintenance de la VM como TERMINATE, Compute Engine detiene la VM cuando hay un evento de mantenimiento en el que Google debe transferir la VM a otro host.

    Si deseas cambiar la política onHostMaintenance de tu VM, consulta Actualiza opciones para una instancia.

    compute.instances.preempted Evento del sistema

    Compute Engine interrumpió tu VM Spot o VM interrumpible heredada:

    • Cuando Compute Engine interrumpe una VM Spot, Compute Engine detiene o borra la VM Spot según su acción de finalización. Las VM Spot no tienen un tiempo de ejecución máximo.
    • Cuando Compute Engine interrumpe una VM interrumpible, Compute Engine detiene la VM después de un tiempo de ejecución máximo de 24 horas. Para evitar estas limitaciones, usa las VM Spot.

    Las VM Spot y VM interrumpibles son una capacidad de exceso de Compute Engine, por lo que Compute Engine podría interrumpirlas cada vez que se necesite capacidad en otro lugar. Puedes ayudar a mitigar los efectos de la interrupción si sigues las prácticas recomendadas. Como alternativa, si necesitas VM con entornos de ejecución controlados por el usuario, crea VM estándar.

    compute.instances.stop Actividad del administrador

    Un usuario o una cuenta de servicio detuvo la VM.

    Continúa con el paso siguiente para identificar al usuario o la cuenta de servicio que detuvo tu VM. Para obtener información sobre cómo reiniciar tu VM, consulta Reinicia una instancia detenida.

    compute.instances.delete Actividad del administrador

    Un usuario o una cuenta de servicio borró tu VM.

    Continúa con el paso siguiente para identificar al usuario o la cuenta de servicio que borró tu VM. Para obtener más información sobre cómo crear una VM nueva, consulta Crea y, luego, inicia una VM.

    compute.instances.insert Actividad del administrador

    Un usuario o una cuenta de servicio creó tu VM.

    Continúa con el paso siguiente para identificar al usuario o la cuenta de servicio que creó tu VM. Para obtener más información sobre cómo crear una VM nueva, consulta Crea y, luego, inicia una VM.

    compute.instances.reset Actividad del administrador

    Un usuario o una cuenta de servicio restablece tu VM.

    Continúa con el paso siguiente para identificar al usuario o la cuenta de servicio que detuvo tu VM.

  2. Revisa los campos principalEmail de los registros de auditoría de Cloud para identificar al usuario o servicio que inició el cierre o el reinicio. En la siguiente tabla, se incluyen servicios administrados por Google comunes que inician cierres o reinicios.

    Correo electrónico Descripción
    system@google.com Un evento del sistema provocó el cierre o el reinicio.
    project-number@cloudservices.gserviceaccount.com

    Una cuenta de servicio administrada por Google inició el cierre.

    Para determinar desde qué proyecto inició el cierre del servicio, revisa el project-number de la cuenta de servicio.

    Para determinar qué servicio de Google realizó la solicitud, revisa el campo protoPayload.requestMetadata.callerSuppliedUserAgent.

    Si un usuario activó el cierre o el reinicio, su dirección de correo electrónico aparecerá en el campo principalEmail. Por ejemplo, cloudysanfrancisco@gmail.com

    Los administradores pueden impedir que los usuarios cambien el estado de las VM de los proyectos si cambian los permisos de Identity and Access Management en las cuentas de usuario. Para obtener más información, consulta Otorga, cambia y revoca el acceso a los recursos.

Supervisa eventos de ciclo de vida de la VM

Puedes crear un panel de Cloud Monitoring para supervisar los eventos del ciclo de vida de la VM (incluidos los cierres, reinicios y errores del host).

Este panel te permite visualizar eventos del sistema y actividades de administrador que se describen con más detalle en la sección Revisa los registros de auditoría de este documento.

Panel del ciclo de vida de la VM: Eventos de inicio y detención Figura 1. Un panel de ejemplo que muestra la disponibilidad de una instancia y sus eventos de ciclo de vida, como una instancia detenida.

Crear métrica basada en registros

Para capturar eventos del ciclo de vida de la VM, crea una métrica basada en registros definida por el usuario. Esta métrica usa los registros de auditoría para mantener la cantidad de veces que se produjo un evento de ciclo de vida de la VM en particular.

Para obtener los permisos que necesitas para crear la métrica, pídele a tu administrador que te otorgue el rol de IAM Escritor de registros (roles/logging.logWriter) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

Crea una métrica basada en registros definida por el usuario siguiendo estos pasos:

  1. En la consola de Google Cloud, ve a la página Métricas basadas en registros.

    Ve a Métricas basadas en registros

  2. Haz clic en Crear métrica.

En la sección Tipo de métrica, haz lo siguiente:

  • Seleccione Counter.
  • Deja la Distribución en el parámetro de configuración predeterminado sin elegir.

En la sección Detalles, escribe lo siguiente:

  • Nombre de la métrica basada en registros: vm-lifecycle-events. Debes usar este nombre exacto para que el panel funcione correctamente.
  • Descripción: (Opcional) escribe una descripción para esta métrica.
  • Unidades: 1
  1. En la sección Selección de filtro, especifica lo siguiente:

    • En el menú desplegable Elige el permiso del registro, elige lo siguiente: Registros del proyecto
    • En Crear filtro, escribe lo siguiente:
      resource.type = "gce_instance" AND
      log_id("cloudaudit.googleapis.com/activity") OR
      log_id("cloudaudit.googleapis.com/system_event")
      operation.first="true"
  2. En la sección Etiquetas, haz clic en Agregar etiqueta.

  3. Especifica lo siguiente:

    • Nombre de etiqueta: method
    • Tipo de etiqueta: STRING
    • Nombre del campo: protoPayload.methodName
    • Expresión regular:
      (recreateInstance|hostError|automaticRestart|guestTerminate|terminateOnHostMaintenance|preempted|insert|stop|delete|reset|start)
  4. Haga clic en Listo.

  5. Haga clic en Crear métrica.

Usa el panel

No aparecerán datos en el panel hasta que una VM experimente un evento del sistema o una actividad de administrador. Para probar que el panel funciona, realiza una actividad de administrador, como una operación stop y start:

  1. Realiza una operación stop y start en cualquier VM existente o crea una VM nueva para realizar pruebas.

Para obtener los permisos que necesitas para usar el panel, pídele a tu administrador que te otorgue el rol de IAM Lector de configuración del panel de Monitoring (roles/monitoring.dashboardViewer) en el proyecto. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso.

También puedes obtener los permisos necesarios mediante roles personalizados o cualquier otro rol predefinido.

  1. Abre Paneles en la consola de Google Cloud.

    Ir a Paneles

  2. En la pestaña Lista de paneles, abre el panel GCE VM Lifecycle Events Monitoring.

  3. Elige la VM del menú desplegable Nombre.

  4. Limita las series temporales a un período relevante.

    Para ver más formas de filtrar el panel, consulta cómo Agregar un filtro temporal.

El panel contiene dos gráficos que muestran un cronograma de eventos del sistema y actividades de administrador que ocurren en una VM:

  1. En el gráfico Cronograma del ciclo de vida de la VM, se muestra lo siguiente:

    • La métrica compute.googleapis.com/instance/uptime indica si la VM se estaba ejecutando en un momento determinado, en el que 1 está activo y 0 está inactivo. Ten en cuenta que esta métrica refleja la disponibilidad como resultado de la actividad del usuario y los eventos del sistema, y no es un indicador del ANS de Compute Engine.
    • La métrica basada en registros vm-lifecycle-events para contar la cantidad de acciones del ciclo de vida, como stop o start, que se realizaron en la VM en un momento determinado
  2. En el gráfico de eventos, se muestra la misma métrica basada en registros vm-lifecycle-events, pero en una vista aumentada para facilitar la lectura. Ten en cuenta que, aunque los ejes X están alineados, los colores no están sincronizados entre los dos gráficos.

Investiga el cierre masivo de VMs en los proyectos

Compute Engine podría cerrar varias VMs que están conectadas a un proyecto host de VPC compartida si la facturación del proyecto host de VPC compartida está inactiva o inhabilitada.

Para determinar si se cerraron las VMs mediante una solicitud de cierre masivo, busca las operaciones de detención que inició cloud-cluster-manager@prod.google.com.

Iniciar una instancia afectada muestra un error similar al siguiente:

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

Para solucionar este problema, haz lo siguiente:

  1. Identifica la VPC compartida que usan las VM mediante el comando gcloud compute instances describe:

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

    El resultado es similar a este:

    networkInterfaces[0].network: https://www.googleapis.com/compute/v1/projects/SHARED_VPC_PROJECT/global/networks/FROZEN_NETWORK
    
  2. Verifica si el proyecto host de la VPC compartida está inhabilitado.

    resource.type="project"
    protoPayload.request.@type="type.googleapis.com/google.internal.cloudbilling.billingaccount.v1.DisableResourceBillingRequest"
    protoPayload.response.resourceBillingInfo.billingAccountAssignmentType="DISABLED"
    
  3. Si corresponde, habilita la facturación en el proyecto host.

Para evitar que vuelva a ocurrir este problema, lee Protege el vínculo entre un proyecto y su cuenta de facturación.