时间序列的结构

本页面是对指标、时间序列和资源以及指标模型的组成部分中的讨论和示例的进一步深入探讨。要充分利用此页面,请先阅读以上这些页面。

本页面面向希望更深入地了解时间序列和 Cloud Monitoring 指标模型实现的读者,尤其是那些使用 Monitoring API 的读者。这包括自定义(用户定义)指标的用户。

  • 本页面将通用指标模型映射到 Cloud Monitoring API,因此它对于直接使用 Monitoring API 的使用者非常有用。主要与 Google Cloud 控制台进行互动的用户可能不需要如此详细的信息。

  • 它对使用 OpenTelemetry 等第三方集成的用户也非常有用。当来自外部来源的数据通过集成到达 Cloud Monitoring 时,它会映射到 Cloud Monitoring 指标模型,并像任何其他指标数据一样进行处理。

如需详细了解如何收集您自己的指标,请参阅用户定义的指标概览

指标模型回顾

理解时间序列结构的先决条件是熟悉 Cloud Monitoring 使用的指标模型。指标、时间序列和资源中介绍了此模型。本部分简要回顾该节内容。

一般而言,监控数据记录在时间序列中。每个单独的时间序列都包含与此讨论相关的三项信息:

  • 一组带时间戳的数据点。
  • 对指标类型的引用,告知您如何解读数据点。
  • 对数据来源的受监控资源的引用。

    时序的结构。

每个时间序列都包含来自单个物理来源或逻辑来源的测量结果。如果您的环境有数百个资源,则每个资源至少贡献一个时间序列。实际上,如果您的指标类型和受监控的资源类型具有标签,则可通过每个标签值组合获得一个时间序列;有关详情,请参阅基数

时间序列示例

时序表示为 TimeSeries 对象的实例。以下是单个时序的完整实例:

    {
      "metric": {
        "labels": {
          "log": "kubelet",
          "severity": "DEFAULT"
        },
        "type": "logging.googleapis.com/log_entry_count"
      },
      "resource": {
        "type": "gce_instance",
        "labels": {
          "instance_id": "5106847938295940291",
          "zone": "us-central1-a",
          "project_id": "a-gcp-project"
        }
      },
      "metricKind": "DELTA",
      "valueType": "INT64",
      "points": [
        {
          "interval": {
            "startTime": "2019-12-20T20:25:38Z",
            "endTime": "2019-12-20T20:26:38Z"
          },
          "value": {
            "int64Value": "20"
          }
        }
      ]
    }

大多数时间序列包含更多数据点;此时间序列的时间跨度为一分钟。所有时间序列都具有相同的结构,具有以下字段:

  • metric 字段记录

    • 此特定时间序列的指标标签值,表示标签值的一个组合。
    • 数据所关联的指标类型。指标类型指定可用的标签并描述数据点所代表的内容。

    如需详细了解此字段中的信息,请参阅指标

  • resource 字段记录:

    • 此特定时间序列的资源标签值,表示标签值的一个组合。
    • 从中收集数据的特定受监控的资源。

    受监控的资源对象中更详细地介绍了此字段中的信息。

  • metricKindvalueType 字段告诉您如何解读值。如需了解详情,请参阅指标种类和类型

  • points 字段是带时间戳的值的数组。指标类型告诉您值所代表的含义。时间序列示例有一个包含单个数据点的数组;在大多数时间序列中,数组会包含更多值。

有关检索时间序列数据的即时示例,请参阅时间序列:来自受监控资源的数据

本页面的其余部分将更详细地介绍 metricresource 字段中的信息。

受监控的资源

Cloud Monitoring 会从受监控的资源中收集数据并将其记录在时间序列中。创建的每个时间序列都包含从中收集数据的受监控资源的说明。

受监控的资源对象

受监控的资源由 MonitoredResource 对象的实例表示。受监控的资源用于描述时序中值的来源。MonitoredResource 对象嵌入时序中,并标识 Monitoring 已知的受监控资源类型的一个特定实例:它指向物理或逻辑实体。

例如,以下是描述一个特定 Compute Engine 实例的受监控资源对象,提取自示例时间序列:

      "resource": {
        "type": "gce_instance",
        "labels": {
          "instance_id": "5106847938295940291",
          "zone": "us-central1-a",
          "project_id": "a-gcp-project"
        }
      }

此受监控资源的实例的类型为 gce_instance,它在项目 a-gcp-project 中有一个特定的 instance_id 值 (5106847938295940291)。该实例位于美国。另一个时间序列可能源自此受监控资源的不同实例。每个标签值组合都会标识从中收集数据的唯一资源。

不同的标签集对不同的资源有意义。资源的标签集取决于该类型的受监控资源描述符。

受监控的资源描述符

关于受监控的资源类型的信息保存在名为“受监控的资源描述符”的数据结构中。如需了解此数据结构的定义,请参阅 MonitoredResourceDescriptor

受监控的资源描述符类似于记录结构的架构或规范。它不包含有关受监控资源的特定实例的数据;它告诉您如何描述特定类型的受监控资源。例如,以下是 gce_instance 资源的受监控资源描述符:

{
  "type": "gce_instance",
  "displayName": "VM Instance",
  "description": "A virtual machine instance hosted in Compute Engine.",
  "name": "projects/[PROJECT_ID]/monitoredResourceDescriptors/gce_instance"
  "labels": [
    {
      "key": "project_id",
      "description": "The identifier of the GCP project associated with this resource, such as \"my-project\"."
    },
    {
      "key": "instance_id",
      "description": "The numeric VM instance identifier assigned by Compute Engine."
    },
    {
      "key": "zone",
      "description": "The Compute Engine zone in which the VM is running."
    }
  ],
}

将此受监控的资源描述符与受监控的资源对象中显示的 gce_instance 资源的特定实例进行比较。此描述符未描述某个特定的受监控的资源;相反,描述符指定标签,而标签值的每个组合都会标识一个特定的受监控的资源。

您可以使用 Cloud Monitoring API 在 Google Cloud 项目中检索受监控的资源描述符。例如,请参阅 monitoredResourceDescriptors.listmonitoredResourceDescriptors.get 方法的参考页面。

实时示例:如果您有 Google Cloud 项目,则可以使用 API Explorer 微件按如下方式检索此描述符:

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

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

    • 名称projects/PROJECT_ID/monitoredResourceDescriptors/gce_instance

      PROJECT_ID 替换为您的 Google Cloud 项目的 ID。

  3. 点击执行

请求将返回上述描述符。

如需查看使用 Monitoring API 方法的示例,请参阅列出指标和资源类型

指标

Cloud Monitoring 创建的每个时间序列都会记录一组数据点以及这些数据点的组织结构和含义的信息。

指标对象

每个时间序列都包含对指标对象中所记录数据说明的引用。

时序中包含的指标对象指定了测量结果的类型以及与这些测量结果相关的指标专用信息。如需了解指标对象数据结构的定义,请参阅 Metric。例如,下面是从时序示例中的时序中提取的指标对象:

    {
      "metric": {
        "labels": {
          "log": "kubelet",
          "severity": "DEFAULT"
        },
        "type": "logging.googleapis.com/log_entry_count"
      }

此对象告诉您时序包含 logging.googleapis.com/log_entry_count 测量结果。标签值告诉您,此特定时间序列仅计算名为 kubelet 的日志文件中严重程度为 DEFAULT 的日志条目。

每个标签值组合都有一个时间序列,因此同一日志文件的 INFO 条目会以不同的时间序列显示。

在指标对象中收集的标签集在该指标类型的描述符中指定。

指标描述符

指标类型的相关信息保存在称为“指标描述符”的数据结构中。如需了解此数据结构的定义,请参阅 MetricDescriptor

指标描述符是记录结构的架构或规范。它不包含特定指标的相关数据;相反,它会告诉您如何解读与特定指标类型相关的数据。

以下是指标描述符示例:

{
  "type": "logging.googleapis.com/log_entry_count",
  "name": "projects/a-gcp-project/metricDescriptors/logging.googleapis.com/log_entry_count",
  "labels": [
    {
      "key": "log",
      "description": "Name of the log."
    },
    {
      "key": "severity",
      "description": "Severity of the log entry."
    }
  ],
  "metricKind": "DELTA",
  "valueType": "INT64",
  "unit": "1",
  "description": "Number of log entries that contributed to user-defined metrics.",
  "displayName": "Log entries",
  "metadata": {
    "launchStage": "GA",
    "samplePeriod": "60s"
  },
  "launchStage": "GA"
}

将此指标描述符与指标对象中显示的指标对象进行比较。描述符会告诉您标签值的含义,以及如何解读数据点的值。

您可以使用 Cloud Monitoring API 检索指标描述符。例如,请参阅 metricDescriptors.listmetricDescriptors.get 方法的参考页面。

实时示例:如果您有 Google Cloud 项目,则可以使用 API Explorer 微件按如下方式检索此描述符:

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

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

    • nameprojects/PROJECT_ID/metricDescriptors/logging.googleapis.com/log_entry_countPROJECT_ID 替换为您的 Google Cloud 项目的 ID。
  3. 点击执行

请求将返回上述描述符。

如需查看使用 Monitoring API 方法的示例,请参阅列出指标和资源类型

指标描述符中的大多数字段都是简明直观的。可能需要进一步解释的两个指标是指标种类和值类型,指标种类和类型中对此进行了进一步说明。

Cloud Monitoring 有大约 6,500 种内置指标;如需了解详情,请参阅指标列表。您还可以创建自己的指标描述符以捕获自定义指标。如需了解详情,请参阅用户定义的指标概览