将 Cloud Monitoring 指标映射到 PromQL

您可以使用 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. 选择指标字段中输入指标名称,然后浏览菜单以选择指标。资源菜单列出了该指标的有效资源类型,例如“虚拟机实例”。
    2. 在查询构建器窗格的工具栏中,选择名为  MQL PromQL 的按钮。
    3. 验证已在语言切换开关中选择 MQL。语言切换开关位于同一工具栏中,用于设置查询的格式。

      显示的查询展示了资源类型。具体而言,MQL 适用于与许多受监控的资源类型相关联的指标,例如基于日志的指标、自定义指标或任何用户定义的指标。

如果一个指标与多个资源类型相关联,您必须在 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)

元数据标签键中唯一可以使用的特殊字符是 _ 字符。不支持使用类型为 MULTI_STRINGKEY_VALUE 的元数据标签进行聚合。

解决标签冲突

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