使用 Cloud Logging 進行歷史分析


當 Pod 發生故障,或 Google Kubernetes Engine (GKE) 中的服務無法正常運作時,瞭解導致問題的事件序列至關重要。檢查目前狀態不一定足以找出根本原因,因此歷來記錄資料非常寶貴。

本頁面說明如何使用 Cloud Logging 查詢及分析 GKE 記錄檔,調查過去發生的失敗事件 (例如 Pod 無法啟動的原因,或刪除重要部署作業的使用者)。

平台管理員和營運人員需要進行叢集層級問題的根本原因分析、稽核變更,以及瞭解系統行為趨勢,因此這項資訊非常重要。應用程式開發人員也必須使用這項功能,才能偵錯應用程式專屬錯誤、追蹤要求路徑,以及瞭解程式碼在 GKE 環境中的長期行為。如要進一步瞭解我們在 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE 使用者角色和工作」。

瞭解用於疑難排解的主要記錄類型

為協助您排解問題,Cloud Logging 會自動收集及匯總 GKE 叢集、容器化應用程式和其他Google Cloud 服務的幾種重要記錄類型:

  • 節點和執行階段記錄 (kubeletcontainerd):來自基礎節點服務的記錄。由於 kubelet 會管理節點上所有 Pod 的生命週期,因此其記錄檔對於排解容器啟動、記憶體不足 (OOM) 事件、探測失敗和磁碟區掛接錯誤等問題至關重要。這些記錄檔對於診斷節點層級問題 (例如狀態為 NotReady 的節點) 也至關重要。

    由於 containerd 會管理容器的生命週期 (包括提取映像檔),因此在 kubelet 啟動容器前,如果發生問題,記錄檔就非常重要。containerd 記錄會記錄容器執行階段的特定活動和潛在錯誤,因此有助於診斷 GKE 中的節點層級問題。

  • 應用程式記錄 (stdoutstderr):來自容器化程序的標準輸出和錯誤串流。這些記錄檔對於偵錯應用程式專屬問題 (例如當機、錯誤或非預期行為) 至關重要。

  • 稽核記錄:這些記錄會回答叢集「人事時地物」的問題。這些記錄會追蹤對 Kubernetes API 伺服器執行的管理動作和 API 呼叫,有助於診斷因設定變更或未經授權存取而造成的問題。

常見的疑難排解情境

找出問題後,您可以查詢這些記錄,瞭解發生了什麼事。為協助您開始使用,查看記錄可幫助您解決下列問題:

  • 如果節點的狀態為 NotReady,請查看節點記錄。kubeletcontainerd 記錄通常會揭露根本原因,例如網路問題或資源限制。
  • 如果新節點無法佈建及加入叢集,請查看節點的序列埠記錄。這些記錄檔會擷取節點記錄代理程式完全啟動前的早期啟動和 kubelet 啟動活動。
  • 如果 Pod 過去無法啟動,請查看該 Pod 的應用程式記錄檔,確認是否發生當機。如果記錄檔為空白或無法排定 Pod,請檢查稽核記錄檔是否有相關事件,或檢查目標節點上的節點記錄檔,找出資源壓力或映像檔提取錯誤的線索。
  • 如果刪除了重要部署作業,但無人知道原因,請查詢管理員活動稽核記錄。這些記錄可協助您找出發出刪除 API 呼叫的使用者或服務帳戶,為調查作業提供明確的起點。

如何存取記錄檔

使用記錄檔探索工具,在 Google Cloud 控制台中查詢、查看及分析 GKE 記錄。Logs Explorer 提供強大的篩選選項,有助於找出問題。

如要存取及使用 Logs Explorer,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「Logs Explorer」頁面。

    前往記錄檔探索工具

  2. 查詢窗格中輸入查詢。使用 Logging 查詢語言撰寫指定查詢。以下是一些常見的篩選器,可協助你快速上手:

    篩選器類型 說明 範例值
    resource.type Kubernetes 資源類型。 k8s_clusterk8s_nodek8s_podk8s_container
    log_id 資源的記錄串流。 stdoutstderr
    resource.labels.RESOURCE_TYPE.name 篩選特定名稱的資源。
    RESOURCE_TYPE 替換為要查詢的資源名稱。例如 namespacepod
    example-namespace-nameexample-pod-name
    severity 記錄嚴重性等級。 DEFAULTINFOWARNINGERRORCRITICAL
    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 相關查詢」。

  3. 點選「執行查詢」

  4. 如要查看完整記錄訊息,包括 JSON 酬載、中繼資料和時間戳記,請按一下記錄項目。

如要進一步瞭解 GKE 記錄檔,請參閱「關於 GKE 記錄檔」。

後續步驟