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 comenzar

  • Si aún no lo hiciste, configura la autenticación. 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 seleccionando una de las siguientes opciones:

    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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.

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.

Console

  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 o la infraestructura del centro de datos que aloja tu instancia de procesamiento, lo 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 tu instancia. Si la instancia está configurada para reiniciarse automáticamente, que es la configuración predeterminada, Compute Engine reinicia la instancia, 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.

    En ocasiones, una instancia de procesamiento puede dejar de responder antes de que se indique un error de host. Puedes reducir el tiempo que Compute Engine espera para reiniciar o finalizar la instancia si configuras el tiempo de espera de recuperación de errores del host (Versión preliminar). 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

    Un agente de servicio inició el cierre.

    Para determinar desde qué proyecto inició el cierre del servicio, revisa el project-number del agente 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 a proyectos, carpetas y organizaciones.

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. Haga clic en Crear métrica.

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

  • Selecciona 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ú Seleccionar proyecto o bucket de registros, elige: 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. Haz 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 a proyectos, carpetas y organizaciones.

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 persista este problema, lee Protege el vínculo entre un proyecto y su cuenta de facturación.

Cómo investigar problemas de finalización de VMs con gcpdiag

gcpdiag es una herramienta de código abierto. No es un producto de Google Cloud compatible oficialmente. Puedes usar la herramienta gcpdiag para identificar y corregir problemas del proyecto de Google Cloud. Para obtener más información, consulta el proyecto en GitHub.

En este runbook de gcpdiag, se investigan los problemas de terminación de VM. Para ello, se examinan las siguientes áreas:
  • Apagados y reinicios activados por eventos del sistema: Identifica las terminaciones que inician los sistemas internos de Google Cloud debido a eventos de manutención del sistema, fallas normales de hardware y limitaciones de recursos.
  • Apagones o reinicios activados por actividades del administrador del sistema: Investiga las terminaciones causadas por acciones directas, como las llamadas a la API que realizan los usuarios o las cuentas de servicio. Estas acciones pueden incluir cierres manuales, reinicios o procesos automatizados que afectan los estados de las VM.
  • Generación de texto no oficial de RCA: Proporciona un texto detallado del análisis de la causa raíz, en el que se describe la causa identificada de la rescisión, los sistemas o las actividades involucrados, y las recomendaciones para evitar que ocurra en el futuro, cuando corresponda.

Consola de Google Cloud

  1. Completa y, luego, copia el siguiente comando.
  2. gcpdiag runbook gce/vm-termination \
        --parameter project_id=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE
  3. Abre la consola de Google Cloud y activa Cloud Shell.
  4. Abre la consola de Cloud
  5. Pega el comando copiado.
  6. Ejecuta el comando gcpdiag, que descarga la imagen de Docker gcpdiag y, luego, realiza verificaciones de diagnóstico. Si corresponde, sigue las instrucciones de salida para corregir las verificaciones que fallaron.

Docker

Puedes ejecutar gcpdiag con un wrapper que inicie gcpdiag en un contenedor de Docker. Se debe instalar Docker o Podman.

  1. Copia y ejecuta el siguiente comando en tu estación de trabajo local.
    curl https://gcpdiag.dev/gcpdiag.sh >gcpdiag && chmod +x gcpdiag
  2. Ejecuta el comando gcpdiag.
    ./gcpdiag runbook gce/vm-termination \
        --parameter project_id=PROJECT_ID \
        --parameter name=VM_NAME \
        --parameter zone=ZONE

Consulta los parámetros disponibles para este runbook.

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto que contiene el recurso.
  • VM_NAME: Es el nombre de la VM de destino dentro de tu proyecto.
  • ZONE: Es la zona en la que se encuentra la VM de destino.

Marcas útiles:

Para obtener una lista y una descripción de todas las marcas de la herramienta gcpdiag, consulta las instrucciones de uso de gcpdiag.