查看車隊記錄

本頁面說明如何啟用及查看車隊記錄。透過機群記錄功能,您可以匯總多個記錄並一起設定範圍,在單一整合式檢視畫面中分析應用程式的健康狀態。本頁內容適用於:

  • 平台管理員想要啟用車隊記錄功能,並查看所有命名空間中的記錄。
  • 服務營運商想查看有權存取的特定命名空間中的記錄。

總覽

機群記錄可讓您查看整個機群層級的記錄,或是特定團隊範圍的記錄。範圍是團隊管理功能,可讓您針對個別團隊定義部分的機群記錄和其他資源,並將各個範圍連結至一或多個機群成員叢集。如要進一步瞭解範圍,請參閱「管理車隊的團隊」。

您可以查看兩種類型的車隊記錄:

  • 預設記錄:不屬於任何特定機群範圍的所有 Kubernetes 記錄 (稽核記錄除外),且具有下列資源類型:

    • k8s_container
    • k8s_pod
    • k8s_node
    • k8s_cluster
    • k8s_control_plane_components
  • 機群範圍記錄:團隊擁有的應用程式在特定機群範圍中部署,且具有多個機群層級命名空間,因此產生的容器和 Pod 記錄。

您可以選擇是否要查看機群範圍記錄。如果不想設定團隊管理功能,您仍可使用車隊記錄功能查看預設記錄。

記錄可以轉送至機群主機專案中的不同記錄檔 bucket,並透過不同檢視畫面控管存取權。記錄檔值區的預設保留期限為 30 天。如有需要,可以設定這段時間。

如果機群包含多個專案的叢集 (跨專案註冊),記錄檔路徑支援兩種模式:

  • MOVE:所有記錄檔都會移至機群主機專案。如果機群中的叢集屬於其他專案,系統不會在原始 Google Cloud 專案中保留這些叢集的記錄。

  • COPY:所有記錄都會傳送至機群主機專案。如果機群中的叢集屬於其他專案,記錄檔也會保留在原始專案中。 Google Cloud

事前準備

  1. 如果您已手動建立 Cloud Logging 記錄檔 bucket、接收器,並設定排除篩選器,請確保您為這些物件指派的名稱不會與機群記錄命名限制衝突。如有命名衝突,請先與支援團隊聯絡,再繼續操作。

  2. 確認要查看記錄的叢集已註冊至所選機群。

  3. 如果尚未安裝,請按照安裝說明安裝 Google Cloud CLI。如要查看車隊記錄,必須使用 424.0.0 以上版本。

  4. 確認機群主機專案已啟用所有必要的 API,包括 Anthos API:

    gcloud services enable --project=FLEET_HOST_PROJECT_ID  \
    gkehub.googleapis.com \
    container.googleapis.com \
    connectgateway.googleapis.com \
    cloudresourcemanager.googleapis.com \
    iam.googleapis.com \
    anthos.googleapis.com
    

    其中:

準備範圍、命名空間和工作負載

如要查看機群範圍記錄,除了準備收集記錄的工作負載外,還需要建立機群範圍和機群命名空間。

繼續操作前,請執行下列指令,為 Google Cloud CLI 設定預設專案:

gcloud config set project FLEET_HOST_PROJECT_ID

建立範圍和命名空間

如要在範圍層級查看記錄,且尚未設定範圍,請按照「管理機群的團隊」中的操作說明建立範圍、將叢集新增至範圍,以及設定機群命名空間。

準備工作負載

如要查看應用程式的記錄資料,您必須在叢集中將工作負載部署至上一個步驟中設定的 fleet 命名空間。無論您選擇查看預設記錄、機群範圍記錄或兩者,都適用這個步驟。以下範例說明如何設定工作負載:

  apiVersion: v1
  kind: Pod
  metadata:
    name: fleet-example-pod
    namespace: NAMESPACE_NAME
  spec:
    containers:
    - name: count
      image: ubuntu:14.04
      args: [bash, -c,
           'for ((i = 0; ; i++)); do echo "$i: $(date)"; sleep 1; done']

部署資源後,如果機群命名空間因故無法建立,您可能會看到錯誤訊息。在本例中,請執行下列指令再次建立命名空間,然後重新執行工作負載部署指令:

  kubectl create namespace NAMESPACE_NAME
  

啟用車隊記錄功能

本節說明如何啟用機群記錄功能,以及授予團隊查看記錄的權限。

gcloud

  • 如要使用 Google Cloud CLI 啟用車隊記錄功能,請在 JSON 或 YAML 檔案中指定這項功能的設定欄位。以下是 JSON 格式的車隊記錄設定範例:

    {
      "loggingConfig": {
          "defaultConfig": {
              "mode": "COPY"
          },
          "fleetScopeLogsConfig": {
              "mode": "MOVE"
          }
      }
    }
    

如要查看可為這項功能設定的所有欄位,請參閱 API 參考資料。

如上例所示,如果啟用 COPY 或 MOVE 模式的 defaultConfig 或 fleetScopeLogsConfig 欄位,系統會建立前置字元為 fleet-o11y- 的記錄檔接收器。這個記錄檔接收器是在 Google Cloud 專案下建立,可將叢集專案的目標記錄檔轉送至機群主專案。

啟用 fleetScopeLogsConfig 後,如果機群主機專案的 global 區域 中還沒有名為 fleet-o11y-scope-$SCOPE_NAME 的記錄檔 bucket,系統也會建立該 bucket。請注意,您無法變更 bucket 的區域。

在這個範例中,預設記錄會傳送至機群主專案,並保留在原始 Google Cloud 專案中,而機群範圍記錄會傳送至機群主專案,不會保留在 Google Cloud 專案中。

  • 將所選設定新增至 JSON 檔案,然後更新機群:

    gcloud container fleet fleetobservability update \
            --logging-config=JSON_FILE
    

將 JSON_FILE 替換為檔案名稱。

Terraform

  • 機群可觀測性功能預設為啟用。如果您是第一次使用 Terraform 管理機群觀測能力功能,請執行下列指令,將該功能匯入 Terraform:
terraform import google_gke_hub_feature.feature projects/FLEET_HOST_PROJECT_ID/locations/global/features/fleetobservability

舉例來說,您可以將下列區塊新增至 Terraform 設定:

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "COPY"
          }
          fleet_scope_logs_config {
            mode = "MOVE"
          }
        }
      }
    }
  }

如上例所示,如果啟用 COPY 或 MOVE 模式的 default_config 或 fleet_scope_logs_config 欄位,系統會建立前置字元為 fleet-o11y- 的記錄檔接收器。這個記錄檔接收器是在 Google Cloud 專案下建立,可將叢集專案的目標記錄檔轉送至機群主專案。

啟用 fleet_scope_logs_config 時,系統也會在機群主機專案下建立名為 fleet-o11y-scope-$SCOPE_NAME 的記錄檔 bucket (如果該記錄檔 bucket 不存在)。

在這個範例中,預設記錄會傳送至機群主專案,並保留在原始 Google Cloud 專案中,而機群範圍記錄會傳送至機群主專案,不會保留在 Google Cloud 專案中。

確認功能規格已更新:

   gcloud container fleet fleetobservability describe
  

輸出內容會顯示已更新設定的 fleetobservability 規格,如下列範例所示:

createTime: '2022-09-30T16:05:02.222568564Z'
membershipStates:
  projects/123456/locations/us-central1/memberships/cluster-1:
    state:
      code: OK
      description: Fleet monitoring enabled.
      updateTime: '2023-04-03T20:22:51.436047872Z'
name:
projects/123456/locations/global/features/fleetobservability
resourceState:
  state: ACTIVE
spec:
  fleetobservability:
    loggingConfig:
      defaultConfig:
        mode: COPY
      fleetScopeLogsConfig:
        mode: MOVE
state:
  state: {}
updateTime: '2023-04-03T20:38:17.719596966Z'

對 fleetobservability 規格所做的任何變更,可能需要幾分鐘才會生效。

設定跨專案記錄權限

如要將叢集註冊至其他專案的機群 (也稱為跨專案註冊),才需要執行本節步驟。如要將叢集專案的記錄傳送至機群主專案,您必須從每個叢集專案將 roles/logging.bucketWriter 角色授予記錄服務帳戶。

  1. 如要從叢集專案中的接收器取得服務帳戶憑證,請執行下列指令:

    FLEET_HOST_PROJECT_ID=FLEET_HOST_PROJECT_ID
    FLEET_HOST_PROJECT_NUMBER=$(gcloud projects describe "${FLEET_HOST_PROJECT_ID}" --format "value(projectNumber)")
    gcloud logging sinks --project=GKE_PROJECT_ID describe fleet-o11y-${FLEET_HOST_PROJECT_NUMBER}-default
    

    如果指令傳回找不到記錄檔接收器的錯誤,請稍候一兩分鐘後再重新執行指令。您可以在接收器說明的 writerIdentity 欄位中查看服務帳戶,如下列範例所示:

    createTime: '2023-04-06T02:26:54.716195307Z'
    destination:
    logging.googleapis.com/projects/123456/locations/global/buckets/_Default
    filter: xxx
    name: fleet-o11y-default
    updateTime: '2023-04-06T19:03:51.598668462Z'
    writerIdentity:
    serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com
    
  2. 將 roles/logging.bucketWriter 角色授予擷取的服務帳戶:

    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "SERVICE_ACCOUNT" \
        --role "roles/logging.bucketWriter"
    

    其中:

    • SERVICE_ACCOUNT 是從上一個步驟擷取的服務帳戶名稱。例如:
    gcloud projects add-iam-policy-binding FLEET_HOST_PROJECT_ID \
        --member "serviceAccount:service-123456@gcp-sa-logging.iam.gserviceaccount.com" \
        --role "roles/logging.bucketWriter"
    

授予團隊記錄存取權

本節說明如何授予使用者權限,讓他們查看容器記錄和 Pod 記錄。

  1. 取得機群專案的 IAM 政策,並以 JSON 格式寫入本機檔案:

    gcloud projects get-iam-policy FLEET_HOST_PROJECT_ID --format json > output.json
    
  2. 新增 IAM 條件,允許使用者帳戶查看您建立的記錄檔 bucket 資料。以下範例說明如何查看容器記錄檔和 Pod 記錄檔:

    {
      "bindings": [
        {
          "members": [
            "user:USER_ACCOUNT_EMAIL"
          ],
          "role": "roles/logging.viewAccessor",
          "condition": {
              "title": "Bucket reader condition example",
              "description": "Grants logging.viewAccessor role to user USER_ACCOUNT_EMAIL for the fleet-o11y-scope-SCOPE_NAME-k8s_container and fleet-o11y-scope-SCOPE_NAME-k8s_pod log view.",
              "expression":
                "resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_container\" || resource.name == \"projects/FLEET_HOST_PROJECT_ID/locations/global/buckets/fleet-o11y-scope-SCOPE_NAME/views/fleet-o11y-scope-SCOPE_NAME-k8s_pod\""
          }
        }
      ],
    }
    
  3. 更新 IAM 政策:

    gcloud projects set-iam-policy FLEET_HOST_PROJECT_ID output.json
    

如要瞭解更多授予存取權的選項,請參閱「控管記錄檢視畫面存取權」。

查看車隊記錄

平台管理員可以查看所有命名空間中的所有記錄。

預設記錄

如要查看車隊主機專案 _Default bucket 中的所有預設記錄,請填入下列網址中的變數,然後複製並貼到瀏覽器:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2F_Default%2Fviews%2F_Default?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

機群範圍容器記錄和 Pod 記錄

服務營運人員可以查看有權存取的命名空間中的記錄檔。如要查看特定 Fleet 範圍內所有命名空間的記錄,請完成下列步驟:

  1. 選取機群主專案後,前往 Google Cloud 控制台的「團隊」部分。

    前往「Teams」

  2. 按一下要查看記錄的團隊範圍,然後按一下「記錄」分頁標籤。

  3. 選取「容器記錄」或「Pod 記錄」,即可篩選記錄檢視畫面。

如要查看範圍內特定命名空間的記錄:

  1. 在「團隊」頁面中選取團隊範圍,然後按一下「命名空間」分頁。
  2. 按一下要查看記錄的命名空間,然後按一下「記錄」分頁標籤。
  3. 選取「容器記錄」或「Pod 記錄」,即可篩選記錄檢視畫面。

或者,如要查看容器記錄,請填入下列網址中的變數,然後複製並貼到瀏覽器中:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_container?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

如要在特定機群範圍內查看 Pod 記錄,請填入下列網址中的變數,然後複製並貼到瀏覽器:

https://console.cloud.google.com/logs/query;query=;storageScope=storage,projects%2FFLEET_HOST_PROJECT_ID%2Flocations%2Fglobal%2Fbuckets%2Ffleet-o11y-scope-SCOPE_NAME%2Fviews%2Ffleet-o11y-scope-SCOPE_NAME-k8s_pod?jsmode=O&mods=pan_ng2&project=FLEET_HOST_PROJECT_ID

如要進一步瞭解如何分析記錄檔資料,請參閱「Logs Explorer 介面」。

停用機群記錄

如要停用車隊記錄功能,請完成下列步驟:

gcloud

  1. 將下列設定儲存到名為 disable_logging_config.json 的檔案:

    {
      "loggingConfig": {}
    }
    
  2. 更新 fleetobservability 功能規格:

    gcloud container fleet fleetobservability update \
            --logging-config=disable_logging_config.json
    

Terraform

在 Terraform 設定中,將所有記錄路由模式更新為 MODE_UNSPECIFIED。範例如下:

  resource "google_gke_hub_feature" "feature" {
    name = "fleetobservability"
    location = "global"
    spec {
      fleetobservability {
        logging_config {
          default_config {
            mode = "MODE_UNSPECIFIED"
          }
          fleet_scope_logs_config {
            mode = "MODE_UNSPECIFIED"
          }
        }
      }
    }
  }

確認功能規格已更新:

   gcloud container fleet fleetobservability describe
  

輸出內容會顯示已更新設定的 fleetobservability 規格:

  createTime: '2022-09-30T16:05:02.222568564Z'
  membershipStates:
    projects/123456/locations/global/memberships/cluster-1:
      state:
        code: OK
        description: Fleet monitoring enabled.
        updateTime: '2023-04-03T20:22:51.436047872Z'
  name:
  projects/123456/locations/global/features/fleetobservability
  resourceState:
    state: ACTIVE
  spec:
    fleetobservability:
      loggingConfig: {}
  state:
    state: {}
  updateTime: '2023-04-03T20:38:17.719596966Z'
  

對 fleetobservability 規格所做的任何變更,可能需要幾分鐘才會生效。

停用機群記錄後,系統會從專案中移除記錄接收器和排除篩選器。不過,系統會保留為範圍建立的所有記錄檔 bucket,以及在記錄檔 bucket 下建立的記錄檢視區塊。如要刪除機群主專案中的記錄檔 bucket,請參閱「刪除值區」。

更新記錄檔 bucket 的保留期限

記錄檔值區的預設保留期限為 30 天。如要更新這段時間,請執行下列指令:

gcloud logging buckets update fleet-o11y-scope-SCOPE_NAME --location=global --retention-days=RETENTION_DAYS

其中:

  • SCOPE_NAME 是車隊範圍的名稱。

  • RETENTION_DAYS 是新的保留期限天數。如要進一步瞭解如何設定記錄檔儲存空間,請參閱「管理儲存空間」。

如果延長儲存空間的保留期限,系統只會從延長期限後開始套用保留規則,不會追溯套用。適用保留期限結束後,記錄就無法復原。

API 參考資料

本節提供可新增至 fleetobservability 物件的可能欄位相關資訊。

fleetobservability

fleetobservability 定義機群可觀測性設定。

欄位 說明 結構定義 選用
loggingConfig

指定是否為整個車隊啟用車隊記錄功能。

如未指定,整個機群的機群記錄功能會停用。

loggingConfig 是

loggingConfig

loggingConfig 定義機群可觀測性中機群記錄功能設定。

欄位 說明 結構定義 選用
defaultConfig 設定機群中預設記錄的記錄轉送行為。 routingConfig 是
fleetScopeLogsConfig 設定機群範圍記錄的記錄檔轉送行為。 routingConfig 是

routingConfig

routingConfig 定義機群記錄功能中的記錄轉送模式設定。

欄位 說明 結構定義 選用
模式

指定啟用記錄轉送功能,未指定或 MODE_UNSPECIFIED 則為停用記錄轉送功能。

如果設為 COPY,記錄檔會複製到目的地專案。

如果設為 MOVE,記錄會移至目標專案。

字串;其中一個值:MOVE、COPY 和 MODE_UNSPECIFIED 是

命名限制

啟用機群可觀測性後,機群可觀測性控制器會為建立的記錄物件保留下列名稱。為避免發生非預期行為,建立自訂記錄檔 bucket、接收器和設定排除篩選器時,請勿使用這些名稱。

功能已啟用 已建立物件 機群觀測功能使用的名稱
defaultConfig 接收器 fleet-o11y-FLEET_PROJECT_NUMBER-default
排除篩選器。 fleet-o11y-FLEET_PROJECT_NUMBER-default-exclusion。這個名稱保留在叢集專案的 _Default 接收器下。
fleetScopeLogsConfig 記錄檔 bucket fleet-o11y-scope-SCOPE_NAME
  • 值區中容器記錄的記錄檢視畫面
  • fleet-o11y-scope-SCOPE_NAME-k8s_container
  • 查看值區中 Pod 記錄的記錄檔
  • fleet-o11y-scope-SCOPE_NAME-k8s_pod
    接收器 fleet-o11y-FLEET_PROJECT_NUMBER-scope-SCOPE_NAME
    「排除」篩選器 fleet-o11y-FLEET_PROJECT_NUMBER-scope-exclusion

    疑難排解

    本節說明如何解決車隊記錄相關問題。

    接收器設定錯誤的電子郵件通知

    如果收到主旨為「[ACTION REQUIRED] Cloud Logging sink configuration error in <Your GCP Project>」的電子郵件,表示記錄檔接收器的服務帳戶沒有權限將記錄寫入接收器的目的地。如要解決這個問題,請按照「跨專案記錄權限」一文中的步驟操作。

    Cloud Logging 使用者介面顯示不明錯誤訊息

    如果在 Cloud Logging 使用者介面中看到下列錯誤,請仔細檢查網址中輸入的 project_id 和 scope 變數是否正確。

    Error: There is an unknown error while executing this operation.
    

    找不到會員錯誤

    您可能會看到下列錯誤訊息:

    ERROR: (gcloud.alpha.container.fleet.memberships.bindings.create) NOT_FOUND: Resource 'parent resource not found for projects/...' was not found
    

    確認您已向機群註冊叢集。