指标模型的组成部分

Cloud Monitoring 的监控数据模型由三个主要概念组成:

  • 受监控的资源类型
  • 指标类型
  • 时间序列

指标模型一文概要介绍了这些 Cloud Monitoring 概念。如果您对这些概念不太熟悉,请先阅读该页面。

本页面详细介绍了指标类型、受监控的资源和时间序列以及一些相关概念。这些概念是所有 Monitoring 指标的基础。

如果您想执行以下任一操作,则应了解此页面上的信息:

如需详细了解这些概念及其与 Cloud Monitoring API 之间的关系,请参阅时序的结构,特别是在您计划使用 Monitoring API 或自定义指标时。

标签简述

受监控的资源类型和指标类型都支持标签,这使得数据可以在分析期间进行分类。例如:

  • 一个虚拟机的受监控资源类型可能包括机器位置以及与机器关联的项目 ID 的标签。记录有关受监控的资源的信息时,该信息包括标签的值。除了为受监控的资源类型定义的标签之外,受监控的资源还可能具有系统或用户提供的元数据标签。
  • 对 API 请求进行计数的指标类型可能具有用于记录所调用方法的名称和请求状态的标签。

标签中详细介绍了标签的使用。

受监控的资源类型

受监控的资源是从中捕获指标数据的资源。Cloud Monitoring 支持大约 270 种类型的受监控资源。

受监控资源的类型包括通用节点和任务、Google Kubernetes Engine 中的架构组件、Bigtable 中的表、各种 AWS 资源等等。

每种类型的受监控资源都由称为受监控的资源描述符的数据结构正式描述。如需了解详情,请参阅受监控的资源描述符

每种受支持的受监控资源类型都在受监控的资源列表中有一个的条目。表中的条目是根据受监控的资源描述符创建的。本部分介绍在受监控的资源描述符中捕获的信息,以及该信息在列表中的显示方式。

受监控的资源类型示例

下图显示了 Cloud Storage 存储桶的列表条目

Cloud Storage 存储分区的列表。

列表中的所有条目都包含以下信息:

  • 类型:条目中的标头列出受监控的资源类型;在示例中为 gcs_bucket
  • 显示名:受监控的资源的简短说明。
  • 说明:受监控的资源的详细说明。
  • 标签:用于对数据进行分类的一组维度。如需了解详情,请参阅标签

指标类型

指标类型描述了可以从受监控的资源中收集的测量结果。指标类型包括对要测量的内容以及如何解释测量结果的说明。Cloud Monitoring 支持大约 6,500 种类型的指标,并且您可以定义新类型。

指标类型包括 API 调用数量、磁盘使用情况统计信息、存储空间使用情况等。

每种指标类型都由称为指标描述符的数据结构正式描述。如需了解详情,请参阅指标描述符

每种内置指标类型都在指标列表页面中有一个条目。这些表中的条目是根据指标描述符创建的。本部分介绍了指标类型中捕获的信息,以及该信息在参考资料中的显示方式。

指标类型示例

下图显示了一个 Cloud Storage 指标类型的条目:

Cloud Storage 指标列表摘录。

指标类型显示在表格中,表格标头说明了信息的布局。本部分使用一个条目作为示例,但所有表格都使用相同的格式。

示例 Cloud Storage 表条目提供有关指标类型的以下信息:

  • 指标类型:指标类型的标识符,在示例中为 storage.googleapis.com/api/request_count

    前缀 storage.googleapis.com 是 Cloud Storage 的命名空间。与特定受监控资源类型关联的所有指标类型都使用相同的命名空间。

    表格中的条目中省略命名空间。

    Cloud Storage 指标表中列出了与 Cloud Storage 关联的所有指标类型。

  • 发布阶段:表示指标类型的发布阶段的彩色块,其值包括 Alpha、Beta、GA 等。

  • 显示名:描述指标类型的短字符串,示例中为“请求数量”。

  • 种类、类型、单位:此行提供用于解读数据值的信息:示例显示的是没有单位(即 1 值)的 64 位整数记录的增量指标。

    • 种类:此示例是一个增量指标,用于记录一段时间内的变化。也就是说,每个数据点都会记录自上一个数据点写入以来的 API 调用次数。如需详细了解种类,请参阅值类型和指标种类

    • 类型:此示例将其值记录为 64 位整数。如需详细了解类型,请参阅值类型和指标种类

    • 单位:此指标不需要明确的单位,因为它代表计数;数字 1 表示不需要单位。

  • 受监控的资源:此指标类型适用的受监控资源。此处的值与受监控的资源类型中描述的值相同。

  • 说明:有关所记录内容和记录方式的更多详细信息。设置为斜体,以将其与标签区分开。

  • 标签:用于对数据进行分类的一组维度。如需了解详情,请参阅标签

通过 Cloud Monitoring API 访问监控数据时,您在 API 调用中添加一个 Google Cloud 项目。您只能检索该 Google Cloud 项目可见的数据。例如,如果您针对指标类型 storage.googleapis.com/api/request_count 请求项目数据,则不会看到项目中 Cloud Storage 存储分区的 API 计数。如果您的项目未使用任何 Cloud Storage 存储分区,则系统不会返回任何指标数据。

内置指标类型

内置指标类型由 Google Cloud 服务(包括 Cloud Monitoring)定义。这些指标类型描述了各种常见基础架构的标准测量结果,可供任何人使用。

指标列表显示了整个内置指标类型集。 外部指标列表页面上列出的指标属于内置指标的一个特殊子集,由 Cloud Monitoring 与开源项目或第三方提供商共同定义。通常,这些指标的前缀为 external.googleapis.com

自定义指标

在构建应用时,您可能想要衡量某些属性,但这些属性没有内置在 Cloud Monitoring 中的指标。借助 Cloud Monitoring,您可以定义自己的指标类型,也可以从外部来源导入指标类型。这些指标类型称为自定义指标。如果指标的前缀为 custom.googleapis.comprometheus.googleapis.com,那么此指标就是自定义指标。后者通常来自 Google Cloud Managed Service for Prometheus

例如,如果要跟踪您的商店销售的微件数量,您需要使用自定义指标。如需了解详情,请参阅用户定义的指标概览

标签

标签是一种键值对,可用于提供数据值的相关信息。

指标和受监控资源标签

指标和受监控的资源类型的定义包括标签。标签是所收集数据的分类器;它们有助于对数据进行分类,以进行更深入的分析。例如:

  • Cloud Storage 指标类型 storage.googleapis.com/api/request_count 有两个标签:response_codemethod
  • Cloud Storage 受监控的资源类型 gcs_bucket 有三个标签:project_idbucket_namelocation。标签用于标识资源类型的特定实例。

因此,针对 Cloud Storage 存储分区的 API 请求收集的所有数据都根据所调用的方法、调用的响应代码、所涉及存储分区的名称、位置和项目进行分类。标签集因指标或受监控的资源类型而异;指标列表受监控的资源列表页面中记录了可用的标签。

通过在计算 API 调用次数时跟踪响应代码、方法名称和位置,您可以获取特定 API 方法的调用次数、任何方法的失败调用次数或特定方法在特定位置的失败调用次数。

标签的数量和每个标签可取的值的数量称为基数。基数是可能会为一对指标和受监控的资源类型收集的时间序列数量:标签的每个值组合都有一个时间序列。如需了解详情,请参阅基数:时序和标签

资源元数据标签

除了在指标和受监控的资源类型上定义的标签之外,Monitoring 还会在内部收集有关受监控资源的其他信息,并将此信息存储在系统元数据标签中。这些系统元数据标签可作为只读值供用户使用。某些资源还允许用户在 Google Cloud 控制台中配置虚拟机实例等资源时创建自己的资源元数据标签。

系统和用户元数据标签统称为资源元数据标签。您可以像使用指标和受监控的资源类型上定义的标签一样,在时间序列过滤条件中使用这些标签。如需详细了解过滤,请参阅 Monitoring 过滤条件

时间序列:来自受监控资源的数据

本部分讨论什么是监控数据以及其在时间序列中的组织方式。这就是指标模型的概念性组成部分成为具体工件的地方。

Cloud Monitoring 会针对指标和受监控的资源类型对存储一段时间的定期测量结果。测量结果收集到时间序列中,每个时间序列都包含以下内容:

  • 时间序列所属的指标类型的名称,以及指标标签的一个值组合。

  • 一系列(时间戳,值)对。值是测量值,时间戳是进行测量的时间。

  • 作为时间序列数据来源的受监控资源,以及资源标签的一个值组合。

系统会为生成数据的每个指标和资源标签组合创建一个时序。

格式示例:指标类型 storage.googleapis.com/api/request_count 可能对项目的 Cloud Storage 存储分区具有多个时序。以下展示了一些可能的时间序列。

在图示中,值 bucket: xxxx 表示受监控资源类型中 bucket_name 标签的值,response_codemethod 是指标类型中的标签。资源和指标标签中的每个值组合都有一个时间序列;图示中显示了一些示例:

显示指标中的多个时间序列的图片

Cloud Monitoring 不会记录“空”时序。在 Cloud Storage 存储桶示例中,如果您未使用特定存储桶或从未调用特定 API 方法,则不会为该标签收集数据,并且时序不会提及该存储桶。这意味着,如果您的项目完全没有特定指标的数据,您永远不会看到该指标类型。

指标类型并不表明指标的时间序列中可以找到哪些类型的受监控资源。对于 Cloud Storage,只有一种受监控的资源类型:gcs_bucket。某些指标类型与多个受监控的资源配对。

实时示例:如果您有 Google Cloud 项目,可以试用 API Explorer 微件,其位于 timeSeries.list 中方法的参考页面上。

  1. 打开 timeSeries.list 参考页面。

  2. 在标记为试用此方法的窗格中,输入以下内容:

    • nameprojects/PROJECT_IDPROJECT_ID 替换为您的 Google Cloud 项目的 ID。
    • 过滤条件metric.type="logging.googleapis.com/log_entry_count" resource.type="gce_instance"
    • interval.start_time:输入开始时间,并确保其比结束时间提前 20 分钟。
    • interval.end_time:输入结束时间。

如果请求成功,将返回与请求匹配的时间序列数据。返回内容类似于以下代码段:

{
  "timeSeries": [
    {
      "metric": {
        "labels": {
          "severity": "INFO",
          "log": "compute.googleapis.com/activity_log"
        },
        "type": "logging.googleapis.com/log_entry_count"
      },
      "resource": {
        "type": "gce_instance",
        "labels": {
          "instance_id": "0",
          "zone": "us-central1",
          "project_id": "your-project-id"
        }
      },
      "metricKind": "DELTA",
      "valueType": "INT64",
      "points": [
        {
        "interval": {
            "startTime": "2024-03-29T13:53:00Z",
            "endTime": "2024-03-29T13:54:00Z"
          },
          "value": {
            "int64Value": "0"
          }
        },
        ...
      ]
    },
    ...
  ]
}

如需详细了解如何使用 API Explorer 微件(包括问题排查),请参阅 API Explorer

基数:时间序列和标签

每个时序都与特定的指标和受监控资源类型对相关联。指标和受监控的资源类型各提供若干标签。在 Cloud Monitoring 中,一组标签的唯一值组合数量即为指标类型或受监控资源类型的基数。这些值称为指标基数资源基数,它们决定了系统可能会生成多少个可能的时序(即总基数)。

指标、资源和总基数

假设您有一个指标类型,其中指定了两个标签:colorzone。指标基数取决于这些标签的可取值数量:

  • 如果只有三种可能的颜色:“红色”,“绿色”和“蓝色”,则 color 标签最多可以有三个不同的值。
  • 如果只有两个可能的地区(“东部”和“西部”),则 zone 标签最多可以有两个不同的值。

此指标的基数为 6 (3×2)。如果 color 标签有 1,000 个可能的值,并且每种颜色都可以出现在每个区域,则该指标的基数为 2,000(1,000×2)。如果这些是受监控的资源类型(而非指标类型)上的标签,则同样适用相同的计算方式。

此基数值是基于可能的标签值组合数量的最大值。如果实际上不会出现所有标签值组合,实际有效值可能会大幅降低。例如,如果每种颜色仅显示在一个可用区中,而不是同时显示在两个可用区中,那么您在运行的系统中看到的时序的数量上限为 1,000 个。不过,有效基数的实用性取决于某些组合未出现的原因,以及它们将来是否可能会出现。

基数取决于任何标签可以具有的值。

写入时序数据时,系统会按指标和受监控的资源类型对其进行分类。对于任意一对指标和资源类型,总基数是指标基数和资源基数的乘积。如果您有一个基数为 1,000 的指标,一个基数为 100 的资源,并且每个标签值都会显示,那么您将有 10 万个时序(1,000×100)。

在设计自定义指标时,请确保任何标签的可能值集都受到限制。最好使用一小组离散的值(如“红色”“绿色”和“蓝色”)。例如,如果您为 color 标签使用 8 位 RGB 值,则可以有超过 1,600 万个不同的值。请为指标标签使用高分辨率值,例如时间戳、任何类型的唯一标识符、用户 ID、IP 地址、未参数化的网址等。

查询性能和基数

发出数据查询时,您请求的数据量是影响查询性能的最大因素:查询一小时的数据通常比查询六个月的数据更快。不过,请求返回的数据量也对请求中的时序数量非常敏感。由于检索的数据量不同,检索低基数指标的两个月内数据的查询可能比检索高基数指标的两个月内数据的另一个查询更快。

基数主要取决于标签可具有的值的数量,而不是标签的数量。通常,您无法控制资源的基数,例如,当 pod 或虚拟机数量根据业务需求而变化时。不过,将指标提取到 Cloud Monitoring 时,您通常可以对指标基数进行一定程度的控制,而不是使用系统指标。例如,对于用户定义的自定义指标,您可以确定其标签和可能的值。如果您要注入 Prometheus 指标,可以使用重新标记来修改一组标签,并删除您不想注入的时序。

您可以使用 Cloud Monitoring 指标管理页面来识别可能存在基数问题的指标。 如需查看指标管理页面,请执行以下操作:

  1. 在 Google Cloud 控制台中,转到 指标管理页面:

    进入指标管理

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  2. 在工具栏中,选择时间窗口。默认情况下,指标管理页面会显示有关前一天收集的指标的信息。

如需详细了解指标管理页面,请参阅查看和管理指标使用情况

如需了解 Cloud Monitoring 存储和检索时间序列数据的方式的技术背景信息,请参阅 Monarch:Google 的全球性内存中时序数据库

如需了解 Cloud Monitoring 中对用户定义的指标的限制,请参阅用户定义的指标