使用 PromQL 查詢 Cloud Monitoring 指標

您可以使用 Prometheus 查詢語言 (PromQL) 查詢 Cloud Monitoring 中的所有指標,包括Google Cloud 系統指標Kubernetes 指標自訂指標記錄指標

將 Cloud Monitoring 指標名稱對應至 PromQL

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

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

下表列出部分指標名稱及其 PromQL 等價:

Cloud Monitoring 指標名稱 PromQL 指標名稱
kubernetes.io/container/cpu/limit_cores kubernetes_io:container_cpu_limit_cores
compute.googleapis.com/instance/cpu/utilization compute_googleapis_com:instance_cpu_utilization
logging.googleapis.com/log_entry_count logging_googleapis_com:log_entry_count
custom.googleapis.com/opencensus/opencensus.io/
http/server/request_count_by_method
custom_googleapis_com:opencensus_opencensus_io_
http_server_request_count_by_method
agent.googleapis.com/disk/io_time agent_googleapis_com:disk_io_time

您可以像查詢 Prometheus 直方圖一樣查詢 Cloud Monitoring 分布值指標,只要在指標名稱後面加上 _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

指定受控資源類型

如果指標只與單一 Cloud Monitoring 監控的資源類型相關聯,PromQL 查詢就能運作,而不需要手動指定資源類型。不過,Cloud Monitoring 中的部分指標 (包括部分系統指標和許多由以記錄為準的指標產生的指標) 會對應至多個資源類型。如果您使用其中一種指標 (尤其是記錄指標),則必須明確指定資源類型。

您可以透過下列任一做法,查看哪些受控資源類型會對應至指標:

  • 如需 Google 精選指標,請參閱可用的指標清單,包括 Google Cloud指標Kubernetes 指標。說明文件中的每個項目都會在類型下方的第一欄列出相關的受控資源類型。如果沒有列出任何受控資源類型,則指標可以與任何類型相關聯。
  • Metrics Explorer 中,您可以執行下列操作:

    1. 在「選取指標」欄位中輸入指標名稱,然後瀏覽選單選取指標。資源選單會列出該指標的有效資源類型,例如「VM 執行個體」。
    2. 在查詢建構工具窗格的工具列中,選取名稱為 < > PromQL 的按鈕。

      顯示的 PromQL 查詢會將資源類型顯示為 monitored_resource 欄位的值。特別是,如果指標可與多種監控資源類型建立關聯,例如以記錄為基礎的指標、自訂指標或任何使用者定義的指標,這項方法就非常實用。

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

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

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

monitored_resource 標籤的 "" 值是特殊值,指的是 Managed Service for Prometheus 指標使用的預設 prometheus_target 資源類型。

如果您在需要時未使用 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

使用中繼資料標籤

您可以在 PromQL 中使用中繼資料標籤,就像使用其他標籤一樣,但與指標名稱一樣,中繼資料標籤也必須與 PromQL 相容。參照中繼資料系統標籤 version 的語法為 metadata_system_version,而中繼資料使用者標籤 version 的語法為 metadata_user_version。使用中繼資料標籤的正確格式 PromQL 查詢可能會如下所示:

  • compute_googleapis_com:instance_cpu_utilization{monitored_resource="gce_instance",metadata_user_env="prod"}
  • sum(compute_googleapis_com:instance_cpu_utilization) by (metadata_system_region)
  • sum(compute_googleapis_com:instance_cpu_utilization) by (metadata_user_env)
  • compute_googleapis_com:instance_uptime_total{"metadata_user_i-love.special/chars"="yes"}
  • sum(compute_googleapis_com:instance_uptime_total) by ("metadata_user_i-love.special/chars")

如果中繼資料標籤鍵包含 _ 字元以外的特殊字元,則您必須根據 PromQL 的 UTF-8 規格,將標籤鍵括在雙引號 (") 中。您仍需在中繼資料標籤前方加上字串 metadata_user_

解決標籤衝突

在 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"}

其他主題

規則和快訊

您可以在 Managed Service for Prometheus 的記錄和快訊規則中使用 Cloud Monitoring 指標。如需操作說明,請參閱「受管理的規則評估和快訊」或「自行部署的規則評估和快訊」。

學習 PromQL

如要瞭解使用 PromQL 的基本概念,建議您參閱開放原始碼說明文件。以下提供一些實用的連結:

PromQL 差異

Managed Service for Prometheus 的 PromQL 可能與上游 PromQL 的運作方式略有不同。如需這些差異的清單,請參閱PromQL 差異