查看串行端口输出

虚拟机 (VM) 实例具有四个虚拟串行端口。实例的操作系统、BIOS 以及其他系统级实体通常将输出写入串行端口,以便将串行端口输出用于解决崩溃、启动失败、启动问题或关停问题。

本页面介绍如何查看串行端口输出,包括如何使用 Cloud Logging 保留串行端口输出(即使在实例停止或被删除之后)。如果您需要在实例运行期间将命令发送到串行端口,请参阅与串行控制台进行交互

只有在虚拟机实例正在运行时,您才可以通过 Cloud Console、gcloud 工具和 Compute Engine API 访问串行端口输出。每个端口的日志只能显示最新的 1 MB 输出内容。

如果您启用串行端口输出日志记录功能,则 Cloud Logging 每月免费提供 50 GiB 的日志记录,并将日志保留 30 天

准备工作

启用和停用串行端口输出日志记录功能

您可以通过设置项目级层或实例级层元数据来控制您的实例是否向 Cloud Logging 发送串行端口输出。此外,您还可以通过设置组织政策,对组织中的所有用户停用该功能。

设置项目元数据和实例元数据

如果您的组织对将串行端口输出记录到 Cloud Logging 的功能没有限制,则您可以通过将 serial-port-logging-enable 元数据条目设置为 truefalse,为项目和个别虚拟机实例启用或停用该功能。

如果您设置了项目级层元数据条目,则项目中的所有虚拟机实例都会隐式继承该设置。如果您设置了实例元数据条目,则无论项目设置如何,系统都仅为该虚拟机启用元数据条目。

您可以使用 Google Cloud Console、gcloud 工具或 Compute Engine API 来设置元数据条目。如需了解详情,请参阅设置自定义元数据

例如,以下 gcloud 工具命令可为项目启用将串行端口输出记录到 Cloud Logging 的功能:

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

同样,以下 gcloud 工具命令也会改为特定实例启用将串行端口输出记录到 Cloud Logging 的功能:

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

如需停用将串行端口输出记录到 Cloud Logging 的功能,请将 serial-port-logging-enable 设置为 false

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

排除过滤器的数量

在 Cloud Logging 中,您可以创建排除过滤条件,以从日志查看器中移除特定的串行端口条目。例如,将项目级元数据条目设置为 serial-port-logging-enable=true 时,您可以使用高级过滤条件来停用特定虚拟机实例的串行端口输出日志记录功能:

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"

设置组织政策

您可以设置组织政策来限制某些 Google Cloud 资源配置,从而为整个组织停用将串行端口输出记录到 Cloud Logging 的功能。具体而言,您可以设置以下布尔值限制条件:constraints/compute.disableSerialPortLogging。如需了解详情,请参阅创建和管理组织政策

constraints/compute.disableSerialPortLogging 设置为 true 以停用串行端口日志记录功能不具有追溯性。如果现有虚拟机实例具有的元数据条目支持将串行端口日志记录到 Cloud Logging 的功能,则将继续记录到 Cloud Logging,除非您为这些实例重置元数据

将此组织限制条件设置为 true 后,您就无法设置实例元数据或项目元数据来为组织内的任何实例启用将串行端口输出记录到 Cloud Logging 的功能。

查看串行端口输出

控制台

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  2. 选择要查看其串行端口输出的虚拟机实例。

  3. 日志下方,点击串行端口 1234。系统级实体通常使用第一个串行端口(端口 1),该端口也称为串行控制台

gcloud

使用 gcloud compute instances get-serial-port-output 命令

gcloud compute instances get-serial-port-output INSTANCE_NAME \
  --port PORT \
  --start START \
  --zone ZONE

请替换以下内容:

  • INSTANCE_NAME:实例的名称。
  • PORT:您要查看其输出的端口号(1234)。系统级实体通常使用第一个串行端口(端口 1),该端口也称为串行控制台。默认情况下,返回第一个串行端口的输出。
  • START:要返回的第一个字节的字节索引(从零开始)。若要继续获取上一个因过长而无法一次返回的请求的输出,请使用此标志。
  • ZONE:您的实例所在的区域。

API

在 API 中,创建对 instances.getSerialPortOutput 方法get 请求。

GET https://compute.googleapis.com/compute/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/serialPort

Cloud Logging

  1. 启用将串行端口日志记录到 Cloud Logging 的功能
  2. 转到虚拟机实例页面。

    转到“虚拟机实例”页面

  3. 选择您要查看启动代理日志的虚拟机实例。

  4. 日志下,点击 Cloud Logging 以查看 Cloud Logging 日志。

    点击 Cloud Logging 以查看 Cloud Logging 日志。

  5. 展开所有日志下拉菜单,然后选择要查看的串行端口输出。系统级实体通常使用第一个串行端口(端口 1),该端口也称为串行控制台。如果某个端口未出现在下拉菜单中,则说明该端口没有可用的输出。

  6. (可选)展开任何日志级别下拉菜单,以忽略严重级别低于您要查看的级别的日志。例如,如果您选择“Info”日志级别,则将忽略“Debug”日志条目。“Debug”条目通常仅供 BIOS 在启动时使用。

如需了解详情(包括有关基本和高级过滤的信息),请参阅查看日志

处理非 UTF8 字符

串行端口输出是使用开源 Abseil C++ 库的 CHexEscape() 方法进行转义的,因此非 UTF8 字符将被编码为十六进制字符串。您可以使用相应的 CUnescape() 方法获取发送到串行端口的确切输出。