自行部署的規則評估和快訊

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
      
    • 設定 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 適用的工作負載身分聯盟,您必須將 Monitoring API 的權限授予 Kubernetes 服務帳戶。本節說明下列事項:

建立及繫結服務帳戶

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

下列指令序列會建立 gmp-test-sa 服務帳戶,並將其繫結至 NAMESPACE_NAME 命名空間中的預設 Kubernetes 服務帳戶:

gcloud config set project PROJECT_ID \
&&
gcloud iam service-accounts create gmp-test-sa \
&&
gcloud iam service-accounts add-iam-policy-binding \
  --role roles/iam.workloadIdentityUser \
  --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 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 \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID\
  --member=serviceAccount:gmp-test-sa@PROJECT_ID.iam.gserviceaccount.com \
  --role=roles/monitoring.metricWriter

對 GKE 適用的工作負載身分聯盟設定進行偵錯

如果您無法順利使用 Workload Identity Federation for GKE,請參閱相關文件,瞭解如何驗證 Workload Identity Federation for GKE 設定,以及Workload Identity Federation for GKE 疑難排解指南

由於輸入錯誤和部分複製貼上作業是設定 GKE 工作負載身分識別聯邦的常見錯誤來源,因此我們強烈建議您使用這些操作說明中程式碼範例中內嵌的可編輯變數和可點選的複製貼上圖示。

在實際工作環境中使用 Workload Identity Federation for GKE

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

在正式環境中,您可能會想採用更精細的方法,為每個元件建立服務帳戶,並為每個服務帳戶授予最基本的權限。如要進一步瞭解如何設定服務帳戶以管理工作負載身分,請參閱「使用 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. 開啟規則評估器部署資源進行編輯:

    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-95z299092 連接埠上公開這些指標,您可以使用 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」。