本文件說明如何設定 Google Cloud Managed Service for Prometheus,以便從 Google Kubernetes Engine (GKE) 叢集和工作負載中,篩選及收集特定 Kubernetes 指標。
您應該已熟悉下列項目:
在 GKE 中收集指標
GKE 叢集中的系統元件會發出並公開 Prometheus 指標。根據預設,所有叢集都會擷取 GKE 專屬的系統指標。您也可以使用其他內建指標套裝組合,擷取各種元件的精選指標集合。
除了內建的 GKE 指標套件,您也可以手動設定 Google Cloud Managed Service for Prometheus,擷取特定的 Prometheus 指標。這項自訂設定適用於下列用途:
- 監控叢集和工作負載中的特定信號。
- 停用不需要的指標套件,並只擷取部分指標,藉此節省費用。
- 收集元件發出的指標,但這些指標未納入指標套件。
對運算子而言,節點指標 (由每個節點上的 kubelet 程序發出) 可能有助於監控工作負載和節點的特定信號。
指標收集自訂資源
如要篩選及擷取特定指標,請在下列任一自訂資源中設定 Prometheus 重新標記規則:
PodMonitoring:從特定命名空間的 Pod 設定指標收集作業。ClusterPodMonitoring: 從任何命名空間的 Pod 設定指標收集作業。ClusterNodeMonitoring: 從節點元件 (例如kubelet和 cAdvisor) 設定指標收集作業。
指標重複
如果您篩選的指標也包含在叢集的有效指標套件中,則該指標會在 Google Cloud Managed Service for Prometheus 中多次顯示。舉例來說,如果叢集已啟用 KUBELET 指標套件,且您設定要收集 kubelet_running_containers 指標,就會看到重複的值。
為避免重複,請確認您收集的指標未納入任何有效的指標套件。如要進一步瞭解內含指標,請參閱下列指標套件:
事前準備
開始之前,請務必先完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update指令,取得最新版本。較舊的 gcloud CLI 版本可能不支援執行本文件中的指令。
- 確認您具備這份文件所需的權限。
- 使用現有 GKE 叢集或建立新叢集。
必要的角色
如要取得收集及查看指標所需的權限,請要求管理員在專案中授予您下列 IAM 角色:
-
在叢集中建立 Kubernetes 資源:
Kubernetes Engine 開發人員 (
roles/container.developer) -
在 Monitoring 中查看指標:
Monitoring 檢視者 (
roles/monitoring.viewer)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。
啟用 Google Cloud Managed Service for Prometheus
所有 GKE 叢集都會預設啟用 Google Cloud Managed Service for Prometheus,且無法在 Autopilot 叢集中停用。如果您使用 Autopilot 叢集,請跳至「設定指標收集作業」一節。
如要確認 Google Cloud Managed Service for Prometheus 是否已在標準叢集中啟用,請選取下列其中一個選項:
控制台
前往 Google Cloud 控制台的「Kubernetes clusters」(Kubernetes 叢集) 頁面。
在要檢查的叢集所在資料列中,依序按一下 「動作」>「編輯」。「叢集詳細資料」頁面隨即開啟。
在「功能」部分,檢查「Managed Service for Prometheus」欄位中的值。如果值為「Enabled」(已啟用),請跳至「設定指標收集作業」一節。如果值為「已停用」,請啟用 Google Cloud Managed Service for Prometheus:
- 按一下「編輯 Managed Service for Prometheus」。系統會開啟「編輯 Managed Service for Prometheus」對話方塊。
- 選取「啟用 Managed Service for Prometheus」核取方塊。
- 按一下 [儲存變更]。
gcloud
檢查叢集是否已啟用 Google Cloud Managed Service for Prometheus:
gcloud container clusters describe CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--format='value(monitoringConfig.managedPrometheusConfig.enabled)'
更改下列內容:
CLUSTER_NAME:標準叢集名稱。CONTROL_PLANE_LOCATION:叢集控制平面的區域或可用區,例如us-central1或us-central1-a。
如果輸出內容為 True,表示已啟用 Google Cloud Managed Service for Prometheus。
如果輸出內容為 False,請啟用 Google Cloud Managed Service for Prometheus:
gcloud container clusters update CLUSTER_NAME \
--location=CONTROL_PLANE_LOCATION \
--enable-managed-prometheus
設定指標收集
如要設定 Google Cloud Managed Service for Prometheus 擷取特定發出的指標,您需要下列指標資訊:
- 指標名稱,例如
kubelet_working_pods。 - 公開指標的端點,例如
/metrics/cadvisor或/metrics。
如要查看指標及設定收集作業,請按照下列步驟操作:
在特定元件的參考說明文件中尋找指標。舉例來說,您可以使用下列資源尋找節點指標:
檢查叢集的有效指標套件:
gcloud container clusters describe CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --flatten=monitoringConfig.componentConfig \ --format='value(enableComponents)'輸出結果會與下列內容相似:
SYSTEM_COMPONENTS;STORAGE;POD;DEPLOYMENT;STATEFULSET;DAEMONSET;HPA;JOBSET;CADVISOR;KUBELET;DCGM使用「可用指標」中的資訊,確認要收集的指標是否位於其中一個有效套件中。如果指標包含在有效的指標套件中,監控畫面可能會顯示重複的指標。如果指標不在有效的指標套件中,請繼續下一個步驟。
選用:如要確認指標是否可透過指標端點取得,請使用
kubectl get --raw指令查詢端點。舉例來說,下列指令會查詢/metrics端點的kubelet_working_pods指標:kubectl get --raw "/api/v1/nodes/NODE_NAME/proxy/metrics" | grep "kubelet_working_pods"將
NODE_NAME替換為要查詢的節點名稱。輸出結果會與下列內容相似,表示指標可用:
# HELP kubelet_working_pods [ALPHA] Number of pods the kubelet is actually running, broken down by lifecycle phase, whether the pod is desired, orphaned, or runtime only (also orphaned), and whether the pod is static. An orphaned pod has been removed from local configuration or force deleted in the API and consumes resources that are not otherwise visible. # TYPE kubelet_working_pods gauge kubelet_working_pods{config="desired",lifecycle="sync",static=""} 8 kubelet_working_pods{config="desired",lifecycle="sync",static="true"} 1 kubelet_working_pods{config="desired",lifecycle="terminated",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminated",static="true"} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static=""} 0 kubelet_working_pods{config="desired",lifecycle="terminating",static="true"} 0找出要收集的指標後,請在 PodMonitoring、ClusterPodMonitoring 或 ClusterNodeMonitoring 自訂資源中使用 Prometheus 重新標記規則,篩選出該指標。您使用的自訂資源取決於指標的屬性,如「指標集合自訂資源」一節所述。
舉例來說,請查看下列 ClusterNodeMonitoring 資訊清單:
apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: kubelet-pod-counts spec: selector: matchLabels: {} endpoints: - path: "/metrics" scheme: "https" interval: "30s" tls: insecureSkipVerify: true # metricRelabeling specifies the metrics to ingest. The metrics must be # available at the specified endpoint. metricRelabeling: - action: keep sourceLabels: [__name__] regex: kubelet_(active|working)_pods這個資訊清單具有下列屬性:
selector.matchLabels欄位為空集合 ({}),符合所有節點。endpoints.path欄位會識別要擷取的指標端點。metricRelabeling欄位會識別要收集的特定指標。 在本範例中,Google Cloud Managed Service for Prometheus 會從端點收集名稱為kubelet_active_pods和kubelet_working_pods的指標。
部署自訂資源後,Google Cloud Managed Service for Prometheus 會擷取符合指定設定的指標。您可以使用與其他指標相同的方法 (例如 Cloud Monitoring),查看及查詢這些指標。
驗證範例工作負載的指標收集作業
下列步驟說明如何設定 Google Cloud Managed Service for Prometheus,從 cAdvisor 收集壓力停滯資訊 (PSI) 指標。在這些範例步驟中,您會建立 ClusterNodeMonitoring (因為 cAdvisor 是節點元件)、建立會觸發 PSI 指標的測試 Pod,然後確認指標是否顯示在 Monitoring 中。如要在本範例中收集 PSI 指標,叢集必須執行 GKE 1.35 以上版本。
建立測試 Pod,從 cAdvisor 觸發 PSI 指標:
將下列 Pod 儲存為
psi-pod.yaml:apiVersion: v1 kind: Pod metadata: name: cpu-pressure-pod spec: restartPolicy: Never containers: - name: cpu-stress image: registry.k8s.io/e2e-test-images/agnhost:2.47 args: - "stress" - "--cpus" - "1" resources: limits: cpu: "500m" requests: cpu: "500m"建立 Pod:
kubectl apply -f psi-pod.yaml
確認 PSI 指標尚未納入監控:
前往 Google Cloud 控制台的「指標探索器」頁面。
在「查詢」部分的「指標」欄位中,嘗試選取
prometheus/container_pressure_cpu_stalled_seconds_total/counter指標。如果沒有看到搜尋結果,表示 PSI 指標未收集到資料。
建立 ClusterNodeMonitoring,篩選 PSI 指標:
將下列 ClusterNodeMonitoring 資訊清單儲存為
psi-prometheus-collector.yaml:apiVersion: monitoring.googleapis.com/v1 kind: ClusterNodeMonitoring metadata: name: psi-collector spec: selector: matchLabels: {} endpoints: - path: /metrics/cadvisor scheme: https interval: 30s tls: insecureSkipVerify: true metricRelabeling: - action: keep sourceLabels: [__name__] regex: container_pressure_(cpu|memory|io)_(waiting|stalled)_seconds_total建立 ClusterNodeMonitoring:
kubectl apply -f psi-prometheus-collector.yaml
指標最多可能需要 10 分鐘,才會顯示在監控服務中。
在 Google Cloud 控制台中,確認 PSI 指標顯示在 Monitoring 中:
前往「指標探索工具」頁面。
在「Queries」部分,選取「Metric」欄位中的
prometheus/container_pressure_cpu_stalled_seconds_total/counter指標。選用:在「篩選器」下拉式選單中,選取叢集。
「結果」部分會顯示圖表,內含收集到的 PSI 指標。