自行部署規則評估和快訊

Google Cloud Managed Service for Prometheus 支援與 Prometheus 相容的規則評估和快訊。這份文件說明如何設定自行部署的規則評估功能,包括獨立的規則評估器元件。

只有在您想針對全域資料存放區執行規則和快訊時,才需要按照這些指示操作。

自行部署的收集作業規則評估

部署 Managed Service for Prometheus 後,您可以使用 Prometheus 設定檔的 rule_files 欄位,在每個已部署的執行個體中繼續評估規則。不過,規則的最大查詢時間範圍會受到伺服器保留本機資料時間長度的限制。

大多數規則只會對最近幾分鐘的資料執行,因此在每個本機伺服器上執行規則通常是有效策略。在這種情況下,您不需要採取進一步設定。

不過,有時根據全域指標後端評估規則會很有用,例如當規則的所有資料並非位於特定 Prometheus 執行個體時。在這些情況下,Managed Service for Prometheus 也會提供規則評估器元件。

事前準備

本節說明執行本文所述工作所需的設定。

設定環境

為避免重複輸入專案 ID 或叢集名稱,請執行下列設定:

  • 請依下列方式設定指令列工具:

    • 設定 gcloud CLI,參照Google Cloud 專案的 ID:

      gcloud config set project PROJECT_ID
      
    • 如要在 GKE 上執行,請使用 gcloud CLI 設定叢集:

      gcloud container clusters get-credentials CLUSTER_NAME --location LOCATION --project PROJECT_ID
      
    • 否則,請使用 kubectl CLI 設定叢集:

      kubectl config set-cluster CLUSTER_NAME
      

    如要進一步瞭解這些工具,請參閱下列文章:

設定命名空間

建立 NAMESPACE_NAME Kubernetes 命名空間,用於存放您在範例應用程式中建立的資源:

kubectl create ns NAMESPACE_NAME

驗證服務帳戶憑證

如果 Kubernetes 叢集已啟用 Workload Identity Federation for GKE,則可以略過本節。

在 GKE 上執行時,Managed Service for Prometheus 會根據 Compute Engine 預設服務帳戶,自動從環境中擷取憑證。根據預設,預設服務帳戶具備必要權限 monitoring.metricWritermonitoring.viewer。如果您未使用 GKE 的 Workload Identity Federation,且先前已從預設節點服務帳戶移除任一角色,請先重新新增缺少的權限,再繼續操作。

設定 Workload Identity Federation for GKE 的服務帳戶

如果 Kubernetes 叢集未啟用 Workload Identity Federation for GKE,則可跳過本節。

Managed Service for Prometheus 會使用 Cloud Monitoring API 擷取指標資料。如果叢集使用 GKE 適用的工作負載身分聯盟,您必須將 Kubernetes 服務帳戶的權限授予 Monitoring API。本節說明下列事項:

建立及繫結服務帳戶

這個步驟會出現在 Managed Service for Prometheus 說明文件的多個位置。如果您已在先前的作業中執行這個步驟,則不必重複執行。直接跳到「授權服務帳戶」一節。

首先,請建立服務帳戶 (如果尚未建立):

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa

然後使用下列指令序列,將 gmp-test-sa 服務帳戶繫結至 NAMESPACE_NAME 命名空間中的預設 Kubernetes 服務帳戶:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --condition=None \
  --member "serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE_NAME/default]" \
  gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
&&
kubectl annotate serviceaccount \
  --namespace NAMESPACE_NAME \
  default \
  iam.gke.io/gcp-service-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com

如果您使用其他 GKE 命名空間或服務帳戶,請適當調整指令。

授權給服務帳戶

相關權限會歸類為角色,您可將角色授予主體,在本例中即為 Google Cloud服務帳戶。如要進一步瞭解 Monitoring 角色,請參閱存取權控管

下列指令會將 Monitoring API 角色授予 Google Cloud 服務帳戶gmp-test-sa,讓該帳戶能夠讀取及寫入指標資料。

如果您已在先前的作業中授予 Google Cloud 服務帳戶特定角色,則不必再次執行這項操作。

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
  --condition=None \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID\
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter \
  --condition=None \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator \
  --condition=None

對 GKE 適用的 Workload Identity 聯盟設定進行偵錯

如果無法順利使用 Workload Identity Federation for GKE,請參閱驗證 Workload Identity Federation for GKE 設定的說明文件,以及 Workload Identity Federation for GKE 疑難排解指南

設定 Workload Identity Federation for GKE 時,最常見的錯誤來源是錯別字和部分複製貼上,因此我們強烈建議使用這些操作說明中程式碼範例內建的可編輯變數和可點選的複製貼上圖示。

實際工作環境中的 GKE 工作負載身分聯盟

本文所述範例會將 Google Cloud 服務帳戶繫結至預設 Kubernetes 服務帳戶,並授予 Google Cloud服務帳戶使用 Monitoring API 的所有必要權限。

在正式環境中,您可能需要採用更精細的方法,為每個元件建立服務帳戶,並授予最少的權限。如要進一步瞭解如何設定服務帳戶來管理工作負載身分,請參閱「使用 Workload Identity Federation for GKE」。

部署獨立規則評估工具

Managed Service for Prometheus 規則評估工具會根據 Managed Service for Prometheus HTTP API 評估 Prometheus 快訊和記錄規則,並將結果寫回 Monarch。它接受與 Prometheus 相同的設定檔格式和規則檔格式。旗標也幾乎相同。

  1. 建立規則評估工具的部署範例,並預先設定為評估快訊和記錄規則:

    kubectl apply -n NAMESPACE_NAME -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.15.3/manifests/rule-evaluator.yaml
    
  2. 確認規則評估工具的 Pod 已成功部署:

    kubectl -n NAMESPACE_NAME get pod
    

    如果部署成功,您會看到類似以下的輸出內容:

    NAME                              READY   STATUS    RESTARTS   AGE
    ...
    rule-evaluator-64475b696c-95z29   2/2     Running   0          1m
    

確認規則評估工具已順利部署後,您可以調整已安裝的資訊清單,執行下列操作:

  • 新增自訂規則檔案。
  • 使用設定檔的 alertmanager_config 欄位,設定規則評估工具,將快訊傳送至自行部署的 Prometheus Alertmanager

如果 Alertmanager 位於與規則評估工具不同的叢集中,您可能需要設定 Endpoints 資源。舉例來說,如果 OperatorConfig 指定 Alertmanager 端點可位於 Endpoints 物件 ns=alertmanager/name=alertmanager 中,您就可以手動或以程式輔助方式建立這個物件,並從其他叢集填入可連線的 IP。

明確提供憑證

在 GKE 上執行時,規則評估工具會根據節點的服務帳戶或 Workload Identity Federation for GKE 設定,自動從環境中擷取憑證。在非 GKE 的 Kubernetes 叢集中,必須使用旗標或 GOOGLE_APPLICATION_CREDENTIALS 環境變數,明確向規則評估工具提供憑證。

  1. 將環境設為目標專案:

    gcloud config set project PROJECT_ID
    
  2. 建立服務帳戶:

    gcloud iam service-accounts create gmp-test-sa
    

    這個步驟會建立服務帳戶,您可能已在 Workload Identity Federation for GKE 指示中建立該帳戶。

  3. 將必要權限授予服務帳戶:

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.viewer \
    && \
    gcloud projects add-iam-policy-binding PROJECT_ID\
      --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter
    

  4. 建立並下載服務帳戶的金鑰:

    gcloud iam service-accounts keys create gmp-test-sa-key.json \
      --iam-account=gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com
    
  5. 將金鑰檔案新增為非 GKE 叢集的密鑰:

    kubectl -n NAMESPACE_NAME create secret generic gmp-test-sa \
      --from-file=key.json=gmp-test-sa-key.json
    

  6. 開啟 rule-evaluator Deployment 資源進行編輯:

    kubectl -n NAMESPACE_NAME edit deploy rule-evaluator
    
    1. 將以粗體顯示的文字新增至資源:

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        namespace: NAMESPACE_NAME
        name: rule-evaluator
      spec:
        template
          containers:
          - name: evaluator
            args:
            - --query.credentials-file=/gmp/key.json
            - --export.credentials-file=/gmp/key.json
      ...
            volumeMounts:
            - name: gmp-sa
              mountPath: /gmp
              readOnly: true
      ...
          volumes:
          - name: gmp-sa
            secret:
              secretName: gmp-test-sa
      ...
      

    2. 儲存檔案並關閉編輯器。套用變更後,系統會重新建立 Pod,並開始使用指定的服務帳戶向指標後端進行驗證。

    或者,您也可以使用 GOOGLE_APPLICATION_CREDENTIALS 環境變數設定金鑰檔案路徑,而不必使用本範例中設定的旗標。

    多專案和全域規則評估

    建議您在每個專案和區域中執行一個規則評估工具執行個體,而不是執行一個執行個體來評估多個專案和區域。 Google Cloud 不過,我們支援多專案規則評估,適用於需要這項功能的案例。

    在 Google Kubernetes Engine 上部署時,規則評估工具會使用與叢集相關聯的Google Cloud 專案,並自動偵測該專案。如要評估跨專案的規則,可以使用 --query.project-id 標記覆寫查詢的專案,並指定具有多專案指標範圍的專案。如果指標範圍包含所有專案,規則就會進行全域評估。詳情請參閱「指標範圍」。

    您也必須更新規則評估工具所用服務帳戶的權限,讓服務帳戶可以從範圍界定專案讀取資料,並寫入指標範圍內的所有受監控專案。

    撰寫規則時保留標籤

    對於評估工具寫回 Managed Service for Prometheus 的資料,評估工具支援與 Managed Service for Prometheus 伺服器二進位檔相同的 --export.* 旗標和 external_labels 型設定。強烈建議您編寫規則,確保 project_idlocationclusternamespace 標籤能適當保留在各自的匯總層級,否則查詢效能可能會下降,且您可能會遇到基數限制。

    project_idlocation 標籤為必填欄位。如果缺少這些標籤,系統會根據規則評估工具的設定,在規則評估結果中設定值。缺少 clusternamespace 標籤,且未提供值。

    自我觀察

    規則評估工具會使用 --web.listen-address 旗標,在可設定的通訊埠發布 Prometheus 指標。

    舉例來說,如果 Pod rule-evaluator-64475b696c-95z29 在連接埠 9092 上公開這些指標,則可使用 kubectl 手動查看指標:

    # Port forward the metrics endpoint.
    kubectl port-forward rule-evaluator-64475b696c-95z29 9092
    # Then query in a separate terminal.
    curl localhost:9092/metrics
    

    您可以設定 Prometheus 堆疊來收集這些指標,以便掌握規則評估工具的效能。

    高可用性部署

    如要以高可用性設定執行規則評估工具,請按照 Prometheus 伺服器相同的方法操作。

    使用 Cloud Monitoring 指標設定快訊

    您可以設定規則評估工具,使用 PromQL 對Google Cloud 系統指標發出快訊。如需建立有效查詢的說明,請參閱「Cloud Monitoring 指標的 PromQL」。