本頁面概略說明 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。
您也可以將 Standard 叢集設為只擷取系統記錄,不收集應用程式記錄。無論是 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。系統會使用以 fluentbit 為基礎的代理程式收集記錄。
雖然您無法直接自訂這個代管代理程式的設定,但可以部署自訂的 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。
- 嚴重性:根據預設,寫入標準輸出內容的記錄檔屬於
INFO層級,寫入標準錯誤的記錄檔則屬於ERROR層級。結構化記錄可包含severity欄位,用於定義記錄的嚴重性。 - 匯出至 BigQuery:如要進一步分析,可以將記錄匯出至外部服務,例如 BigQuery 或 Pub/Sub。匯出至 BigQuery 的記錄會保留其格式和結構。詳情請參閱「轉送和儲存空間總覽」。
警告:Logging 記錄到非預期行為時,您可以使用記錄指標設定警告政策。如需範例,請參閱「建立計數器指標的警告政策」。如要進一步瞭解記錄指標,請參閱「記錄指標總覽」。
錯誤報告:如要收集叢集上執行的應用程式錯誤,可以使用 Error Reporting。
可用的記錄檔
如果選擇將記錄傳送至 Cloud Logging,您必須傳送系統記錄,並可選擇傳送其他來源的記錄。
下表列出 create 和 update 指令的 --logging 旗標支援的值。
| 記錄檔來源 | --logging 值 |
收集的記錄 |
|---|---|---|
| 無 | NONE |
未將任何記錄檔傳送至 Cloud Logging;叢集中未安裝任何記錄檔收集代理程式。Autopilot 叢集不支援這個值。 |
| 系統 | SYSTEM |
從下列來源收集記錄:
也會收集 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 與叢集控制層的連線」。 |
配額
控制層記錄會耗用 Cloud Logging API 的各區域擷取配額。啟用控制層記錄前,請查看這些配額最近的使用量高峰。如果同一個專案中有多個叢集,或已接近配額上限,可以先要求提高配額,再啟用控制層記錄。
如果超過區域配額,Cloud Logging API 的寫入要求可能會遭到拒絕,並顯示「資源已用盡」錯誤訊息。超出這項配額會影響觀測能力和疑難排解,但不會限制 GKE 控制層作業,也不會影響執行中的工作負載。如需疑難排解步驟,請參閱「調查 Cloud Logging API 配額用量」。
存取權控管
如要限制組織內對 Kubernetes 控制層記錄的存取權,可以建立獨立的記錄檔 bucket,並設定更嚴格的存取控管機制。
將控制層記錄檔儲存在存取權受限的獨立記錄檔 bucket 中,可確保對專案具有 roles/logging.viewer 存取權的使用者,不會自動取得記錄檔 bucket 中控制層記錄檔的存取權。此外,如果您基於隱私或安全考量,決定刪除特定控制層記錄,可以將這些記錄儲存在存取權限受限的獨立記錄 bucket 中,這樣就能刪除記錄,而不會影響其他元件或服務的記錄。
後續步驟
- 瞭解如何查看 GKE 記錄檔。
- 瞭解如何調整記錄處理量。
- 進一步瞭解 GKE 稽核記錄資訊。
- 瞭解如何設定指標收集功能。
- 瞭解如何排解 GKE 記錄問題。