自定义指标

借助自定义指标,您可以捕获应用专属数据或客户端系统数据。Cloud Monitoring 收集的内置指标可以提供有关后端延迟时间或磁盘使用情况的信息,但无法提供相关信息,例如,应用生成了多少后台例程。您还可以创建基于日志条目内容的指标。如需了解这些类型的自定义指标,请参阅基于日志的指标概览

自定义指标(也称为应用特定标)可让您定义和收集内置 Cloud Monitoring 指标无法提供的信息。您可以使用由库提供的 API 来对代码进行插桩并由此捕获此类指标,然后将这些指标发送到 Cloud Monitoring 等后端应用。

您可以直接使用 Cloud Monitoring API 创建自定义指标。不过,我们建议您使用 OpenCensus。如需了解如何创建自定义指标,请参阅以下文档:

  • 使用 OpenCensus 创建自定义指标介绍了如何使用 OpenCensus(一个开源监控和跟踪库)。借助该库,您可以创建自定义指标、向这些指标添加指标数据并将指标数据导出到 Cloud Monitoring。

  • 使用 API 创建自定义指标一文介绍了如何使用 Cloud Monitoring API 创建自定义指标,以及如何为这些指标添加指标数据。本文档介绍了如何将 Monitoring API 与使用 API Explorer、C#、Go、Java、Node.js、PHP、Python 和 Ruby 编程语言的示例搭配使用。

就 Cloud Monitoring 而言,您可以使用内置指标等自定义指标。您可以绘制图表、设置提醒、阅读提醒或以其他方式监控提醒。如需了解如何读取指标数据,请参阅以下文档:

  • 浏览指标和资源类型介绍了如何列出和检查您的自定义指标和内置指标类型。例如,您可以使用本文档中的信息列出项目中的所有自定义指标描述符。
  • 阅读指标数据介绍了如何使用 Monitoring API 从自定义指标和内置指标中检索时序数据。例如,本文档介绍了如何使用该 API 获取 Google Cloud 项目中虚拟机 (VM) 实例的 CPU 利用率。

Google Cloud Console 提供了一个专门页面,方便您查看自定义指标的使用情况。如需了解此页面的内容,请参阅查看指标诊断

自定义指标的指标描述符

每个指标类型都必须有一个指标描述符,用于定义指标数据的组织方式。指标描述符还定义了指标的标签和指标名称。例如,指标列表会显示所有内置指标类型的指标描述符。

使用自定义指标时,Cloud Monitoring 可以使用您写入的指标数据为您创建指标描述符。或者,您也可以明确创建指标描述符,然后写入指标数据。无论哪种情况,您都必须决定如何整理指标数据。

设计示例

假设您的程序在一台机器上运行,并且此程序会调用辅助程序 AB。您想要统计程序 AB 的调用频率。您还需要知道程序 A 的每分钟调用次数超过 10 次以及程序 B 每分钟调用的次数超过 5 次。最后,假设您有一个 Google Cloud 项目,并计划针对 global 受监控的资源写入数据。

此示例介绍了可用于自定义指标的几种不同设计:

  • 使用两个自定义指标:Metric-type-A 计算对程序 A 的调用,Metric-type-B 计算对程序 B 的调用。此时,Metric-type-A 包含 1 个时间序列,Metric-type-B 包含 1 个时间序列。

    您可以创建一个包含两个条件的提醒政策,也可以创建两个提醒政策,每个提醒政策均包含一个具有此数据模式的条件。一个提醒政策可以支持多个条件,但对于通知渠道仅支持一个配置。

    如果您对受监控活动的数据之间的相似性不感兴趣,则此模型可能是合适的。在此示例中,活动为程序 AB 的调用率。

  • 您可以使用一个自定义指标并使用标签来存储程序标识符。例如,标签可以存储值 AB。Monitoring 会为每个唯一的标签组合创建一个时序。因此,存在一个标签值为 A 的时序和另一个标签值为 B 的时序。

    与上一个模型一样,您可以创建一个提醒政策或两个提醒政策。但是,提醒政策的条件更为复杂。程序 A 的调用速率超过阈值时生成突发事件的条件必须使用仅包含标签值为 A 的数据点的过滤条件。

    此模型的一个优势是计算比率很简单。例如,您可以确定总数中有多大比例是对 A 的调用。

  • 您可以使用一个自定义指标来计算调用次数,但不能使用标签记录调用了哪个程序。此模型有一个时间序列,其中结合了两个程序的数据。但是,您无法创建符合您目标的提醒政策,因为两个程序的数据无法分开。

前两种设计可让您满足数据分析要求;但最后一个设计则不支持。

如需了解如何创建指标描述符,请参阅创建指标描述符

自定义指标的名称

创建自定义指标时,您可以定义表示指标类型的字符串标识符。此字符串在 Google Cloud 项目的自定义指标中必须是唯一的,并且必须使用将指标标记为用户定义的指标的前缀。对于 Monitoring,允许的前缀是 custom.googleapis.com/external.googleapis.com/userexternal.googleapis.com/prometheus。前缀后跟一个您要收集的内容的名称。如需详细了解为自定义指标命名的方法,请参阅指标命名惯例。以下是两种指标类型的标识符示例:

    custom.googleapis.com/cpu_utilization
    custom.googleapis.com/instance/cpu/utilization

在前面的示例中,前缀 custom.googleapis.com 表示这两个指标都是自定义指标。这两个示例都用于衡量 CPU 利用率;但它们使用不同的组织模型。当您预计会有大量自定义指标时,我们建议您使用与第二个示例相同的分层命名结构。

所有指标类型都具有称为“资源名称”的全局唯一标识符。指标类型的资源名称结构为:

projects/PROJECT_ID/metricDescriptors/METRIC_TYPE

其中,METRIC_TYPE 是指标类型的字符串标识符。如果上述指标示例是在项目 my-project-id 中创建的,则这些指标的资源名称如下:

    projects/my-project-id/metricDescriptors/custom.googleapis.com/cpu_utilization
    projects/my-project-id/metricDescriptors/custom.googleapis.com/instance/cpu/utilization

名称还是类型? 在指标描述符中,name 字段存储指标类型的资源名称,而 type 字段存储 METRIC_TYPE 字符串。

用于自定义指标的受监控的资源类型

将数据写入时间序列时,您必须指明数据的来源。如需指定数据的来源,请选择表示数据来源的受监控的资源类型,然后使用该资源类型来描述特定的来源。受监控的资源不是指标类型的一部分。 相反,向其中写入数据的时序包括对指标类型的引用以及对受监控资源的引用。指标类型描述数据,而受监控的资源描述数据的来源。

在创建指标描述符之前,请先考虑受监控的资源。您使用的受监控的资源类型会影响您需要在指标描述符中添加的标签。例如,Compute Engine 虚拟机资源包含项目 ID、实例 ID 和实例可用区的标签。因此,如果您计划针对 Compute Engine 虚拟机资源写入自定义指标,则资源标签会包含实例 ID,因此您无需在指标描述符中使用实例 ID 的标签。

每个指标的数据点都必须与一个受监控的资源对象关联。不同受监控的资源对象的数据点保存在不同的时序中。

下面列出了可与自定义指标搭配使用的受监控的资源类型:

常见做法是使用表示运行应用代码的物理资源的受监控资源对象。 这样做具有很多优势:

  • 与使用单一资源类型相比,您可以体验更好的性能。
  • 避免因多个进程向同一时间序列写入数据导致的数据无序。
  • 您可以将自定义指标数据与来自相同资源的其他指标数据组合在一起。

global 和通用资源

在某些情况下,如果没有更具体的资源类型适合使用,则 generic_taskgeneric_node 资源类型十分实用。generic_task 类型适用于定义类似任务的资源(如应用)。generic_node 类型适用于定义类似节点的资源(如虚拟机)。 这两种 generic_* 类型都有多个可用于定义唯一资源对象的常见标签,让您可以轻松地在指标过滤条件中使用这些标签进行聚合和缩减。

相比之下,global 资源类型只有 project_idlocation 标签。如果一个项目中有多个指标来源,则使用相同的 global 资源对象可能会导致您的指标数据发生冲突和被覆盖。

支持自定义指标的 API 方法

下表展示了 Monitoring API 中支持自定义指标的方法和支持内置指标的方法:

Monitoring API 方法
自定义指标搭配使用

内置指标搭配使用
monitoredResourceDescriptors.get
monitoredResourceDescriptors.list
metricDescriptors.get
metricDescriptors.list
timeSeries.list
timeSeries.create
metricDescriptors.create
metricDescriptors.delete

限制和延迟时间

如需了解与自定义指标和数据保留相关的限制,请参阅配额和限制

如需在超过指标数据的保留期限之后继续保留,您必须手动将数据复制到其他位置,例如 Cloud Storage 或 BigQuery。

如需了解关于将数据写入自定义指标的延迟时间的信息,请参阅指标数据的延迟时间

后续步骤