时序的结构

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

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

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

  • 对于使用第三方集成(如 OpenTelemetry)的用户,此 API 也很有用。当来自外部来源的数据通过集成到达 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 微件(位于 Monitoring API 中的 monitoredResourceDescriptors.get 方法的参考页面上)检索此描述符。

运行此示例时,必须将名称字段中的 [PROJECT_ID] 更改为您的项目 ID。然后点击 widget 面板底部的执行。 请求会返回上述描述符。

试试看!

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

Cloud Monitoring 可以监控大约 270 种资源类型;如需了解详情,请参阅资源列表。该列表直接派生自一组可用的受监控资源描述符。

指标

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 微件(位于 Monitoring API 中的 metricDescriptors.get 方法的参考页面上)检索此描述符。

运行此示例时,必须将名称字段中的 [PROJECT_ID] 更改为您的项目 ID。然后点击 widget 面板底部的执行。 请求会返回上述描述符。

试试看!

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

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

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