查看車隊記錄檔

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

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

總覽

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

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

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

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

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

記錄可以轉送至機群主專案中的不同記錄 bucket,並透過不同檢視畫面控管存取權。記錄檔 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 參考資料

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

啟用 fleetScopeLogsConfig 後,系統也會在機群主機專案的 global region 下建立名為 fleet-o11y-scope-$SCOPE_NAME 的記錄值區 (如果該值區尚未存在)。請注意,您無法變更 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 模組,透過 Terraform 啟用車隊記錄功能。

舉例來說,您可以將下列區塊新增至 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"
          }
        }
      }
    }
  }

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

啟用 fleet_scope_logs_config 時,如果機群主機專案中沒有名為 fleet-o11y-scope-$SCOPE_NAME 的記錄值區,系統也會建立該值區。

在本例中,預設記錄會傳送至機群主專案,並保留在原始 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 條件,允許使用者帳戶查看您建立的記錄檔儲存空間資料。以下範例說明如何查看容器記錄檔和 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 值區中的所有預設記錄,請填入下列網址中的變數,然後複製並貼到瀏覽器:

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 記錄

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

  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 的預設保留期限為 30 天。如要更新這段時間,請執行下列指令:

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

其中:

  • SCOPE_NAME 是機群範圍的名稱。

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

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

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 記錄檔值區 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_idscope 變數是否正確。

    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
    

    確認您已向機群註冊叢集