搭配使用 Cloud Logging 與 Container-Optimized OS

Container-Optimized OS 包含記錄代理程式,可將部分系統和容器記錄匯出至 Cloud Logging。在 Container-Optimized OS 101 之前,以 x86 為基礎的 Container-Optimized OS 映像檔會使用以 fluentd 為基礎的容器化記錄代理程式。Container-Optimized OS 105 開始提供另一種記錄代理程式實作方式,也就是 fluent-bit。自 Container-Optimized OS 109 起,預設會使用 fluent-bit 記錄代理程式。舊版記錄代理程式 fluentd 將在 Container-Optimized OS 113 中移除。

所有版本的 Arm 架構 Container-Optimized OS 映像檔都會提供 fluent-bit 記錄代理程式。

啟用記錄代理程式

記錄代理程式預設為停用。您可以在建立新執行個體或更新現有執行個體時啟用這項功能。

存取權要求

Cloud Logging 提供 IAM 角色,可用來授予適當的存取權。如要查看專案中的記錄,您必須具備 roles/logging.viewer 角色,且應用程式必須具備寫入記錄的權限。您可以將 IAM 角色 roles/logging.logWriter 指派給應用程式服務帳戶,藉此授予這項權限。

如要進一步瞭解權限和角色,請參閱「預先定義的角色」。

建立已啟用記錄代理程式的執行個體

主控台

如要在啟用 Fluent Bit 記錄代理程式的 Container-Optimized OS 上執行 Compute Engine 執行個體,請執行下列操作:

  1. 在 Google Cloud 控制台中開啟 Compute Engine 執行個體建立頁面。

    建立新的 Compute Engine 執行個體

  2. 為您的執行個體指定名稱

  3. 在「Boot disk」(開機磁碟) 區段中,選取 Container-Optimized OS 映像檔。

  4. 按一下「管理、安全性、磁碟、網路、單獨租用」展開其他選項。

  5. 在「Management」分頁下方,捲動至「Metadata」部分。新增中繼資料項目,其中「Key」google-logging-enabled,而「Value」true

  6. 您可以視需要指定其他用途的選項。詳情請參閱「建立及設定執行個體」。

  7. 按一下 [Create] (建立) 以建立並啟動執行個體。

gcloud

如要在已啟用記錄代理程式的 Container-Optimized OS 上執行 Compute Engine 執行個體,請使用 gcloud compute instances create 指令,並在繼資料中加入 google-logging-enabled=true。例如:

gcloud compute instances create instance-name \
    --image image-name \
    --image-project cos-cloud \
    --zone compute-zone \
    --metadata google-logging-enabled=true

更改下列內容:

  • instance-name:VM 執行個體的名稱。
  • image-name:執行個體的 Container-Optimized OS 映像檔名稱。例如:--image=cos-113-18244-85-29
  • compute-zone:執行個體的運算區域

如要進一步瞭解 gcloud 指令,請參閱 gcloud compute instances create 參考說明文件。如要進一步瞭解如何建立 Container-Optimized OS 執行個體,請參閱「建立及設定執行個體」。

選取記錄代理程式

以 x86 為基礎的 Container-Optimized OS 105 和 109 映像檔會提供兩種記錄代理程式:fluentd (舊版) 和 fluent-bit。Container-Optimized OS 105 預設使用 fluentd,Container-Optimized OS 109 則預設使用 fluent-bit。您可以使用 google-logging-use-fluentbit 中繼資料項目來變更預設行為。

如要在 Container-Optimized OS 105 上使用 fluent-bit 記錄代理程式,請將 google-logging-use-fluentbit 值設為 true

如要在 Container-Optimized OS 109 上使用 fluentd 記錄代理程式,請將 google-logging-use-fluentbit 值設為 false

在專案中繼資料中啟用記錄代理程式

97 版升級前測版起,您可以在專案中繼資料中啟用記錄功能:

  gcloud compute project-info add-metadata \
    --metadata google-logging-enabled=true

存取記錄檔

主控台

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

    前往 VM 執行個體頁面

  2. 按一下要存取記錄的 Container-Optimized OS 執行個體名稱。

  3. 在「Logs」部分下方,按一下「Cloud Logging」。

  4. 這會為指定的執行個體開啟「Logs Explorer」。詳情請參閱「使用記錄檔探索工具」。

gcloud

如要存取記錄,請使用 gcloud logging read 指令。例如:

gcloud logging read \
"resource.type=gce_instance AND resource.labels.instance_id=instance-id" \
    --limit 10 \
    --format json \
    --freshness 30d

更改下列內容:

  • instance-id:VM 執行個體的 ID。

這個指令會嘗試使用 instance-id 讀取 VM 執行個體的記錄,並限制過去 30 天內的記錄數量為 10 個,且以 JSON 格式呈現。

如要進一步瞭解 gcloud 指令,請參閱 gcloud logging read 參考文件。

運作原理

根據預設,記錄代理程式會將特定系統重要服務和使用者應用程式容器的記錄傳送至 Cloud Logging 後端。例如 Docker 容器的記錄、所選 systemd 服務、稽核記錄、日誌記錄錯誤等。如需完整的預設記錄設定,請參閱 Container-Optimized OS 專屬設定來源 (x86 映像檔Arm 映像檔)。

針對 Container-Optimized OS 105 以下版本的 x86 映像檔,記錄代理程式是 Google Cloud Observability 的容器化舊版記錄代理程式。啟動記錄代理程式的 docker 指令已在 Container-Optimized OS stackdriver-logging systemd 服務的來源中定義。執行中的容器化代理程式版本是在 Container-Optimized OS source app-admin/stackdriver 目錄中定義。

針對所有版本的 Arm 映像檔和 Container-Optimized OS 109 以上版本的 x86 映像檔,記錄代理程式是名為 fluent-bit 的內建 OS 套件。代理程式會內建於作業系統,並隨作業系統映像檔更新。

已知限制

gcplogs 驅動程式相容

里程碑 89開始,如果啟用 Container-Optimized OS 隨附的記錄代理程式,並為一或多個容器啟用 Docker gcplogs 記錄驅動程式,隨附的記錄代理程式可能會輸出過多的警告記錄。這可能會產生雜訊記錄和/或增加 Cloud Logging 相關費用。

解決方法是不要將 gcplogs 用作 Docker 記錄檔驅動程式,而是使用 Container-Optimized OS 所設定的預設驅動程式。請注意,Container-Optimized OS 隨附的記錄代理程式會將容器記錄匯出至 Cloud Logging,因此不必同時使用這兩種解決方案。

記錄代理程式設定相容性

在以 x86 為基礎的 Container-Optimized OS 映像檔中,記錄代理程式是基於 fluentd 的容器,而在以 Arm 為基礎的 Container-Optimized OS 映像檔中,則是基於 fluent-bit 的二進位檔。兩個代理程式的設定不相容。如果您只依賴 OS 映像檔內建的預設記錄設定,就不會發生這個問題。不過,如果您有自訂的記錄設定,將工作負載遷移至以不同架構為基礎的映像檔,或遷移至較新版本的 Container-Optimized OS 時,可能會發生中斷情形。

參考資料

  • Google Cloud Observability 的舊版記錄代理程式說明文件。Container-Optimized OS 隨附的容器化記錄代理程式是舊版記錄代理程式的子集,因此本說明文件可能會提供較一般性的代理程式背景資訊,而非 Container-Optimized OS 範圍。
  • Google Cloud Observability 說明文件。Google Cloud 可觀測性說明文件的首頁,可能有助於瞭解相關背景。