查看序列埠輸出內容

Compute Engine 執行個體有四個虛擬序列埠。執行個體的作業系統、BIOS 和其他系統層級實體,通常會將輸出內容寫入序列埠,因此序列埠輸出內容可用於疑難排解異常終止、啟動失敗、啟動或關機等問題。

本頁面說明如何查看序列埠輸出內容,包括使用 Cloud Logging 保留序列埠輸出內容,即使執行個體停止運作也沒問題。如要在執行執行個體時傳送指令至序列埠,請參閱「與序列主控台互動」。

如要查看執行中運算執行個體的序列埠輸出內容,請使用 Google Cloud 控制台、gcloud CLI 或 REST。這些方法只會提供每個通訊埠最近 1 MB 的輸出內容。如要查看每個連接埠超過 1 MB 的輸出內容,或查看已停止執行個體的輸出內容,請使用 Cloud Logging。

事前準備

  • 如要在 Cloud Logging 中記錄序列埠輸出內容,請先熟悉 Cloud Logging。
  • 如果尚未設定驗證,請先完成設定。 驗證可確認您的身分,以便存取 Google Cloud 服務和 API。如要從本機開發環境執行程式碼或範例,請選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Google Cloud 控制台存取 Google Cloud 服務和 API 時,您不需要設定驗證機制。

    gcloud

    1. 安裝 Google Cloud CLI。 完成後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

網路需求和限制

如要使用 Google Cloud 控制台查看序列埠輸出內容或與控制台互動,用戶端網路和環境必須符合下列需求:

  • TCP 通訊埠 9600:如果您使用Google Cloud 控制台中的「Serial port 1 (console)」連結,網路必須允許 TCP 通訊埠 9600 的輸出流量,才能連線至序列埠控制台閘道。
  • VPC Service Controls:互動式序列埠控制台不支援 VPC Service Controls 範圍。
  • Private Google Access:Private Google Access VIP (private.googleapis.com 或 restricted.googleapis.com) 不支援序列埠控制台所需的 SSH 流量。這些 VIP 僅支援以 HTTP 為基礎的通訊協定。

如果網路限制這些通訊埠或通訊協定,請改用 Cloud Logging 查看序列埠記錄,因為該服務使用標準 HTTPS (通訊埠 443)。

排解 SSH 失敗問題

如果您無法使用 SSH 連線至 VM,而正在查看序列埠記錄,請參閱 SSH 疑難排解指南,瞭解常見錯誤和補救步驟。

啟用及停用序列埠輸出記錄

您可以設定專案或執行個體層級的中繼資料,控管執行個體是否要將序列埠輸出內容傳送至 Cloud Logging。您也可以透過設定組織政策來停用機構中所有使用者的這項功能。

根據預設,系統會停用將序列埠輸出內容記錄至 Cloud Logging 的功能。如果啟用序列埠輸出記錄功能,Cloud Logging 每月會免費提供前 50 GiB 的記錄,並保留記錄 30 天。

設定專案和執行個體中繼資料

如果機構未限制將序列埠輸出內容記錄到 Cloud Logging,您可以將 serial-port-logging-enable 中繼資料項目設為 true 或 false,為專案和個別運算執行個體啟用或停用這項功能。

如果您設定專案範圍的中繼資料項目,專案中的所有運算執行個體都會隱含繼承該設定。如果您設定執行個體中繼資料項目,無論專案設定為何,該中繼資料項目只會針對該運算執行個體啟用。

您可以使用 Google Cloud 控制台、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

如要停用序列埠輸出記錄功能,請將 serial-port-logging-enable 設為 false:

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

「排除」篩選器

您可以在 Cloud Logging 中建立排除篩選器,從 Logs Explorer 中移除特定序列埠項目。舉例來說,如果專案層級的中繼資料項目設為 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 記錄序列埠輸出內容的功能。

查看序列埠輸出內容

使用 Google Cloud 控制台、gcloud CLI 或 REST,查看執行中執行個體每個序列埠最新的 1 MB 輸出內容。如要查看每個連接埠超過 1 MB 的輸出內容,或查看已停止執行個體的輸出內容,請使用 Cloud Logging。

控制台

  1. 前往 Google Cloud 控制台的「VM instances」(VM 執行個體) 頁面。

    前往 VM 執行個體頁面

  2. 選取要查看序列埠輸出內容的運算執行個體。

  3. 在「記錄」下方,按一下「序列埠 1 (控制台)」、「序列埠 2 (控制台)」、「序列埠 3」或「序列埠 4」。

    系統層級實體通常會使用序列埠 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:要查看輸出的通訊埠編號 (1、2、3 或 4)。系統層級實體通常會使用第一個序列埠 (通訊埠 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

如要查看這些記錄,請先將序列埠輸出內容傳送至 Cloud Logging。

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往「Logs Explorer」頁面

  2. 在「查詢」窗格中輸入下列查詢,然後點選「執行查詢」:

    resource.type="gce_instance"
    logName="projects/PROJECT_ID/logs/serialconsole.googleapis.com%2Fserial_port_1_output"
    resource.labels.instance_id="INSTANCE_ID"
    

    更改下列內容:

    • PROJECT_ID:包含執行個體的專案 ID。
    • INSTANCE_ID:運算執行個體的 ID。

如要進一步瞭解如何在 Logs Explorer 中篩選,請參閱「使用 Logs Explorer 查看記錄檔」。

處理非 UTF8 字元

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