當 Pod 發生故障,或 Google Kubernetes Engine (GKE) 中的服務無法正常運作時,瞭解導致問題的事件序列至關重要。檢查目前狀態不一定足以找出根本原因,因此歷來記錄資料非常寶貴。
本頁面說明如何使用 Cloud Logging 查詢及分析 GKE 記錄檔,調查過去發生的失敗事件 (例如 Pod 無法啟動的原因,或刪除重要部署作業的使用者)。
平台管理員和營運人員需要進行叢集層級問題的根本原因分析、稽核變更,以及瞭解系統行為趨勢,因此這項資訊非常重要。應用程式開發人員也必須使用這項功能,才能偵錯應用程式專屬錯誤、追蹤要求路徑,以及瞭解程式碼在 GKE 環境中的長期行為。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。
瞭解用於排解問題的主要記錄類型
為協助您排解問題,Cloud Logging 會自動收集及匯總 GKE 叢集、容器化應用程式和其他Google Cloud 服務的幾種重要記錄類型:
節點和執行階段記錄 (
kubelet、containerd):來自基礎節點服務的記錄。由於kubelet會管理節點上所有 Pod 的生命週期,因此其記錄檔對於排解容器啟動、記憶體不足 (OOM) 事件、探測失敗和磁碟區掛接錯誤等問題至關重要。這些記錄檔對於診斷節點層級問題 (例如狀態為NotReady的節點) 也至關重要。由於 containerd 會管理容器的生命週期 (包括提取映像檔),因此在 kubelet 啟動容器前,如果發生問題,記錄檔就非常重要。containerd 記錄檔會記錄容器執行階段的特定活動和潛在錯誤,因此有助於診斷 GKE 中的節點層級問題。
應用程式記錄 (
stdout、stderr):來自容器化程序的標準輸出和錯誤串流。這些記錄檔對於偵錯應用程式專屬問題 (例如當機、錯誤或非預期行為) 至關重要。稽核記錄:這些記錄會回答叢集「人事時地物」的問題。這些記錄會追蹤對 Kubernetes API 伺服器執行的管理動作和 API 呼叫,有助於診斷因設定變更或未經授權存取而造成的問題。
常見的疑難排解情境
找出問題後,您可以查詢這些記錄,瞭解發生了什麼事。為協助您開始使用,查看記錄可幫助您解決下列問題:
- 如果節點的狀態為
NotReady,請查看節點記錄。kubelet和containerd記錄通常會揭露根本原因,例如網路問題或資源限制。 - 如果新節點無法佈建及加入叢集,請查看節點的序列埠記錄。這些記錄檔會擷取節點記錄代理程式完全啟動前的早期啟動和 kubelet 啟動活動。
- 如果 Pod 過去無法啟動,請查看該 Pod 的應用程式記錄,確認是否發生當機。如果記錄檔為空白或無法排定 Pod,請檢查稽核記錄檔是否有相關事件,或檢查目標節點上的節點記錄檔,找出資源壓力或映像檔提取錯誤的線索。
- 如果刪除了重要部署作業,但無人知道原因,請查詢管理員活動稽核記錄。這些記錄可協助您找出發出刪除 API 呼叫的使用者或服務帳戶,為調查作業提供明確的起點。
如何存取記錄檔
使用記錄檔探索工具,在 Google Cloud 控制台中查詢、查看及分析 GKE 記錄。Logs Explorer 提供強大的篩選選項,有助於找出問題。
如要存取及使用 Logs Explorer,請完成下列步驟:
前往 Google Cloud 控制台的「Logs Explorer」頁面。
在查詢窗格中輸入查詢。使用 Logging 查詢語言撰寫指定查詢。以下是一些常見的篩選器,可協助你快速上手:
篩選器類型 說明 範例值 resource.typeKubernetes 資源類型。 k8s_cluster、k8s_node、k8s_pod、k8s_containerlog_id資源的記錄串流。 stdout、stderrresource.labels.RESOURCE_TYPE.name篩選特定名稱的資源。
將RESOURCE_TYPE替換為要查詢的資源名稱。例如namespace或pod。example-namespace-name、example-pod-nameseverity記錄嚴重性等級。 DEFAULT、INFO、WARNING、ERROR、CRITICALjsonPayload.message=~在記錄訊息中搜尋文字的規則運算式。 scale.down.error.failed.to.delete.node.min.size.reached舉例來說,如要排解特定 Pod 的問題,您可能需要隔離其錯誤記錄。如要只查看該 Pod 的
ERROR嚴重程度記錄,請使用下列查詢:resource.type="k8s_container" resource.labels.pod_name="POD_NAME" resource.labels.namespace_name="NAMESPACE_NAME" severity=ERROR更改下列內容:
POD_NAME:發生問題的 Pod 名稱。NAMESPACE_NAME:Pod 所在的命名空間。如果不確定命名空間為何,請查看kubectl get pods指令輸出內容中的Namespace欄。
如需更多範例,請參閱 Google Cloud Observability 說明文件中的「Kubernetes 相關查詢」。
點選「執行查詢」
如要查看完整記錄訊息,包括 JSON 酬載、中繼資料和時間戳記,請按一下記錄項目。
如要進一步瞭解 GKE 記錄,請參閱「關於 GKE 記錄」。
後續步驟
請參閱「使用 Cloud Monitoring 執行主動監控」(本系列文章的下一頁)。
請參閱疑難排解情境示例,瞭解如何應用這些概念。
如需解決特定問題的建議,請參閱 GKE 的疑難排解指南。
如果無法在說明文件中找到問題的解決方法,請參閱「取得支援」一文,尋求進一步的協助, 包括下列主題的建議:
- 與 Cloud 客戶服務聯絡,建立支援案件。
- 在 StackOverflow 上提問,並使用
google-kubernetes-engine標記搜尋類似問題,向社群尋求支援。你也可以加入#kubernetes-engineSlack 頻道,取得更多社群支援。 - 使用公開版 Issue Tracker 開啟錯誤或功能要求。