關於 GKE 記錄檔


本頁面提供 Google Kubernetes Engine (GKE) 中可用的記錄選項總覽。

總覽

傳送至 Cloud Logging 的 GKE 記錄會儲存於專用的永久資料儲存庫,雖然 GKE 本身會儲存記錄,但這些記錄並非永久儲存。舉例來說,系統會在以下情況移除 GKE 容器記錄:主要 Pod 遭移除時、存放記錄的磁碟空間不夠時,或有新記錄取代舊記錄時。系統會定期移除系統記錄,以便釋放空間來儲存新記錄。一小時後,系統就會移除叢集事件。

GKE 記錄代理程式

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

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

  • 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 的記錄量。

記錄處理量

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

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

詳情請參閱「調整記錄輸送量」。

使用自訂 fluentd 或 fluentbit 收集記錄

GKE 的預設記錄代理程式提供代管解決方案,可部署及管理代理程式,將叢集的記錄傳送至 Cloud Logging。記錄會使用以 fluentbit 為基礎的代理程式收集。

收集 GKE 節點的 Linux auditd 記錄

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

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

GKE 稽核記錄

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

記錄存取權控管

存取控制記錄有兩個層面:應用程式存取權和使用者存取權。Cloud Logging 提供 Identity and Access Management (IAM) 角色,可讓您授予適當的存取權。

應用程式存取權

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

使用者檢視存取權

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

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

使用者管理員存取權

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

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

最佳做法

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

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

可用的記錄檔

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

下表列出 createupdate 指令的 --logging 標記支援的值。

記錄檔來源 --logging 收集的記錄
NONE 未將記錄檔傳送至 Cloud Logging;叢集未安裝記錄檔收集代理程式。Autopilot 叢集不支援這個值。
系統 SYSTEM 收集下列項目的記錄:
  • 在命名空間 kube-systemistio-systemknative-servinggke-systemconfig-management-system 中執行的所有 Pod。
  • 未容器化的服務,包括 docker/containerd 執行階段、kubeletkubelet-monitornode-problem-detectorkube-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 自動調度資源事件」。

控制層網路連線 KCP_CONNECTION

僅適用於 GKE 控制層授權

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

控制層 SSH 事件 KCP_SSHD

僅適用於 GKE 控制層授權單位

在支援案件期間或進行其他管理存取時,如果 Google 人員連線至叢集控制平面例項,系統會為所有 SSH 事件 (例如接受公開金鑰和關閉工作階段) 產生記錄。

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

GKE Enterprise 預設會啟用記錄檔

在 Trusted Cloud by S3NS上建立新的 GKE 叢集時,系統預設會為所有 Autopilot 叢集啟用工作負載記錄,但您可以停用這項功能。

如果是 GKE Enterprise 版專案,在建立叢集時註冊機群,系統預設會啟用其他實用記錄。

下表中的勾號 () 表示在啟用 GKE Enterprise 的專案中建立及註冊新叢集時,預設會啟用哪些記錄:

記錄檔名稱 Autopilot 標準
系統
工作負載
API 伺服器
排程器
控制器管理工具
控制層網路連線
控制層 SSH 事件

配額

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

存取權控管

如要限制機構內對 Kubernetes 控制平面記錄的存取權,可以建立存取權控管機制更嚴格的獨立記錄值區

將控制層記錄檔儲存在存取權受限的獨立記錄檔值區中,專案中具有 roles/logging.viewer 存取權的使用者,就無法自動存取記錄檔值區中的控制層記錄檔。此外,如果您因隱私權或安全性考量而決定刪除特定控制層記錄,將這些記錄儲存在存取權受限的獨立記錄儲存空間中,即可刪除記錄,而不影響其他元件或服務的記錄。