查看串行端口输出

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

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

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

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

准备工作

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

要启用此功能,请将 serial-port-logging-enable 元数据属性设置为 true在项目级层设置此键/值元数据时,将为项目中的所有实例启用将串行端口输出记录到 Stackdriver 的功能。如果是在虚拟机实例级层设置,则无论项目设置如何,都仅为该虚拟机启用该功能。

您可以通过 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/google.com:serial-output-logging-demo/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]"

查看串行端口输出

Console

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

    转到“虚拟机实例”页面

  2. 选择要查看其串行端口输出的虚拟机实例。
  3. 日志下方,点击串行端口 1234。系统级实体通常使用第一个串行端口(端口 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://www.googleapis.com/compute/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/serialPort

Stackdriver

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

    转到“虚拟机实例”页面

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

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

  6. 如需了解详情,请参阅有关查看日志的 Stackdriver 文档,包括基本和高级过滤。

处理非 UTF8 字符

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

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

发送以下问题的反馈:

此网页
Compute Engine 文档