設定記錄和監控功能

適用於裸機的 Google Distributed Cloud (僅限軟體) 支援多種叢集記錄和監控選項,包括雲端代管服務、開放原始碼工具,以及通過驗證的第三方商業解決方案相容性。本頁面將說明這些選項,並提供基本指南,協助您為環境選取合適的解決方案。

本頁面適用於想監控已部署應用程式或服務健康狀態的管理員、架構師和營運人員,例如服務水準目標 (SLO) 遵循情形。如要進一步瞭解 Google Cloud 內容中提及的常見角色和範例工作,請參閱「常見的 GKE Enterprise 使用者角色和工作」。

Google Distributed Cloud 選項

您可以透過下列幾種方式記錄及監控叢集:

  • Cloud Logging 和 Cloud Monitoring,預設會在裸機系統元件上啟用。
  • 您可以透過 Cloud Marketplace 取得 Prometheus 和 Grafana。
  • 已驗證的第三方解決方案設定。

Cloud Logging 和 Cloud Monitoring

Google Cloud Observability 是Google Cloud的內建觀測解決方案。提供全代管記錄解決方案、指標收集、監控、資訊主頁和快訊功能。Cloud Monitoring 監控 Google Distributed Cloud 叢集的方式,與監控雲端 GKE 叢集類似。

使用必要的服務帳戶和 IAM 角色建立叢集時,系統預設會啟用 Cloud Logging 和 Cloud Monitoring。您無法停用 Cloud Logging 和 Cloud Monitoring。如要進一步瞭解服務帳戶和必要角色,請參閱設定服務帳戶

您可以設定代理程式變更下列項目:

  • 記錄和監控範圍,從僅限系統元件 (預設) 到系統元件和應用程式。
  • 收集的指標層級,從僅限最佳化指標組合 (預設) 到所有指標。

詳情請參閱本文的「為 Google Distributed Cloud 設定 Stackdriver 代理程式」一節。

Logging 和 Monitoring 提供單一雲端式觀測解決方案,設定簡便且功能強大。在 Google Distributed Cloud 上執行工作負載時,我們強烈建議使用 Logging 和 Monitoring。如果應用程式的元件在 Google Distributed Cloud 和標準內部部署基礎架構上執行,您可能需要考慮其他解決方案,才能取得這些應用程式的端對端檢視畫面。

Prometheus 和 Grafana

Prometheus 和 Grafana 是兩項熱門的開放原始碼監控產品,可透過 Cloud Marketplace 取得:

  • Prometheus 會收集應用程式和系統指標。

  • Alertmanager 會透過多種不同的警示機制傳送警示。

  • Grafana 是資訊主頁工具。

建議您使用以 Cloud Monitoring 為基礎的 Google Cloud Managed Service for Prometheus,滿足所有監控需求。使用 Google Cloud Managed Service for Prometheus 時,您可以免費監控系統元件。Google Cloud Managed Service for Prometheus 也與 Grafana 相容。不過,如果您偏好純粹的本機監控系統,也可以選擇在叢集中安裝 Prometheus 和 Grafana。

如果您在本機安裝 Prometheus,並想從系統元件收集指標,就必須授予本機 Prometheus 執行個體權限,才能存取系統元件的指標端點:

  • 將 Prometheus 執行個體的服務帳戶繫結至預先定義的 gke-metrics-agent ClusterRole,並使用服務帳戶權杖做為憑證,從下列系統元件抓取指標:

    • kube-apiserver
    • kube-scheduler
    • kube-controller-manager
    • kubelet
    • node-exporter
  • 使用儲存在 kube-system/stackdriver-prometheus-etcd-scrape 密鑰中的用戶端金鑰和憑證,驗證從 etcd 擷取的指標。

  • 建立 NetworkPolicy,允許從命名空間存取 kube-state-metrics。

第三方解決方案

Google 與多家第三方記錄和監控解決方案供應商合作,確保他們的產品能與 Google Distributed Cloud 順暢搭配使用。包括 Datadog、Elastic 和 Splunk。日後會新增其他經過驗證的第三方。

如要搭配使用第三方解決方案與 Google Distributed Cloud,請參閱下列解決方案指南:

Google Distributed Cloud 的記錄與監控功能運作方式

建立新的管理員或使用者叢集時,系統會在每個叢集中安裝並啟用 Cloud Logging 和 Cloud Monitoring。

每個叢集上的 Stackdriver 代理程式包含下列元件:

  • Stackdriver 運算子 (stackdriver-operator-*):管理部署至叢集的所有其他 Stackdriver 代理程式生命週期。

  • Stackdriver 自訂資源。系統會在 Google Distributed Cloud 安裝程序中自動建立的資源。

  • GKE 指標代理程式 (gke-metrics-agent-*):以 OpenTelemetry 收集器為基礎的 DaemonSet,可從每個節點擷取指標,並傳送至 Cloud Monitoring。此外,系統也會納入 node-exporter DaemonSet 和 kube-state-metrics 部署作業,提供更多叢集指標。

  • Stackdriver Log Forwarder (stackdriver-log-forwarder-*):Fluent Bit DaemonSet,可將每部機器的記錄轉送至 Cloud Logging。記錄轉送器會在節點上緩衝處理記錄項目,並在最多 4 小時內重新傳送。如果緩衝區已滿,或記錄轉送器無法連線至 Cloud Logging API 超過 4 小時,系統就會捨棄記錄。

  • 中繼資料代理程式 (stackdriver-metadata-agent-):部署作業,可將 Kubernetes 資源 (例如 Pod、部署作業或節點) 的中繼資料傳送至作業設定監控 API。新增中繼資料後,您就能依部署名稱、節點名稱,甚至是 Kubernetes 服務名稱查詢指標資料。

如要查看 Stackdriver 安裝的代理程式,請執行下列指令:

kubectl -n kube-system get pods -l "managed-by=stackdriver"

這個指令會輸出類似以下的結果:

kube-system   gke-metrics-agent-4th8r                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-8lt4s                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-dhxld                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-lbkl2                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-pblfk                                     1/1     Running   1 (40h ago)   40h
kube-system   gke-metrics-agent-qfwft                                     1/1     Running   1 (40h ago)   40h
kube-system   kube-state-metrics-9948b86dd-6chhh                          1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-5s4pg                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-d9gwv                                         1/1     Running   2 (40h ago)   40h
kube-system   node-exporter-fhbql                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-gzf8t                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-tsrpp                                         1/1     Running   1 (40h ago)   40h
kube-system   node-exporter-xzww7                                         1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-8lwxh                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-f7cgf                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-fl5gf                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-q5lq8                             1/1     Running   2 (40h ago)   40h
kube-system   stackdriver-log-forwarder-www4b                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-log-forwarder-xqgjc                             1/1     Running   1 (40h ago)   40h
kube-system   stackdriver-metadata-agent-cluster-level-5bb5b6d6bc-z9rx7   1/1     Running   1 (40h ago)   40h

Cloud Monitoring 指標

如需 Cloud Monitoring 收集的指標清單,請參閱「查看 Google Distributed Cloud 指標」。

為 Google Distributed Cloud 設定 Stackdriver 代理程式

Google Distributed Cloud 安裝的 Stackdriver 代理程式會收集系統元件的資料,以維護叢集並排解相關問題。以下各節說明 Stackdriver 設定和運作模式。

僅限系統元件 (預設模式)

安裝後,Stackdriver 代理程式預設會收集記錄和指標,包括效能詳細資料 (例如 CPU 和記憶體使用率) 和類似的中繼資料,適用於 Google 提供的系統元件。包括管理員叢集中的所有工作負載,以及使用者叢集中的 kube-system、gke-system、gke-connect、istio-system 和 config-management-system 命名空間中的工作負載。

系統元件和應用程式

如要在預設模式中啟用應用程式記錄和監控功能,請按照「啟用應用程式記錄與監控功能」一文的步驟操作。

最佳化指標 (預設指標)

根據預設,叢集中執行的 kube-state-metrics 部署作業會收集一組經過最佳化的 Kube 指標,並回報給 Google Cloud Observability (原稱 Stackdriver)。

收集這組最佳化指標所需的資源較少,可提升整體效能和延展性。

如要停用最佳化指標 (不建議),請在 Stackdriver 自訂資源中覆寫預設設定。

針對所選系統元件使用 Google Cloud Managed Service for Prometheus

Google Cloud Managed Service for Prometheus 是 Cloud Monitoring 的一部分,可做為系統元件的選項。Google Cloud Managed Service for Prometheus 的優點包括:

  • 您可以繼續使用現有的 Prometheus 型監控功能,無須變更快訊和 Grafana 資訊主頁。

  • 如果您同時使用 GKE 和 Google Distributed Cloud,可以對所有叢集上的指標使用相同的 Prometheus 查詢語言 (PromQL)。您也可以在 Google Cloud 控制台的 Metrics Explorer 中使用 PromQL 分頁。

啟用及停用 Google Cloud Managed Service for Prometheus

從 Google Distributed Cloud 1.30.0-gke.1930 版開始,Google Cloud Managed Service for Prometheus 一律會啟用。在舊版中,您可以編輯 Stackdriver 資源 stackdriver,啟用或停用 Google Cloud Managed Service for Prometheus。如要為 1.30.0-gke.1930 之前的叢集版本停用 Google Cloud Managed Service for Prometheus,請在 stackdriver 資源中將 spec.featureGates.enableGMPForSystemMetrics 設為 false

查看指標資料

如果 enableGMPForSystemMetrics 設為 true,下列元件的指標在 Cloud Monitoring 中的儲存和查詢格式會有所不同:

  • kube-apiserver
  • kube-scheduler
  • kube-controller-manager
  • kubelet 和 cadvisor
  • kube-state-metrics
  • node-exporter

在新格式中,您可以使用 PromQL 或 Monitoring Query Language (MQL) 查詢上述指標:

PromQL

PromQL 查詢範例:

histogram_quantile(0.95, sum(rate(apiserver_request_duration_seconds_bucket[5m])) by (le))

MQL

如要使用 MQL,請將受監控的資源設為 prometheus_target,使用帶有 kubernetes.io/anthos 前置字元的指標名稱,並在指標名稱後方加上 Prometheus 型別做為後置字元。

fetch prometheus_target
| metric 'kubernetes.io/anthos/apiserver_request_duration_seconds/histogram'
| align delta(5m)
| every 5m
| group_by [], [value_histogram_percentile: percentile(value.histogram, 95)]

使用 Google Cloud Managed Service for Prometheus 設定 Grafana 資訊主頁

如要搭配使用 Grafana 和 Google Cloud Managed Service for Prometheus 的指標資料,請先設定 Grafana 資料來源並完成驗證。如要設定及驗證資料來源,請使用資料來源同步器 (datasource-syncer) 產生 OAuth2 憑證,並透過 Grafana 資料來源 API 將憑證同步到 Grafana。資料來源同步器會在 Grafana 的資料來源中,將 Cloud Monitoring API 設為 Prometheus 伺服器網址 (網址值開頭為 https://monitoring.googleapis.com)。

請按照「使用 Grafana 查詢」一文中的步驟,驗證及設定 Grafana 資料來源,以便查詢 Google Cloud Managed Service for Prometheus 的資料。

GitHub 上的 anthos-samples 存放區提供一組 Grafana 資訊主頁範例。如要安裝範本資訊主頁,請按照下列步驟操作:

  1. 下載 JSON 範例檔案:

    git clone https://github.com/GoogleCloudPlatform/anthos-samples.git
    cd anthos-samples/gmp-grafana-dashboards
    
  2. 如果建立 Grafana 資料來源時使用的名稱不是 Managed Service for Prometheus,請變更所有 JSON 檔案中的 datasource 欄位:

    sed -i "s/Managed Service for Prometheus/[DATASOURCE_NAME]/g" ./*.json
    

    [DATASOURCE_NAME] 改為 Grafana 中指向 Prometheus frontend 服務的資料來源名稱。

  3. 在瀏覽器中存取 Grafana UI,然後選取「資訊主頁」選單下方的「+ 匯入」

    前往 Grafana 的資訊主頁匯入頁面。

  4. 上傳 JSON 檔案,或複製並貼上檔案內容,然後選取「載入」。檔案內容載入完成後,請選取「匯入」。您也可以選擇在匯入前變更資訊主頁名稱和 UID。

    在 Grafana 中匯入資訊主頁。

  5. 如果 Google Distributed Cloud 和資料來源設定正確,匯入的資訊主頁應可順利載入。舉例來說,下圖顯示由 cluster-capacity.json 設定的資訊主頁。

    Grafana 中的叢集容量資訊主頁。

其他資源

如要進一步瞭解 Google Cloud Managed Service for Prometheus,請參閱下列文章:

設定 Stackdriver 元件資源

建立叢集時,Google Distributed Cloud 會自動建立 Stackdriver 自訂資源。您可以編輯自訂資源中的規格,覆寫 Stackdriver 元件的 CPU 和記憶體要求與限制預設值,也可以個別覆寫預設的最佳化指標設定。

覆寫 Stackdriver 元件的預設 CPU 和記憶體要求與限制

高 Pod 密度的叢集會造成較高的記錄和監控負擔。在極端情況下,Stackdriver 元件可能會回報接近 CPU 和記憶體使用率上限,甚至可能因資源限制而持續重新啟動。在本例中,如要覆寫 Stackdriver 元件的 CPU 和記憶體要求與限制預設值,請按照下列步驟操作:

  1. 執行下列指令,在指令列編輯器中開啟 Stackdriver 自訂資源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. 在 Stackdriver 自訂資源中,於 spec 欄位下方新增 resourceAttrOverride 區段:

    resourceAttrOverride:
          DAEMONSET_OR_DEPLOYMENT_NAME/CONTAINER_NAME:
            LIMITS_OR_REQUESTS:
              RESOURCE: RESOURCE_QUANTITY

    請注意,resourceAttrOverride 區段會覆寫您指定元件的所有現有預設限制和要求。resourceAttrOverride 支援下列元件:

    • gke-metrics-agent/gke-metrics-agent
    • stackdriver-log-forwarder/stackdriver-log-forwarder
    • stackdriver-metadata-agent-cluster-level/metadata-agent
    • node-exporter/node-exporter
    • kube-state-metrics/kube-state-metrics

    範例檔案如下所示:

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
      name: stackdriver
      namespace: kube-system
    spec:
      anthosDistribution: baremetal
      projectID: my-project
      clusterName: my-cluster
      clusterLocation: us-west-1a
      resourceAttrOverride:
        gke-metrics-agent/gke-metrics-agent:
          requests:
            cpu: 110m
            memory: 240Mi
          limits:
            cpu: 200m
            memory: 4.5Gi
  3. 如要儲存對 Stackdriver 自訂資源所做的變更,請儲存並結束命令列編輯器。

  4. 檢查 Pod 的健康狀態:

    kubectl -n kube-system get pods -l "managed-by=stackdriver"

    健康狀態良好的 Pod 回應如下:

    gke-metrics-agent-4th8r                1/1     Running   1   40h
  5. 檢查元件的 Pod 規格,確認資源設定正確無誤。

    kubectl -n kube-system describe pod POD_NAME

    POD_NAME 替換為您剛變更的 Pod 名稱。例如:gke-metrics-agent-4th8r

    回應如下所示:

      Name:         gke-metrics-agent-4th8r
      Namespace:    kube-system
      ...
      Containers:
        gke-metrics-agent:
          Limits:
            cpu: 200m
            memory: 4.5Gi
          Requests:
            cpu: 110m
            memory: 240Mi
          ...

停用最佳化指標

根據預設,叢集中執行的 kube-state-metrics 部署作業會收集一組經過最佳化的 Kube 指標,並回報至 Stackdriver。如需其他指標,建議您從 Google Distributed Cloud 指標清單中尋找替代指標。

以下列舉幾個可用的替代字詞:

已停用的指標 更換
kube_pod_start_time container/uptime
kube_pod_container_resource_requests container/cpu/request_cores
container/memory/request_bytes
kube_pod_container_resource_limits container/cpu/limit_cores
container/memory/limit_bytes

如要停用最佳化指標預設設定 (不建議),請執行下列操作:

  1. 在指令列編輯器中開啟 Stackdriver 自訂資源:

    kubectl -n kube-system edit stackdriver stackdriver
  2. optimizedMetrics 欄位設為 false

    apiVersion: addons.gke.io/v1alpha1
    kind: Stackdriver
    metadata:
    name: stackdriver
    namespace: kube-system
    spec:
    anthosDistribution: baremetal
    projectID: my-project
    clusterName: my-cluster
    clusterLocation: us-west-1a
    optimizedMetrics: false
    
  3. 儲存變更,然後結束指令列編輯器。

指標伺服器

指標伺服器是各種自動調度資源管道的容器資源指標來源。指標伺服器會從 kubelet 擷取指標,並透過 Kubernetes 指標 API 公開這些指標。HPA 和 VPA 接著會使用這些指標,判斷何時觸發自動調度資源。系統會使用外掛程式調整器調度指標伺服器。

在極端情況下,如果 Pod 密度過高,導致記錄和監控的負荷過大,Metrics Server 可能會因資源限制而停止並重新啟動。在這種情況下,您可以編輯 gke-managed-metrics-server 命名空間中的 metrics-server-config configmap,並變更 cpuPerNodememoryPerNode 的值,為指標伺服器分配更多資源。

kubectl edit cm metrics-server-config -n gke-managed-metrics-server

ConfigMap 的內容範例如下:

apiVersion: v1
data:
  NannyConfiguration: |-
    apiVersion: nannyconfig/v1alpha1
    kind: NannyConfiguration
    cpuPerNode: 3m
    memoryPerNode: 20Mi
kind: ConfigMap

更新 ConfigMap 後,請使用下列指令重新建立 metrics-server Pod:

kubectl delete pod -l k8s-app=metrics-server -n gke-managed-metrics-server

記錄檔和指標的路由

Stackdriver 記錄轉送程式 (stackdriver-log-forwarder) 會將每個節點機器的記錄傳送至 Cloud Logging。同樣地,GKE 指標代理程式 (gke-metrics-agent) 會將每個節點機器的指標傳送至 Cloud Monitoring。傳送記錄和指標前,Stackdriver 運算子 (stackdriver-operator) 會將 stackdriver 自訂資源中的 clusterLocation 欄位值附加至每個記錄項目和指標,然後再將這些項目和指標傳送至 Google Cloud。此外,記錄和指標會與自訂資源規格 (spec.projectID) 中指定的 Google Cloud 專案stackdriver建立關聯。

stackdriver 資源會從叢集資源的 clusterOperations 區段中,在叢集建立時取得 clusterLocationprojectID 欄位的值。projectIDlocation

Stackdriver 代理程式傳送的所有指標和記錄項目都會轉送至全域擷取端點。接著,資料會轉送至最近的可連線區域 Google Cloud 端點,確保資料傳輸的可靠性。

全域端點收到指標或記錄項目後,接下來的動作會因服務而異:

  • 記錄檔轉送的設定方式:記錄端點收到記錄訊息時,Cloud Logging 會透過記錄檔路由器傳送訊息。記錄路由器設定中的接收器和篩選器會決定訊息的轉送方式。您可以將記錄項目轉送至目的地,例如儲存記錄項目的地區 Logging bucket,或是 Pub/Sub。如要進一步瞭解記錄檔路徑的運作方式和設定方法,請參閱「轉送和儲存空間總覽」一文。

    在此路由程序中,系統不會考量 stackdriver 自訂資源中的 clusterLocation 欄位,也不會考量叢集規格中的 clusterOperations.location 欄位。如果是記錄,clusterLocation 只會用於標記記錄項目,有助於在記錄探索工具中篩選記錄。

  • 指標路由設定方式:指標端點收到指標項目時,系統會自動將項目路由至指標指定的儲存位置。指標中的位置來自 stackdriver 自訂資源中的 clusterLocation 欄位。

  • 規劃設定:設定 Cloud Logging 和 Cloud Monitoring 時,請設定記錄檔路由器,並指定適當的 clusterOperations.location 和位置,以滿足您的需求。舉例來說,如果希望記錄和指標前往相同位置,請將 clusterOperations.location 設為與 Log Router 用於 Google Cloud 專案的 Google Cloud 地區相同。

  • 視需要更新記錄設定:您可以隨時變更記錄的目的地設定,以因應業務需求,例如災害復原計畫。在Google Cloud 中變更記錄路由器設定後,變更會迅速生效。叢集資源的 clusterOperations 區段中,locationprojectID 欄位是不可變更的,因此叢集建立後就無法更新。我們不建議您直接變更 stackdriver 資源中的值。每當叢集作業 (例如升級) 觸發協調程序時,這項資源就會還原為原始叢集建立狀態。

記錄與監控功能的設定規定

如要透過 Google Distributed Cloud 啟用 Cloud Logging 和 Cloud Monitoring,必須符合幾項設定需求。這些步驟包含在「啟用 Google 服務」頁面的「設定服務帳戶以搭配使用 Logging 和 Monitoring」一節,以及下列清單中:

  1. 您必須在Google Cloud 專案中建立 Cloud Monitoring 工作區。方法是在Google Cloud 控制台中點選「Monitoring」(監控),然後按照工作流程操作。
  2. 您必須啟用下列 Stackdriver API:

  3. 您必須將下列 IAM 角色指派給 Stackdriver 代理程式使用的服務帳戶:

    • logging.logWriter
    • monitoring.metricWriter
    • stackdriver.resourceMetadata.writer
    • monitoring.dashboardEditor
    • opsconfigmonitoring.resourceMetadata.writer

記錄標記

許多 Google Distributed Cloud 記錄檔都有 F 標記:

logtag: "F"

這個標記表示記錄項目完整或完整。如要進一步瞭解這個標記,請參閱 GitHub 上 Kubernetes 設計提案中的「記錄格式」。

定價

Google Kubernetes Engine (GKE) Enterprise 版的系統記錄檔和指標不收費。

在 Google Distributed Cloud 叢集中,Google Kubernetes Engine (GKE) Enterprise 版系統記錄檔和指標包括以下內容:

  • 來自管理員叢集中所有元件的記錄檔和指標。
  • 來自使用者叢集中這些命名空間元件的記錄檔和指標:kube-systemgke-systemgke-connectknative-servingistio-systemmonitoring-systemconfig-management-systemgatekeeper-systemcnrm-system

詳情請參閱 Google Cloud Observability 定價

如要瞭解 Cloud Logging 指標的抵免額,請與銷售人員聯絡以取得定價資訊