本文档介绍了如何使用 Cloud Monitoring API 创建用户定义的指标以及如何写入此类指标数据。用户定义的指标使用的元素与内置 Cloud Monitoring 指标相同:
- 一组数据点。
- 指标类型信息,用于说明数据点代表什么。
- 受监控的资源信息,用于说明数据点的来源。
用户定义的指标(有时称为自定义指标)的使用方式与内置指标相同。也就是说,您可以为此类指标数据创建图表和提醒。
基于日志的指标是一种用户定义的指标,但您无法使用 Cloud Monitoring API 创建此类指标。基于日志的指标会从日志条目派生指标数据,但 Monitoring API 无法提供指定如何从日志条目中提取指标数据的方法。请改用 Cloud Logging 创建基于日志的指标。当您创建基于日志的指标时,Logging 会创建本文档中所述的结构,并为您将指标数据发送到 Cloud Monitoring。如需了解如何创建基于日志的指标,请参阅以下文档:
如需对应用进行插桩,我们建议您使用开源且与供应商无关的插桩框架(例如 OpenTelemetry),而不是供应商和产品专用 API 或客户端库。如需了解如何对应用执行插桩,请参阅 插桩和可观测性。
准备工作
如需了解所有指标的底层结构,请参阅指标、时序和资源。
若要使用 Cloud Monitoring,您必须有启用了结算功能的 Google Cloud 项目。如有必要,请执行以下操作:
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- 确保已启用 Monitoring API。如需了解详情,请参阅启用 Monitoring API。
对于在 Google Cloud 外部运行的应用,您的 Google Cloud 项目必须对应用进行身份验证。通常,您可以通过为项目创建服务账号并配置环境变量来配置身份验证。
如需了解如何创建服务账号,请参阅身份验证使用入门。
创建用户定义的指标类型
如需创建用户定义的指标,您可以定义一个 MetricDescriptor
对象来指定指标的各种信息,也可以写入指标数据。当您写入指标数据时,Monitoring 会根据您提供的数据结构为您创建指标描述符。如需了解如何设计指标描述符,请参阅用户定义的指标的指标描述符。
自动创建指标描述符
如果在用户定义指标的指标描述符不存在时写入指标数据,则系统会自动创建指标描述符。但是,这个新的指标描述符可能不是您想要的;系统在自动创建指标描述符时会做出一些假设,并使用默认值。
Cloud Monitoring 创建一个新的MetricDescriptor
时间TimeSeries
对象包含在调用timeSeries.create
引用Metric
指定不存在的对象指标类型名称。Cloud Monitoring 使用以下规则来填充 MetricDescriptor
:
type
:类型是从Metric
对象的type
字段中复制的。name
:名称是根据方法调用中的项目 ID 以及Metric
对象中type
的值创建的。labels
:Metric
对象中显示的标签。新指标描述符中的每个标签描述符都具备以下字段:key
:Metric
对象中的标签键。valueType
:STRING
description
:未设置
metricKind
:除非您指定TimeSeries
对象的metricKind
参数,否则指标种类设置为GAUGE
。指定metricKind
时,新指标将具备该参数指定的种类。您只能指定GAUGE
和CUMULATIVE
种类。valueType
:值类型取自写入的Point
的值类型。值类型必须是BOOL
、INT64
、DOUBLE
或DISTRIBUTION
。如果您在TimeSeries
的valueType
字段中指定值类型,则该类型必须与Point
的类型匹配。unit
:未设置description
:"Auto created custom metric."
。displayName
:未设置
单次 timeSeries.create
调用可以包含多个引用同一个不存在的指标类型的 TimeSeries
对象。在这种情况下,新指标描述符中的标签包含对 create
的本次调用中所有时序中的 Metric
对象的所有标签的集合。
后续步骤:请参阅写入用户定义的指标。
手动创建指标描述符
如需创建指标描述符,请执行以下操作:
确定针对其写入指标数据的受监控的资源。请从以下列表中选择:
aws_ec2_instance
:Amazon EC2 实例。dataflow_job
:Dataflow 作业。gae_instance
:App Engine 实例。gce_instance
:Compute Engine 实例。generic_node
:用户指定的计算节点。generic_task
:用户定义的任务。gke_container
:GKE 容器实例。global
:其他资源类型均不适用时,请使用此资源。对于大多数使用场景来说,更适合选择generic_node
或generic_task
,而非global
。k8s_cluster
:Kubernetes 集群。k8s_container
:Kubernetes 容器。k8s_node
:Kubernetes 节点。k8s_pod
:Kubernetes pod。
创建一个
MetricDescriptor
对象,然后将其作为参数传递给对metricDescriptors.create
方法的调用。
使用与现有指标描述符相同的类型名称调用 metricDescriptors.create
通常会导致错误。但是,如果新 MetricDescriptor
对象的所有字段都与现有描述符的字段完全匹配,则不会出现错误,但不会产生任何效果。
在以下示例中,您将创建一个 gauge 指标。
协议
要创建指标描述符,请使用 metricDescriptors.create
方法。您可以使用方法参考页面上的 API Explorer 微件来执行此方法。如需了解详情,请参阅 API Explorer。
以下是 metricDescriptors.create
的示例参数:
- 名称(网址):
projects/[PROJECT_ID]
请求正文:提供一个
MetricDescriptor
对象,如下所示:{ "name": "", "description": "Daily sales records from all branch stores.", "displayName": "Sales", "type": "custom.googleapis.com/stores/sales", "metricKind": "GAUGE", "valueType": "DOUBLE", "unit": "{USD}", "labels": [ { "key": "store_id", "valueType": "STRING", "description": "The ID of the store." }, ], }
在微件字段中提供这些值,将 [PROJECT_ID
替换为您的项目 ID:
点击执行按钮以运行该方法。
在创建新指标时,MetricDescriptor
中的 name
字段会被忽略,因此可以省略。create
方法将返回已填充 name
字段的新指标描述符,在本示例中,该字段如下所示:
"name": "projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales"
例如,如果您想要获取指标的描述符,则使用此名称。
C#
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如果遇到困难,请参阅 API 调用问题排查。
后续步骤:请参阅写入用户定义的指标。
编写用户定义的指标
您只能将数据写入用户定义指标的指标类型。要写入数据,请使用 timeSeries.create
方法。如果时序已存在,则此方法会将新数据点附加到现有时序。如果时序不存在,则此方法将创建时序并附加数据。
您可以通过将 TimeSeries
对象列表传递到 timeSeries.create
来写入数据点。列表大小上限为 200,列表中的每个对象都必须指定不同的时间序列:
metric
和resource
字段的值用于标识特定TimeSeries
对象。这些字段表示数据的指标类型以及从中收集数据的受监控资源。- 省略字段
metricKind
和valueType
;写入数据点时,系统会忽略这两个字段。 每个
TimeSeries
对象只能包含一个Point
个对象:- 该点的值和时段必须与指标类型的定义一致。如需了解不同指标种类的时间间隔,请参阅
TimeInterval
。 - 该点的时段必须晚于时间序列中已有的点。
- 时段的结束时间不得早于 25 小时之前,也不得晚于 5 分钟后。
- 该点的值和时段必须与指标类型的定义一致。如需了解不同指标种类的时间间隔,请参阅
如需将多个数据点写入相同的时序,请对每个数据点单独调用
timeSeries.create
方法。请勿将数据写入速度超过每 5 秒 1 个数据点的单个时间序列。如果您要将数据点添加到不同时序,则没有速率限制。
协议
要写入数据,请使用 timeSeries.create
方法。您可以使用方法参考页面上的 API Explorer 微件来执行此方法。如需了解详情,请参阅 API Explorer。
如需将数据点写入在手动创建指标描述符中创建的 stores/daily_sales
指标,请执行以下操作:
- 转到
timeSeries.create
的参考页面。 - 将以下参数提供给 API Explorer 微件。
- 点击执行按钮。
使用以下示例参数:
- 名称:
projects/[PROJECT_ID]
请求正文:包含
TimeSeries
对象列表。在以下示例中,列表中只有一个时间序列。{ "timeSeries": [ { "metric": { "type": "custom.googleapis.com/my_metric", "labels": { "my_label": "my_value" } }, "resource": { "type": "gce_instance", "labels": { "project_id": "[PROJECT_ID]", "instance_id": "1234567890123456789", "zone": "us-central1-f" } }, "points": [ { "interval": { "endTime": "2018-06-01T10:00:00-04:00" }, "value": { "doubleValue": 123.45 } } ] } ] }
C#
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如果遇到困难,请参阅 API 调用问题排查。
删除用户定义的指标
如需删除用户定义的指标,请删除其指标描述符。 您无法删除存储在 Google Cloud 项目中的时间序列数据;但是,删除指标描述符会导致数据无法访问。数据会根据数据保留政策过期并被系统删除。
您无法删除内置指标的指标描述符。
如需删除指标描述符,请调用 metricDescriptors.delete
方法。
协议
要删除指标描述符,请使用 metricDescriptors.delete
方法。您可以使用方法参考页面上的 API Explorer 微件来执行此方法。如需了解详情,请参阅 API Explorer。
如需删除在手动创建指标描述符中创建的 stores/daily_sales
指标,请执行以下操作:
- 转到
metricDescriptors.delete
的参考页面: 将指标描述符的名称提供给 API Explorer 微件:
名称:
projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales
点击执行按钮。
C#
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
如果遇到困难,请参阅 API 调用问题排查。
修改用户定义的指标
如需修改用户定义的指标,您必须更新用于定义该指标的 MetricDescriptor
对象。唯一支持的修改是添加标签。
如需向现有用户定义的指标添加标签,请使用 timeSeries.create
方法,并包含新标签和时间序列数据的。如果您尝试写入的标签有效且标签总数小于 30,则标签会添加到指标描述符中。
然后写入时间序列数据,就好像标签从一开始就存在一样。
如果您要执行添加新标签以外的操作,必须删除并重新创建指标描述符。在这种情况下,您将丢失先前为旧指标描述符收集的所有时间序列数据。如需了解详情,请参阅删除用户定义的指标。
您无法重命名指标。