當 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.type
Kubernetes 資源類型。 k8s_cluster
、k8s_node
、k8s_pod
、k8s_container
log_id
資源的記錄串流。 stdout
、stderr
resource.labels.RESOURCE_TYPE.name
篩選特定名稱的資源。
將RESOURCE_TYPE
替換為要查詢的資源名稱。例如namespace
或pod
。example-namespace-name
、example-pod-name
severity
記錄嚴重性等級。 DEFAULT
、INFO
、WARNING
、ERROR
、CRITICAL
jsonPayload.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-engine
Slack 頻道,取得更多社群支援。 - 使用公開問題追蹤工具回報錯誤或提出功能要求。