查看序列埠輸出內容

虛擬機器執行個體有四個虛擬序列埠。執行個體的作業系統、BIOS 及其他系統層級實體通常會將輸出內容寫入序列埠,因此序列埠可在排解當機、啟動失敗、開機或關機問題時派上用場。

本頁面說明查看序列埠輸出內容的方法,包括使用 Stackdriver 記錄來保留序列埠輸出內容,且即使在執行個體已停止或遭刪除後也可繼續保留。如果您需要在執行個體運作時傳送指令至序列埠,請參閱與序列主控台互動

您可以透過 GCP 主控台、gcloud 工具及 API 參閱序列埠輸出,但必須在 VM 執行個體執行狀態下,而且只能查看每個連接埠最近 1 MB 容量的輸出記錄。

如果您啟用 Stackdriver 序列埠輸出記錄功能,記錄預設保留期限是 30 天,Stackdriver 每月提供 50 GB 的免費記錄。詳情請參閱 Stackdriver 計價方式一文。

事前準備

啟用及停用 Stackdriver 序列埠記錄功能

如要啟用此功能,請將 serial-port-logging-enable 中繼資料屬性設為 true。如果是在專案層級設定這項鍵-值中繼資料,專案中所有執行個體都會啟用 Stackdriver 序列埠輸出記錄功能。如果是在 VM 執行個體層級進行設定,則無論專案設定為何,只有該 VM 會啟用這項功能。

您可以透過 Google Cloud Platform 主控台、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 後,您可以使用如下的進階篩選器,針對特定 VM 執行個體停用序列埠輸出記錄功能。

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]"

查看序列埠輸出內容

主控台

  1. 前往「VM 執行個體」頁面。

    前往 VM 執行個體頁面

  2. 選取要查看其序列埠輸出內容的 VM 執行個體。
  3. 在「Logs」(記錄) 底下,按一下 [Serial port 1] (序列埠 1)、[Serial port 2] (序列埠 2)、[Serial port 3] (序列埠 3) 或 [Serial port 4] (序列埠 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://www.googleapis.com/compute/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/serialPort

Stackdriver

  1. 啟用 Stackdriver 序列埠記錄功能。
  2. 前往 VM 執行個體頁面。

    前往 VM 執行個體頁面

  3. 選取您要查看其啟動代理程式記錄的 VM 執行個體。
  4. 按一下「Logs」(記錄) 底下的 [Stackdriver Logging],查看 Stackdriver 記錄。

  5. 展開「All logs」(所有記錄) 下拉式選單,選取您要查看的序列埠輸出內容。系統層級的執行個體通常會使用第一個序列埠 (序列埠 1),又稱序列主控台。如果下拉式選單中沒有出現某個序列埠,表示這個序列埠沒有可查看的輸出內容。

  6. 詳情請參閱 Stackdriver 說明文件的查看記錄,包括基本和進階篩選方式。

處理非 UTF8 字元

序列埠輸出內容是使用開放原始碼 Abseil C++ 程式庫的 CHexEscape() 方法逸出,因此非 UTF8 字元會使用十六進位字串編碼。您可以使用對應的 CUnescape() 方法取得發送至序列埠的具體輸出內容。

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Compute Engine 說明文件