查看串行端口输出

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

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

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

如果启用将串行端口输出记录到 Stackdriver 的功能,日志将保留 30 天,并且 Stackdriver 每月免费提供 50 GB 的日志记录。如需了解详情,请参阅 Stackdriver 价格

准备工作

启用和停用将串行端口输出记录到 Stackdriver 的功能

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

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

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

在项目级层,如果将 serial-port-logging-enable 设置为 true,则项目中的所有虚拟机实例都会隐式继承该设置。在虚拟机实例级层,如果将该元数据设置为 true,则该设置只会对相应虚拟机启用,无论项目设置如何都是如此。

相反,如需对项目或实例停用串行端口输出日志记录功能,应将 serial-port-logging-enable 元数据值设置为 false。如果在项目级层将此元数据设置为 false,则系统会对项目中的所有实例停用将串行端口输出记录到 Stackdriver 的功能。如果在实例级层将该元数据设置为 false,那么无论项目设置为何,系统都仅对该虚拟机停用串行端口日志记录功能。

您可以通过 Google Cloud Platform Console、gcloud 工具或 API 来设置元数据。如需了解详情,请参阅设置自定义元数据

例如,您可以使用以下 gcloud 命令为现有实例启用将串行端口输出记录到 Stackdriver 的功能。如果组织政策不允许此项配置,则该命令将失败。

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

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

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

排除过滤条件

在 Stackdriver 中,您可以创建排除过滤条件,以从日志查看器中移除特定的串行端口条目。例如,在项目级层设置 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"

设置组织政策

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

如果您通过将 constraints/compute.disableSerialPortLogging 设置为 true来停用串行端口日志记录功能,则此操作将不具有追溯性,也就是说,如果现有虚拟机实例的元数据已启用将串行端口日志记录到 Stackdriver 的功能,那么除非您重置这些实例的元数据,否则这些实例会继续将串行端口日志记录到 Stackdriver。

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

查看串行端口输出

控制台

  1. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  2. 选择要查看其串行端口输出的虚拟机实例。
  3. 日志下方,点击串行端口 1、2、3 或 4。系统级实体通常使用第一个串行端口(端口 1),该端口也称为串行控制台

gcloud

使用 gcloud 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 指定要返回的第一个字节的字节索引(从零开始)。若要继续获取上一个因过长而无法一次返回的请求的输出,请使用此标志。

API

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

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

Stackdriver

  1. 启用将串行端口输出记录到 Stackdriver 的功能
  2. 转到“虚拟机实例”页面。

    转到“虚拟机实例”页面

  3. 选择您要查看哪个虚拟机实例的启动代理日志。
  4. 日志下,点击 Stackdriver Logging 以查看 Stackdriver 日志。

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

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

  7. 如需了解详情,请参阅有关查看日志的 Stackdriver 文档,其中包含有关基本和高级过滤方面的内容。

处理非 UTF8 字符

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

此页内容是否有用?请给出您的反馈和评价:

发送以下问题的反馈:

此网页
Compute Engine 文档