Stackdriver Logging

本頁面說明如何使用 Stackdriver Logging 來收集與查詢 Google Kubernetes Engine (GKE) 叢集的記錄。

總覽

一旦您的叢集啟用了 Logging,記錄檔便會儲存在專用的永久資料儲存庫中。您的 GCP 專案有幾個記錄檔與 GKE 叢集相關,其中包括管理員活動記錄、資料存取記錄,以及事件記錄檔。

記錄檔是記錄項目的集合,而每個記錄項目都對應到一個特定的資源類型。以下是與 GKE 叢集最相關的資源類型:

資源類型 顯示名稱
k8s_cluster Kubernetes 叢集
gke_cluster GKE 叢集作業
gke_container GKE 容器
gke_nodepool GKE 節點集區作業

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

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

至於容器記錄和系統記錄,GKE 會部署依節點記錄的代理程式;該代理程式可讀取容器記錄、新增實用的中繼資料,然後儲存這些資料。記錄代理程式則會查看下列資源中的容器記錄:

  • 容器化程序的標準輸出記錄與標準錯誤記錄
  • kubelet 和容器執行階段記錄
  • 系統元件記錄,例如 VM 開機指令碼

對於事件,GKE 會在 kube-system 命名空間使用部署作業,以便自動收集事件並將事件傳送到 Logging。

Logging 與 JSON 格式相容。記錄最多可儲存 30 天。

事前準備

如要準備這項工作,請執行下列步驟:

  • 確認您已啟用 Google Kubernetes Engine API。
  • 啟用 Google Kubernetes Engine API
  • 確認您已安裝 Cloud SDK
  • 設定預設的專案 ID
    gcloud config set project [PROJECT_ID]
  • 如果您使用區域叢集,請設定預設的運算區域
    gcloud config set compute/zone [COMPUTE_ZONE]
  • 如果您使用地區叢集,請設定預設的運算地區
    gcloud config set compute/region [COMPUTE_REGION]
  • gcloud 更新到最新版本:
    gcloud components update

啟用 Logging

您可以建立啟用 Logging 的叢集,或是在現有叢集中啟用 Logging。

建立具有 Logging 功能的叢集

gcloud

在您建立叢集時,系統會自動設定 --enable-cloud-logging 標記,而此標記會啟用叢集裡的 Logging。

如要停用這個預設行為,請設定 --no-enable-cloud-logging 標記。

主控台

  1. 造訪 GCP 主控台的「Kubernetes Engine」選單。

    造訪「Kubernetes Engine」選單

  2. 按一下 [Create cluster] (建立叢集)

  3. 視需要設定叢集。

  4. 按一下 [Advanced options] (進階選項)。在「Additional features」(其他功能) 區段啟用「Enable Stackdriver Logging service」(啟用 Stackdriver Logging 服務)。

  5. 按一下 [Create] (建立)。

為現有叢集啟用 Logging

gcloud

如要為現有叢集啟用 Logging,請執行下列指令,其中 [CLUSTER_NAME] 是叢集名稱。

gcloud container clusters update [CLUSTER_NAME] --logging-service logging.googleapis.com

主控台

  1. 造訪 GCP 主控台的「Kubernetes Engine」選單。

    造訪「Kubernetes Engine」選單

  2. 按一下鉛筆形狀的叢集 [Edit] (編輯) 按鈕。

  3. 將「Stackdriver Logging」下拉式選單的值設為「Enabled」(已啟用)。

  4. 按一下 [Save] (儲存)。

查看記錄

您可以在 Google Cloud Platform 主控台的 Stackdriver 記錄檢視器中查看記錄。

如要進一步瞭解如何查看記錄,包括基本查詢與進階查詢的建構方式,請參閱 Logging 說明文件中的查看記錄一文。

查詢範例

查詢來自 Pod 且標有 nginx-deployment 的記錄:

resource.type="container"
resource.labels.pod_id:"nginx-deployment-"

查詢 prod 命名空間內嚴重性為 WARNING 以上的記錄:

resource.type="container"
resource.labels.namespace_id="prod"
severity>WARNING

查詢在 my-pod 這個特定 Pod 中,來自 my-container 容器且含有文字酬載的記錄:

resource.type="container"
resource.labels.container_name="my_container"
resource.labels.pod_id="my_pod"
textPayload:"abracadabra"

限制

系統可能無法正確處理多行項目 (亦即含換行字元的項目)。如要避免這個問題,請在記錄裡使用單行 JSON 字串:

最佳做法

  • 結構化記錄:寫入到標準輸出或標準錯誤的單行 JSON 字串,Stackdriver 會當成結構化記錄項目進行讀取。詳情請參閱結構化記錄一文。您可以使用進階記錄篩選器,根據欄位來篩選記錄。
  • 嚴重性:依預設,寫入到標準輸出的記錄位於 INFO 層級;寫入到標準錯誤的記錄位於 ERROR 層級。結構化記錄可包含一個 severity 欄位,用以定義記錄的嚴重性。
  • 匯出到 BigQuery:您可以將記錄匯出到外部服務,例如 BigQuery 或 Cloud Pub/Sub,做為額外分析之用。匯出到 BigQuery 的記錄會保留原本的格式與結構。詳情請參閱記錄匯出總覽
  • 快訊:在 Logging 記錄非預期的行為時,您也可以使用記錄指標來設定快訊政策。如需範例說明,請參閱在計數器指標上建立簡單快訊政策一節。如要進一步瞭解記錄指標,請參閱記錄指標總覽
  • 錯誤報告:您可以使用 Stackdriver Error Reporting 來收集叢集裡產生的錯誤。

停用 Logging

gcloud

如要停用現有叢集的舊版 Stackdriver,請執行下列指令,其中 [CLUSTER_NAME] 是叢集名稱。

gcloud container clusters update [CLUSTER_NAME] --logging-service none

如果您正在叢集裡執行 Stackdriver Kubernetes Engine Monitoring,則必須使用 gcloud beta 在叢集裡設定標記,以便停用監控和記錄:

gcloud beta container clusters update [CLUSTER_NAME] --logging-service none --monitoring-service none

主控台

  1. 造訪 GCP 主控台的「Kubernetes Engine」選單。

    造訪「Kubernetes Engine」選單

  2. 對您想變更的叢集,按一下 [Edit] (編輯) 按鈕 (類似鉛筆圖示)。

  3. 將「Stackdriver Logging」下拉式選單的值設為「Disabled」(已停用)。

  4. 按一下 [Save] (儲存)。

後續步驟

本頁內容對您是否有任何幫助?請提供意見:

傳送您對下列選項的寶貴意見...

這個網頁
Stackdriver Monitoring
需要協助嗎?請前往我們的支援網頁