Visualiza la salida de los puertos en serie

Una instancia de máquina virtual tiene cuatro puertos en serie virtuales. A menudo, el sistema operativo de la instancia, el BIOS y otras entidades de nivel de sistema escriben salidas en los puertos en serie. Esto los hace útiles para solucionar fallas, arranques fallidos, problemas de inicio o de apagado.

En esta página, se describen métodos para ver las salidas de los puertos en serie, incluido el uso de Stackdriver Logging para conservarlas, incluso cuando se detiene o borra una instancia. Si necesitas enviar comandos a un puerto en serie mientras se ejecuta una instancia, consulta Interactúa con la consola en serie.

Se puede acceder a las salidas de los puertos en serie a través de Cloud Console, la herramienta de gcloud y la API solo cuando se ejecuta la instancia de VM y los registros se limitan al 1 MB más reciente de salida por puerto.

Si habilitas el registro de salidas de puertos en serie en Stackdriver Logging, los registros se conservan durante 30 días. Los primeros 50 GB por mes de registro son gratuitos. Consulta los precios de Stackdriver Logging para obtener más detalles.

Antes de comenzar

Habilita o inhabilita el registro de salidas de puertos en serie

Para controlar si las instancias envían las salidas de los puertos en serie a Stackdriver Logging, configura metadatos a nivel de proyecto o de instancia. También puedes inhabilitar la función para todos los usuarios de la organización si estableces una política de la organización.

Establece metadatos de proyecto y de instancia

Si el registro de salidas de puertos en serie en Stackdriver Logging no está restringido a tu organización, puedes habilitarlo o inhabilitarlo para instancias de VM individuales y proyectos con solo establecer los metadatos serial-port-logging-enable en true o false.

Si se establecen metadatos para todo el proyecto en serial-port-logging-enable:true, todas las instancias de VM en el proyecto heredarán esa configuración de forma implícita. Si se establecen metadatos a nivel de la instancia, se habilita solo para esa VM, sin importar la configuración del proyecto.

Si, por el contrario, deseas inhabilitar el registro de salidas de puertos en serie para determinados proyectos o instancias, establece el valor de los metadatos de serial-port-logging-enable en false. Cuando la configuración de estos metadatos es false a nivel del proyecto, se inhabilita el registro de salidas de puertos en serie en Stackdriver Logging para todas las instancias del proyecto. Cuando se establece en false a nivel de la instancia, el registro de puertos en serie se inhabilita solo para esa VM, sin importar la configuración del proyecto.

Puedes configurar metadatos a través de Google Cloud Console, la herramienta de gcloud o la API. Consulta Establece metadatos personalizados para obtener más detalles.

Por ejemplo, puedes usar el siguiente comando de la herramienta de gcloud a fin de habilitar el registro de salidas de puertos en serie en Stackdriver Logging para tu proyecto.

gcloud compute project-info add-metadata \
        --metadata serial-port-logging-enable=true \
        --project bct-staging-loadtest

También puedes usar el siguiente comando de la herramienta de gcloud a fin de habilitar el registro de salidas de puertos en serie en Stackdriver Logging para una instancia específica.

gcloud compute instances add-metadata instance-name \
        --metadata serial-port-logging-enable=true

Para inhabilitar el registro de salidas de puertos en serie en Stackdriver Logging, establece serial-port-logging-enable en false.

gcloud compute instances add-metadata instance-name \
        --metadata serial-port-logging-enable=false

Filtros de exclusión

Puedes crear un filtro de exclusión en Stackdriver Logging para quitar entradas específicas de los puertos en serie del visor de registros. Por ejemplo, con serial-port-logging-enable=true a nivel de proyecto, puedes inhabilitar el registro de salidas de puertos en serie de instancias de VM específicas con un filtro avanzado, como el que se muestra a continuación.

logName = "projects/project-id/logs/serialconsole.googleapis.com%2Fserial_port_1_output"
    resource.type = "gce_instance"
    resource.labels.instance_id != "instance-1-id"
    resource.labels.instance_id != "instance-2-id"

Establece una política de la organización

Si deseas inhabilitar el registro de salidas de puertos en serie en Stackdriver Logging para toda la organización establece una política de la organización que restrinja determinadas configuraciones de los recursos de Google Cloud. En particular, debes establecer esta restricción booleana: constraints/compute.disableSerialPortLogging. Consulta la página sobre cómo crear y administrar políticas de la organización para obtener más información.

La acción de establece constraints/compute.disableSerialPortLogging en true para inhabilitar los registros de puertos en serie no es retroactiva: los datos de las instancias de VM existentes con metadatos que habiliten el registro de los puertos en serie seguirán registrándose en Stackdriver Logging, a menos que restablezcas los metadatos de esas instancias.

Una vez que establezcas esta restricción de organización en true, no podrás configurar los metadatos de las instancias ni de los proyectos a fin de habilitar el registro de salidas de puertos en serie en Stackdriver Logging para ninguna instancia perteneciente a la organización.

Visualiza la salida de los puertos en serie

Console

  1. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  2. Selecciona la instancia de VM para la que quieres ver las salidas del puerto en serie.
  3. En Registros, haz clic en Puerto en serie 1, 2, 3 o 4. Por lo general, las entidades de nivel de sistema usan el primer puerto en serie (puerto 1), que también se conoce como la consola en serie.

gcloud

Usa el comando gcloud instances get-serial-port-output:

    gcloud compute instances get-serial-port-output instance-name \
      --port port \
      --start start \
      --zone zone
    

En el ejemplo anterior, se ilustra lo siguiente:

  • instance-name es el nombre de la instancia.
  • port es el número del puerto (1234) cuya salida quieres observar. Por lo general, las entidades de nivel de sistema usan el primer puerto en serie (puerto 1), que también se conoce como la consola en serie. De forma predeterminada, se muestra la salida del primer puerto en serie.
  • start especifica el índice de bytes (basado en cero) del primer byte que deseas mostrar. Usa esta marca si quieres continuar obteniendo la salida de una solicitud anterior que fue demasiado larga para mostrarse un resultado en un intento.

API

En la API, crea una solicitud get para el método instances.getSerialPortOutput.

GET https://compute.googleapis.com/compute/projects/project-id/zones/zone/instances/instance-name/serialPort

Stackdriver Logging

  1. Habilita el registro de puertos en serie en Stackdriver Logging
  2. Ve a la página Instancias de VM.

    Ir a la página Instancias de VM

  3. Selecciona la instancia de VM en la que quieres ver los registros del agente de inicio.
  4. En Registros, haz clic en Stackdriver Logging para ver los registros correspondientes.

  5. Expande el menú desplegable Todos los registros y selecciona la salida del puerto en serie que deseas ver. Por lo general, las entidades de nivel de sistema usan el primer puerto en serie (puerto 1), que también se conoce como la consola en serie. Si un puerto no aparece en el menú desplegable, no tiene ninguna salida disponible.

  6. De manera opcional, puedes expandir el menú desplegable Cualquier nivel de registro para silenciar los registros que se encuentran por debajo del nivel de gravedad que quieres ver. Por ejemplo, si seleccionas el nivel de registro “Información”, silenciarás las entradas de registro “Depurar”. Por lo general, solo el BIOS usa las entradas de “Depurar” al momento de iniciarse.

  7. Consulta la documentación de Stackdriver Logging sobre la Visualización los registros para ver más detalles, incluido el uso de filtros básicos y avanzados.

Maneja caracteres que no sean UTF8

Usa el método CHexEscape() de la biblioteca Abseil C++ de código abierto para escapar la salida del puerto en serie, de modo que los caracteres que no sean UTF8 se codifiquen como strings hexadecimales. Puedes usar el método CUnescape() correspondiente para obtener la salida exacta emitida al puerto en serie.