Cloud Monitoring 的 PromQL

本文說明如何設定 Grafana,從 Cloud Monitoring 讀取指標資料。接著,您可以使用 PromQL 呈現資料的視覺化效果並繪製圖表。Grafana 和 Cloud Monitoring 會透過稱為「資料來源同步器」的程序連結在一起,以便 Grafana 資料來源與 Cloud Monitoring 進行通訊。資料來源同步器會執行下列操作:

  • 將設定值傳送至 Grafana 資料來源。
  • 維護 Trusted Cloud by S3NS 服務帳戶 的驗證憑證,該帳戶可從 Cloud Monitoring 讀取指標資料。

本文說明如何設定資料來源同步器,並提供在 Cloud Monitoring 中使用 PromQL 的相關資訊。本文假設您已熟悉 Grafana。

授權 Grafana 讀取指標資料

本節說明如何使用資料來源同步器產生及同步處理憑證,在 Cloud Monitoring 和 Grafana 之間設定授權。

使用資料來源同步器進行授權

Trusted Cloud by S3NS 所有 API 都必須使用 OAuth2 進行驗證,但 Grafana 不支援對 Prometheus 資料來源使用的服務帳戶進行 OAuth2 驗證。如要搭配使用 Grafana 和 Cloud Monitoring,請使用資料來源同步器為服務帳戶產生 OAuth2 憑證,並透過 Grafana 資料來源 API 將憑證同步到 Grafana。

您必須使用資料來源同步器設定並授權 Grafana,才能在全球查詢資料。如未按照這些步驟操作,Grafana 只會針對本機 Prometheus 伺服器中的資料執行查詢。

資料來源同步器是一種指令列介面工具,可將設定值遠端傳送至指定的 Grafana Prometheus 資料來源。這可確保 Grafana 資料來源已正確設定下列項目:

  • 驗證,方法是定期更新 OAuth2 存取權杖
  • 設為 Prometheus 伺服器 URL 的 Cloud Monitoring API
  • HTTP 方法設為 GET
  • Prometheus 類型和版本設為最低 2.40.x
  • HTTP 和查詢逾時值設為 2 分鐘

資料來源同步器必須重複執行。由於 Trusted Cloud by S3NS API 存取權權杖的有效時間為一小時,每 10 分鐘執行一次資料來源同步器,可確保 Grafana 與 Cloud Monitoring API 之間維持不間斷的已驗證連線。

設定及驗證 Grafana 資料來源

您可以使用 Grafana 查詢 Google Kubernetes Engine 服務或其他環境的 Cloud Monitoring 指標資料。這些指示會使用可編輯的變數來建立可執行的指令。我們強烈建議使用程式碼範例中內嵌的可編輯變數和可點選的複製貼上圖示。

GKE

如要在 Kubernetes 叢集中部署及執行資料來源同步器,請完成下列步驟:

  1. 選擇要部署資料來源同步器的專案、叢集和命名空間。

    接著,請確認您已正確設定並授權資料來源同步器:

  2. 判斷 Grafana 執行個體的網址,例如 Grafana Cloud 部署作業的 https://yourcompanyname.grafana.net,或是使用測試部署 YAML 設定的本機執行個體的 http://grafana.NAMESPACE_NAME.svc:3000

    如果您在本機部署 Grafana,且叢集已設定為使用 TLS 保護所有叢集內流量,則必須在網址中使用 https://,並使用支援的 TLS 驗證選項進行驗證。

  3. 選擇要用於 Cloud Monitoring 的 Grafana Prometheus 資料來源 (可以是新的或現有的資料來源),然後找出並記下資料來源 UID。探索或設定資料來源時,您可以在網址的最後一部分找到資料來源 UID,例如:https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID. 請勿複製整個資料來源網址。僅複製網址中的專屬 ID。

  4. 設定 Grafana 服務帳戶:建立服務帳戶,並為該帳戶產生權杖:

    1. 在 Grafana 導覽側欄中,依序點選「Administration」「Users and Access」「Service Accounts」
    2. 按一下「Add service account」(新增服務帳戶) 建立服務帳戶,為服務帳戶命名,並在 Grafana 中授予「管理員」角色。如果您的 Grafana 版本允許更精細的權限,則可以使用「資料來源」>「寫入者」角色。

    3. 按一下「新增服務帳戶權杖」

    4. 將權杖到期日設為「永不到期」,然後按一下「產生權杖」,接著將產生的權杖複製到剪貼簿,以便在下一步中做為 GRAFANA_SERVICE_ACCOUNT_TOKEN 使用。

  5. 使用上一個步驟的結果,設定下列環境變數:

    # These values are required.
    PROJECT_ID=SCOPING_PROJECT_ID # The value from Step 1.
    GRAFANA_API_ENDPOINT=GRAFANA_INSTANCE_URL # The value from step 2. This is a URL.
    DATASOURCE_UIDS=GRAFANA_DATASOURCE_UID # The value from step 3. This is not a URL.
    GRAFANA_API_TOKEN=GRAFANA_SERVICE_ACCOUNT_TOKEN # The value from step 4.
    GCM_ENDPOINT_OVERRIDE=--gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    
  6. 執行下列指令,建立 CronJob,在初始化時重新整理資料來源,然後每 10 分鐘重新整理一次。如果您使用 GKE 的 Workload Identity Federation,則 NAMESPACE_NAME 的值應與先前繫結至服務帳戶的命名空間相同。

    curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.15.3/cmd/datasource-syncer/datasource-syncer.yaml \
    | sed 's|$DATASOURCE_UIDS|'"$DATASOURCE_UIDS"'|; s|$GRAFANA_API_ENDPOINT|'"$GRAFANA_API_ENDPOINT"'|; s|$GRAFANA_API_TOKEN|'"$GRAFANA_API_TOKEN"'|; s|$PROJECT_ID|'"$PROJECT_ID"'|;' s|$GCM_ENDPOINT_OVERRIDE|'"$GCM_ENDPOINT_OVERRIDE"'|; \
    | kubectl -n NAMESPACE_NAME apply -f -
    
  7. 前往新設定的 Grafana 資料來源,確認 Prometheus 伺服器網址值開頭為 https://monitoring.s3nsapis.fr。你可能需要重新整理頁面。驗證完成後,請前往頁面底部,然後選取「儲存並測試」。您至少需要選取這個按鈕一次,才能確保 Grafana 中的標籤自動完成功能正常運作。

驗證服務帳戶憑證

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

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

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

如果 Kubernetes 叢集未啟用 GKE 適用的工作負載身分聯盟,則可跳過本節。

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

建立及繫結服務帳戶

Cloud Monitoring 文件中的多個位置都會顯示這個步驟。如果您已在先前的作業中執行這個步驟,則不必重複執行。直接跳到「授權服務帳戶」一節。

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

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

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

授權給服務帳戶

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

下列指令會授予 Trusted Cloud 服務帳戶 (SERVICE_ACCT_NAME) 讀取指標資料所需的 Monitoring API 角色。

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

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
  --role=roles/monitoring.viewer \
&& \
gcloud projects add-iam-policy-binding PROJECT_ID \
  --member=serviceAccount:SERVICE_ACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
  --role=roles/iam.serviceAccountTokenCreator

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

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

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

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

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

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

其他地方

如要在 Google Kubernetes Engine 以外的環境中部署及執行資料來源同步器,請按照下列步驟操作:

  1. 設定資料來源同步器使用的服務帳戶:

    1. 設定 gcloud 指令的預設專案:

      gcloud config set project PROJECT_ID
      
    2. 建立資料來源同步器要使用的服務帳戶:

      gcloud iam service-accounts create DS_SYNCER_SVCACCT_NAME
      
    3. 授予服務帳戶讀取指標資料的權限:

       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
       --role=roles/monitoring.viewer \
       && \
       gcloud projects add-iam-policy-binding PROJECT_ID \
       --member=serviceAccount:DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com \
       --role=roles/iam.serviceAccountTokenCreator
      
    4. 為服務帳戶建立金鑰:

      gcloud iam service-accounts keys create DS_SYNCER_SVCACCT_KEYFILE_NAME.json \
      --iam-account DS_SYNCER_SVCACCT_NAME@PROJECT_ID.s3ns-system.iam.gserviceaccount.com
      

      這個目錄的路徑會用於後續步驟中設定環境變數。如要取得路徑,請執行 pwd 指令並記錄值:

      pwd
      DS_SYNCER_SVCACCT_KEYFILE_DIR
      
  2. 找出 Grafana 執行個體的網址,例如 Grafana Cloud 部署作業的 https://yourcompanyname.grafana.net,或是本機測試執行個體的 https://localhost:3000。這個值會用於執行資料來源同步器的指令。

    如果您在本機部署 Grafana,以用於設定為使用 TLS 保護所有叢集內流量的 Kubernetes 叢集,則需要在網址中使用 https://,並在下一個步驟中,使用支援的 TLS 驗證選項進行驗證。

  3. 在 Grafana 中新增 Prometheus 資料來源,以用於 Cloud Monitoring,並記錄資料來源的 UID:

    1. 依序點選「連結」>「資料來源」>「新增資料來源」。從時間序列資料庫清單中選取「Prometheus」

    2. 在「Prometheus server URL」(Prometheus 伺服器網址) 欄位中,輸入下列值:

      https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/
      
    3. 按一下「儲存並測試」

      瀏覽器中資料來源頁面的網址包含資料來源使用者介面,例如 https://yourcompanyname.grafana.net/connections/datasources/edit/GRAFANA_DATASOURCE_UID.

    4. 記錄資料來源 UID。這個值會用於執行資料來源同步器的指令。請勿複製整個資料來源網址。 只複製網址中的專屬 ID,例如: ee0z3woqjah34e

      GRAFANA_DATASOURCE_UID
      
  4. 設定 Grafana 服務帳戶:建立服務帳戶,並為服務帳戶產生權杖,以供使用:

    1. 在 Grafana 導覽側欄中,依序點選「Administration」「Users and Access」「Service Accounts」
    2. 按一下「新增服務帳戶」建立服務帳戶,為帳戶命名,並在 Grafana 中授予「管理員」角色。

    3. 按一下「新增服務帳戶權杖」

    4. 將權杖到期日設為「永不過期」,然後按一下「產生權杖」,接著將產生的權杖複製到下列可編輯的變數。這個值會用於執行資料來源同步器的指令。

      GRAFANA_SERVICE_ACCOUNT_TOKEN
      
  5. 執行資料來源同步器。您可以使用 Docker 從預先建構的容器映像檔執行同步器,也可以從來源建構程式碼並手動執行。資料來源同步器是 Go 應用程式,因此您必須安裝 Go,才能從來源建構同步器。

    Docker

    使用容器映像檔 gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0,從 Docker 執行資料來源同步器。如要進行測試,可以手動執行同步器。 確認連線正常運作後,由於存取權杖的效期為一小時,您必須使用自動化機制 (例如 cron 工作),每 10 分鐘執行一次資料來源同步器,確保連線不會中斷。

    使用下列 Docker 指令執行資料來源同步器:

    docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/DS_SYNCER_SVCACCT_KEYFILE_NAME.json" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0
    -datasource-uids=UID_OF_GRAFANA_DATASOURCE
    -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
    -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
    -project-id=PROJECT_ID
    -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
    -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
    

    如要建立 cron 工作來執行資料來源同步器,請按照下列步驟操作:

    1. 編輯 Cron 資料表:

      cron -e
      
    2. 新增每 10 分鐘執行上述指令的項目:

      */10 * * * * * docker run --network container:grafana -v "DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json:/app/<KEY_ID>" gke.gcr.io/prometheus-engine/datasource-syncer:v0.15.3-gke.0 -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

    如要進一步瞭解執行資料來源同步器時可用的指令列選項,請參閱 README 文件。

    原始碼

    1. 如要自行建構資料來源同步器,請按照下列步驟操作:

      1. 建立目錄來存放程式碼,然後切換至該目錄:

        mkdir data-source-syncer-code
        
        cd data-source-syncer-code
        

        這個目錄的路徑會用於後續步驟中設定環境變數。如要取得路徑,請執行 pwd 指令,並將路徑記錄在可編輯的變數中:

        pwd
        PATH_TO_LOCAL_REPO_COPY
        
      2. 從目前版本的存放區複製程式碼:

        git clone -b 'v0.15.3' --single-branch https://github.com/GoogleCloudPlatform/prometheus-engine
        
      3. 前往 datasource-syncer 目錄並建構程式碼:

        cd prometheus-engine/cmd/datasource-syncer
        
        go build main.go
        
    2. 執行資料來源同步器。如要進行測試,可以手動執行同步器。確認連線正常運作後,由於存取權杖的有效時間為一小時,您必須使用自動化機制 (例如 cron 工作),每 10 分鐘執行一次資料來源同步器,確保連線不會中斷。

      如要手動執行資料來源同步器,請使用下列指令:

      main -datasource-uids=UID_OF_GRAFANA_DATASOURCE
      -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN
      -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE
      -project-id=PROJECT_ID
      -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json
      -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
      

      如要建立 cron 工作來執行資料來源同步器,請按照下列步驟操作:

      1. 編輯 Cron 資料表:

         cron -e
        
      2. 新增每 10 分鐘執行上述指令的項目:

         */10 * * * * * main -datasource-uids=UID_OF_GRAFANA_DATASOURCE -grafana-api-token=GRAFANA_SERVICE_ACCOUNT_TOKEN -grafana-api-endpoint=URL_OF_GRAFANA_INSTANCE -project-id=PROJECT_ID -query.credentials-file=DS_SYNCER_SVCACCT_KEYFILE_DIR/DS_SYNCER_SVCACCT_KEYFILE_NAME.json -gcm-endpoint-override="https://monitoring.s3nsapis.fr/v1/projects/PROJECT_ID/location/global/prometheus/"
        

      如要進一步瞭解執行資料來源同步器時可用的指令列選項,請參閱 README 文件。

  6. 前往新設定的 Grafana 資料來源,確認 Prometheus 伺服器網址值開頭為 https://monitoring.s3nsapis.fr。你可能需要重新整理頁面。驗證完成後,請前往頁面底部,然後按一下「儲存並測試」。您必須至少點選一次這個按鈕,才能確保 Grafana 中的標籤自動完成功能正常運作。

在 Grafana 中查看指標

如要在 Grafana 中查看 Trusted Cloud 專案的指標,請按照下列步驟操作:

  1. 按一下導覽面板或「資料來源」頁面中的「探索」

  2. 在「指標」欄位中,使用下拉式選單選取指標。您也可以選取「指標探索器」,搜尋特定指標。如果指標與多個受監控資源相關聯,則必須在查詢中新增 monitored_resource 標籤篩選器,並選取資源類型。

  3. 新增其他標籤篩選器和作業,建構查詢。

如要瞭解如何在 Grafana 中建構視覺化效果和資訊主頁,請參閱「面板和視覺化效果」。

使用 PromQL 查詢 Cloud Monitoring 指標

您可以使用 PromQL 的 UTF-8 規格查詢 Cloud Monitoring 指標。UTF-8 指標名稱必須加上引號,並移至大括號內。如果標籤名稱包含不相容於舊版的字元,也必須加上引號。如果是 Cloud Monitoring 指標 kubernetes.io/container/cpu/limit_utilization,下列查詢是等效的:

  • {"kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}
  • {__name__="kubernetes.io/container/cpu/limit_utilization", pod_name="foo"}
  • {"__name__"="kubernetes.io/container/cpu/limit_utilization", "pod_name"="foo"}

您可以查詢 Cloud Monitoring 分配值指標,就像查詢 Prometheus 直方圖一樣,只要在指標名稱後方加上 _count_sum_bucket 後置字元即可。

如果圖表和資訊主頁是在 UTF-8 相容性查詢之前建立,系統會將這些圖表和資訊主頁的名稱轉換為舊版 PromQL 相容的對應名稱,然後查詢 Cloud Monitoring 指標。如要進一步瞭解舊版 PromQL 轉換規則,請參閱「將 Cloud Monitoring 指標對應至舊版 PromQL」。

學習 PromQL

如要瞭解 PromQL 的基本用法,建議參閱開放原始碼文件。如要開始使用,請參閱下列資源:

指定受監控的資源類型

如果 Cloud Monitoring 指標只與單一Cloud Monitoring 受監控資源類型相關聯,PromQL 查詢就會正常運作,無需手動指定資源類型。不過,Cloud Monitoring 中的部分指標 (包括某些系統指標) 會對應至多個資源類型。

如要查看哪些受監控的資源類型對應至指標,請參閱Trusted Cloud by S3NS 指標清單。說明文件中的每個項目都會在類型下方的第一欄列出相關聯的受監控資源類型。如果沒有列出受監控的資源類型,指標可以與任何類型建立關聯。

如果指標與多個資源類型相關聯,您必須在 PromQL 查詢中指定資源類型。您可以使用特殊標籤 monitored_resource 選取資源類型。

受控資源類型通常是短字串,例如 gce_instance,但有時會顯示為完整 URI,例如 monitoring.googleapis.com/MetricIngestionAttribution。格式正確的 PromQL 查詢可能如下所示:

  • logging_googleapis_com:byte_count{monitored_resource="k8s_container"}
  • loadbalancing_googleapis_com:l3_external_egress_bytes_count{monitored_resource="loadbalancing.googleapis.com/ExternalNetworkLoadBalancerRule"}

如果未在必要時使用 monitored_resource 標籤,系統會顯示下列錯誤訊息:

metric is configured to be used with more than one monitored resource type; series selector must specify a label matcher on monitored resource name

解決標籤衝突

在 Cloud Monitoring 中,標籤可以屬於指標或資源。如果指標標籤與資源標籤的鍵名相同,您可以在查詢中將前置字元 metric_ 加入標籤鍵名,即可專指指標標籤。

舉例來說,假設您在指標 example.googleapis.com/user/widget_count 中,同時有資源標籤和指標標籤都命名為 pod_name

  • 如要依資源標籤的值篩選,請使用
    example_googleapis_com:user_widget_count{pod_name="RESOURCE_LABEL_VALUE"}

  • 如要依指標標籤的值篩選,請使用
    example_googleapis_com:user_widget_count{metric_pod_name="METRIC_LABEL_VALUE"}

將 Cloud Monitoring 指標名稱對應至舊版 PromQL

Cloud Monitoring 指標名稱包含兩個元件:網域 (例如 compute.googleapis.com/) 和路徑 (例如 instance/disk/max_read_ops_count)。由於舊版 PromQL 只支援特殊字元 :_,因此您必須套用下列規則,才能讓 Monitoring 指標名稱與舊版 PromQL 相容:

  • 將第一個 / 替換為 :
  • 將所有其他特殊字元 (包括 . 和其他 / 字元) 替換為 _

下表列出部分指標名稱和對應的舊版 PromQL:

Cloud Monitoring 指標名稱 舊版 PromQL 指標名稱
compute.googleapis.com/instance/cpu/utilization compute_googleapis_com:instance_cpu_utilization
logging.googleapis.com/log_entry_count logging_googleapis_com:log_entry_count

您可以查詢 Cloud Monitoring 分配值指標,就像查詢 Prometheus 直方圖一樣,只要在指標名稱後方加上 _count_sum_bucket 後置字元即可:

Cloud Monitoring 指標名稱 舊版 PromQL 指標名稱
networking.googleapis.com/vm_flow/rtt networking_googleapis_com:vm_flow_rtt_sum
networking_googleapis_com:vm_flow_rtt_count
networking_googleapis_com:vm_flow_rtt_bucket

PromQL 相容性

Cloud Monitoring 的 PromQL 可能與上游 PromQL 的運作方式略有不同。

Cloud Monitoring 中的 PromQL 查詢會在 Monarch 後端使用內部查詢語言進行部分評估,因此查詢結果會出現一些已知差異。除了本節列出的差異之外,Cloud Monitoring 中的 PromQL 與 Prometheus 2.44 版的 PromQL 相同。

系統可能不支援 Prometheus 2.44 版之後新增的 PromQL 函式。

支援 UTF-8

Cloud Monitoring 的 PromQL 支援 UTF-8 查詢

如果 Prometheus 指標名稱只包含英數字元和 _: 字元,且標籤鍵只包含英數字元和 _ 字元,您就可以使用傳統的 PromQL 語法查詢。舉例來說,有效的查詢可能如下所示: job:my_metric:sum{label_key="label_value"}

不過,如果 Prometheus 指標名稱使用 _: 以外的任何特殊字元,或是標籤鍵使用 _ 以外的任何特殊字元,則必須根據 PromQL 的 UTF-8 規格建構查詢。

UTF-8 指標名稱必須加上引號,並移至大括號內。如果標籤名稱含有不相容的舊版字元,也必須加上引號。以下有效查詢範例皆相等:

  • {"my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {__name__="my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {"__name__"="my.domain.com/metric/name_bucket", "label.key"="label.value"}

依指標名稱比對

系統只支援完全比對指標名稱。查詢中必須包含完全相符的指標名稱。

如果常見情境在 __name__ 標籤上使用規則運算式比對器,建議您採取下列因應措施:

  • Prometheus 介面卡設定通常會使用 =~ 運算子,比對多個指標名稱。如要修正這項用法,請展開設定,為每項指標使用個別政策,並明確命名每項指標。這也能避免您根據非預期的指標,意外自動調度資源。
  • 您通常會使用規則運算式,在同一張圖表上繪製多個非維度指標的圖表。舉例來說,如果您有 cpu_servicename_usage 這類指標,可以使用萬用字元將所有服務繪製在同一張圖表上。在 Cloud Monitoring 中,使用這類非維度指標是明顯的錯誤做法,而且會導致查詢效能極差。如要修正這項用量,請將所有維度移至指標標籤,而非將維度嵌入指標名稱。
  • 查詢多個指標通常是用來查看可查詢的指標。建議您改用 /labels/__name__/values 呼叫來探索指標。

過時程度

Monarch 後端不支援過時

計算 irate

如果 irate 函式的回溯期小於步長,我們會將回溯期增加至步長。Monarch 需要這項變更,確保輸出內容不會完全忽略任何輸入資料。這項差異也適用於 rate 計算。

rateincrease 的計算方式

如果 rate 函式的回溯期小於步長,我們會將回溯期增加至步長。Monarch 需要這項變更,確保輸出內容不會完全忽略任何輸入資料。這項差異也適用於 irate 計算。

內插法和外插法的計算方式不同。 Monarch 使用的插補演算法與 Prometheus 不同,因此結果可能略有差異。舉例來說,Monarch 計數器樣本會連同時間範圍一併儲存,而非 Prometheus 使用的單一時間戳記。因此,即使 Prometheus 時間戳記會排除這些樣本,Monarch 仍可將計數器樣本納入速率計算。這通常會產生更準確的費率結果,尤其是在查詢基礎時間序列的開頭或結尾時。

計算 histogram_quantile

如果直方圖沒有樣本,PromQL histogram_quantile 計算會產生 NaN 值。內部查詢語言的計算不會產生任何值,而是會捨棄時間戳記的點。

費率計算差異也可能影響 histogram_quantile 查詢的輸入內容。

不同類型指標的類型專屬函式

雖然上游 Prometheus 是弱型別,但 Monarch 是強型別。也就是說,在 Cloud Monitoring 中,針對不同類型的指標執行特定類型的函式 (例如對 GAUGE 指標執行 rate(),或對 COUNTER 或未輸入類型的指標執行 histogram_quantile()) 無效,即使這些函式在上游 Prometheus 中有效也一樣。