将 Cloud Monitoring 指标映射到 PromQL

使用集合让一切井井有条 根据您的偏好保存内容并对其进行分类。

您可以使用 Prometheus Query Language (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 指标。文档中的每个条目都会在该类型下每个条目的第一列中列出关联的受监控资源类型。如果未列出任何受监控的资源类型,则指标可以与任何类型关联。
  • 您可以转到 Cloud Monitoring 的 Metrics Explorer配置标签页,然后输入指标名称。将显示有效资源类型的列表,例如“虚拟机实例”。如果选择指标并转到 MQL 标签页,您将在 fetch 字段中看到底层受监控的资源类型,例如 gce_instanceMQL 标签页适用于可与许多受监控的资源类型关联的指标,例如基于日志的指标、自定义指标或任何用户定义的指标。

如果一个指标与多个资源类型相关联,您必须在 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_ 添加到查询中的标签键名称来专门引用指标标签。

例如,假设您在指标 logging.googleapis.com/user/widget_count 中同时有一个资源标签和一个名为 pod_name 的指标标签。

  • 如需按资源标签的值进行过滤,
    请使用 logging_googleapis_com:user_widget_count{pod_name="RESOURCE_LABEL_VALUE"}

  • 如需按指标标签的值进行过滤,
    请使用 logging_googleapis_com:user_widget_count{metric_pod_name="METRIC_LABEL_VALUE"}