關於 GKE 記錄檔

本頁面概略說明 Google Kubernetes Engine (GKE) 提供的記錄選項。

總覽

傳送至 Cloud Logging 的 GKE 記錄會儲存於專用的永久資料儲存庫,雖然 GKE 本身會儲存記錄,但這些記錄不會永久儲存。舉例來說,如果主機 Pod 遭到移除、儲存磁碟空間不足,或有較新的記錄檔取代舊記錄檔,GKE 容器記錄檔就會遭到移除。系統會定期移除系統記錄,釋出空間供新記錄使用。叢集事件會在 1 小時後移除。

GKE Logging 代理程式

針對容器和系統記錄,GKE 預設會部署每個節點的 Logging 代理程式,讀取容器記錄、新增實用的中繼資料,然後將其儲存在 Cloud Logging 中。GKE Logging 代理程式會檢查下列來源的容器記錄:

  • 容器化程序中的標準輸出內容和標準錯誤記錄檔

  • kubelet 和容器執行階段記錄檔

  • 系統元件記錄,例如 VM 開機指令碼

針對事件,GKE 會使用 kube-system 命名空間中的部署作業,自動收集事件並傳送至 Logging。

系統會收集哪些記錄檔

根據預設,GKE 會從叢集收集多種類型的記錄,並儲存在 Cloud Logging 中:

  • 稽核記錄包括管理員活動記錄、資料存取記錄和事件記錄。如要進一步瞭解 GKE 稽核記錄,請參閱 GKE 稽核記錄說明文件。GKE 的稽核記錄無法停用。

  • 系統記錄,包括可用記錄中列出的記錄。

  • 應用程式記錄包括在使用者節點上執行的非系統容器所產生的所有記錄。

    下列限制可能會導致應用程式記錄無法傳送至 Cloud Logging:

    • 對於 JSON 記錄,系統不支援重複的 JSON 鍵。
    • stream 是 GKE 記錄管道中的保留金鑰。應用程式 JSON 記錄中的 stream 鍵可能會導致非預期的行為,並捨棄記錄。
    • Cloud Logging 對每個 LogEntry 設有大小限制。任何超過大小限制的 LogEntry 都會遭到捨棄 (jsonPayload 記錄) 或截斷 (textPayload 記錄)。

GKE 也可以從特定 Kubernetes 控制層元件收集其他類型的記錄,並儲存在 Cloud Logging 中:

  • API 伺服器記錄包含 Kubernetes API 伺服器 (kube-apiserver) 產生的所有記錄。

  • 排程器記錄檔包含 Kubernetes 排程器 (kube-scheduler) 產生的所有記錄檔。

  • 控制器管理員記錄檔包含 Kubernetes 控制器管理員 (kube-controller-manager) 產生的所有記錄檔。

如要進一步瞭解各項控制層元件,請參閱「GKE 叢集架構」。

正在收集記錄

建立新的 GKE 叢集時,系統預設會啟用與 Cloud Logging 的整合。

系統和應用程式記錄會傳送至 Cloud Logging 的記錄檔路由器。

您可以從這裡將記錄檔擷取至 Cloud Logging、排除或匯出至 BigQuery、Pub/Sub 或 Cloud Storage。

您也可以設定標準叢集,只擷取系統記錄檔,不收集應用程式記錄檔。不論是 Autopilot 還是 Standard 叢集,您都可以使用排除篩選器,減少傳送至 Cloud Logging 的記錄量。

Logging 處理量

啟用系統記錄功能後,系統會自動部署及管理專屬的 Cloud Logging 代理程式。這項功能會在叢集中的所有 GKE 節點上執行,收集記錄檔、新增容器、Pod 和叢集的實用中繼資料,然後使用以 fluentbit 為基礎的代理程式,將記錄檔傳送至 Cloud Logging。

如果任何 GKE 節點需要的記錄檔處理量超過預設值,且 GKE Standard 叢集使用 1.23.13-gke.1000 以上版本的控制層,您可以設定 GKE 部署 Logging 代理程式的替代設定,盡可能提高記錄檔處理量。

詳情請參閱「調整記錄處理量」。

使用自訂 fluentd 或 fluentbit 收集記錄

GKE 的預設 Logging 代理程式會部署及管理代理程式,將叢集的記錄傳送至 Cloud Logging。系統會使用以 Fluent Bit 為基礎的代理程式收集記錄。

雖然您無法直接自訂這個受管理代理程式的設定,但可以部署自己的自訂 fluentd 或 fluentbit DaemonSet,收集應用程式記錄。

如要進一步瞭解可用的記錄設定,請參閱本頁的「可用的記錄」一節。

收集 GKE 節點的 Linux auditd 記錄

您可以在執行 Container-Optimized OS 的 GKE 節點上,啟用詳細的作業系統稽核記錄。節點上的作業系統記錄檔,提供了叢集和工作負載狀態方面的重要資訊,例如錯誤訊息、登入嘗試次數和二進位執行檔執行次數。這些資訊可以協助進行除錯或調查安全性事件。

詳情請參閱「在 GKE 節點上啟用 Linux auditd 記錄」。

GKE 稽核記錄

如要進一步瞭解適用於 Kubernetes 叢集和 GKE 叢集作業資源類型的記錄項目,請參閱「稽核記錄」。

Logging 存取控管

記錄檔存取控管分為兩個層面:應用程式存取權和使用者存取權。Cloud Logging 提供 Identity and Access Management (IAM) 角色,可用於授予適當存取權。

應用程式存取權

應用程式必須具備權限,才能將記錄檔寫入 Cloud Logging。如要授予權限,請將 IAM 角色 roles/logging.logWriter 指派給附加至基礎節點集區的服務帳戶。

使用者檢視權限

您必須具備「roles/logging.viewer」角色,才能在專案中查看記錄。如需存取資料存取記錄,您必須具備 logging.privateLogViewer IAM 權限。

如要進一步瞭解權限和角色,請參閱「存取控管」指南。您也可以參閱「Cloud 稽核記錄的最佳做法」,這些做法也適用於 Cloud Logging。

使用者管理員存取權

IAM 角色 roles/logging.configWriter 和 roles/logging.admin 提供管理功能。您必須具備 roles/logging.configWriter 角色,才能建立記錄檔接收器,這通常用於將記錄檔導向特定或集中式專案。舉例來說,您可能會想搭配使用記錄檔接收器和記錄篩選器,將命名空間的所有記錄導向至集中化記錄檔 bucket。

詳情請參閱 Cloud Logging 的存取控管指南。

最佳做法

  • 結構化記錄:與 GKE 整合的Logging 代理程式會讀取序列化為單行字串的 JSON 文件,並寫入標準輸出內容或標準錯誤,然後以結構化記錄項目的形式傳送至 Google Cloud Observability。
    • 如要進一步瞭解如何使用整合式 Logging 代理程式,請參閱「結構化記錄」。
    • 您可以使用進階記錄篩選器,根據 JSON 文件的欄位篩選記錄。
    • 使用 glog 產生的記錄會剖析常見欄位,例如 severity、pid、source_file、source_line。不過,訊息酬載本身不會剖析,而是會逐字顯示在 Google Cloud Observability 的記錄訊息中。
  • 嚴重程度:根據預設,寫入標準輸出內容的記錄檔為 INFO 層級,寫入標準錯誤的記錄檔則為 ERROR 層級。結構化記錄可包含 severity 欄位,用於定義記錄的嚴重性。
  • 匯出至 BigQuery:如要進行其他分析,可以將記錄匯出至外部服務,例如 BigQuery 或 Pub/Sub。匯出至 BigQuery 的記錄會保留其格式和結構。詳情請參閱「轉送功能和儲存空間簡介」。
  • 警告:當 Logging 記錄到非預期行為時,您可以透過記錄指標設定警告政策。如需範例,請參閱「建立計數器指標的警告政策」。如要詳細瞭解記錄指標,請參閱「記錄指標總覽」。

  • 錯誤報告:如要從叢集上執行的應用程式收集錯誤,可以使用 Error Reporting。

可用的記錄檔

如果選擇將記錄傳送至 Cloud Logging,您必須傳送系統記錄,並可選擇傳送其他來源的記錄。

下表列出 create 和 update 指令的 --logging 旗標支援的值。

記錄檔來源 --logging 值 收集的記錄
無 NONE 沒有記錄檔傳送至 Cloud Logging;叢集未安裝記錄檔收集代理程式。Autopilot 叢集不支援這個值。
系統 SYSTEM 收集下列來源的記錄:
  • 在命名空間 kube-system、istio-system、knative-serving、gke-system 和 config-management-system 中執行的所有 Pod。
  • 未採用容器化的服務,包括 docker/containerd 執行階段、kubelet、kubelet-monitor、node-problem-detector 和 kube-container-runtime-monitor。
  • 如果 VM 執行個體中繼資料 serial-port-logging-enable 設為 true,則為節點的序列埠輸出內容。

也會收集 Kubernetes 事件。所有叢集類型都必須提供這個值。

工作負載 WORKLOAD 使用者節點上執行的非系統容器所產生的所有記錄。 這個值預設為啟用,但所有叢集類型都可選擇是否使用。
API 伺服器 API_SERVER kube-apiserver 產生的所有記錄。所有叢集類型都可選擇是否提供這個值。
排程器 SCHEDULER kube-scheduler 產生的所有記錄。這個值對所有叢集類型來說都是選用值。
控制器管理員 CONTROLLER_MANAGER kube-controller-manager 產生的所有記錄。這個值對於所有叢集類型都是選用值。
水平 Pod 自動配置器 KCP_HPA

匯出 GKE 叢集中每個 HPA 物件的基本和最終建議決策記錄。

詳情請參閱「查看水平自動調度 Pod 資源事件」。

垂直 Pod 自動調度器 (預先發布版) KCP_VPA

匯出 GKE 叢集中每個 VPA 物件的決策記錄。

詳情請參閱「查看垂直自動調度 Pod 資源事件」。

控制層網路連線 KCP_CONNECTION

僅適用於 GKE control plane authority

GKE 控制層執行個體的連入網路連線記錄。詳情請參閱「驗證 Google 與叢集控制層的連線」。

控制層 SSH 事件 KCP_SSHD

僅適用於 GKE control plane authority

Google 人員在處理客服案件或進行其他管理員權限作業時,會連線至您的叢集控制層執行個體,這項設定會為所有 SSH 事件 (例如接受公開金鑰和關閉工作階段) 產生記錄。

詳情請參閱「驗證 Google 與叢集控制層的連線」。

定價

GKE 記錄會匯出至 Cloud Logging。 須支付 Cloud Logging 費用。

將記錄匯出至其他 Google Cloud 服務 (例如 BigQuery) 時,系統會向您收取累積的儲存空間費用。如要瞭解 Cloud Logging 的相關費用,請參閱「定價」。

配額

控制層記錄會耗用 Cloud Logging API 的「每分鐘寫入要求數」配額。啟用控制層記錄前,請查看該配額最近的用量高峰。如果同一個專案中有多個叢集,或已接近配額上限,可以先要求提高配額上限,再啟用控制層記錄。

存取權控管

如要限制組織內對 Kubernetes 控制層記錄的存取權,可以建立獨立的記錄檔 bucket,並設定更嚴格的存取控管。

將控制層記錄檔儲存在存取權受限的獨立記錄檔 bucket 中,可確保對專案具有 roles/logging.viewer 存取權的使用者,不會自動取得記錄檔 bucket 中控制層記錄檔的存取權。此外,如果您基於隱私或安全考量,決定刪除特定控制層記錄,可以將這些記錄儲存在存取權限有限的獨立記錄 bucket 中,這樣就能刪除記錄,而不會影響其他元件或服務的記錄。

後續步驟