查看串行端口输出


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

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

只有在虚拟机实例正在运行时,您才可以通过 Google Cloud 控制台、gcloud CLI 和 REST 访问串行端口输出。每个端口的日志只能显示最新的 1 MB 输出内容。

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

准备工作

  • 如果您要在 Cloud Logging 中记录串行端口输出,请先了解 Cloud Logging
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭据。

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

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

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

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

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

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

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

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

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

同样,以下 gcloud CLI 命令也会改为特定实例启用将串行端口输出记录到 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 控制台中,转到虚拟机实例页面。

    转到“虚拟机实例”页面

  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:您的实例所在的区域。

REST

在 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() 方法获取发送到串行端口的确切输出。

常见的串行端口错误

以下是您在串行端口输出中可能会遇到的常见错误示例。

配置 IPv6 时出错

如果未配置 IPv6,则操作系统日志中可能会出现以下错误:

ERROR addresses.go:301 Error configuring IPv6: Internet Systems Consortium DHCP Client 4.2.5

忽略此错误。此错误不会影响您的虚拟机。