本文档介绍如何使用 Cloud Monitoring API 创建用户定义的指标以及如何写入此指标数据。用户定义的指标使用的元素与内置 Cloud Monitoring 指标相同:
- 一组数据点。
- 指标类型信息,用于说明数据点代表什么。
- 受监控的资源信息,用于说明数据点的来源。
用户定义的指标(有时称为自定义指标)的使用方式与内置指标相同。也就是说,您可以为此指标数据创建图表和提醒。
基于日志的指标是一类用户定义的指标,但您无法使用 Cloud Monitoring API 创建此类指标。基于日志的指标会从日志条目中派生指标数据,但 Monitoring API 无法指定如何从日志条目中提取指标数据。请改用 Cloud Logging 创建基于日志的指标。当您创建基于日志的指标时,Logging 会创建本文档中所述的结构,并将指标数据发送至 Cloud Monitoring。如需了解如何创建基于日志的指标,请参阅以下文档:
如需对应用进行插桩,我们建议您使用不受制于供应商的开源插桩框架(例如 OpenTelemetry),而不是使用供应商和产品特有的 API 或客户端库。如需了解如何对应用进行插桩,请参阅插桩和可观测性。
准备工作
如需了解所有指标的底层结构,请参阅指标、时序和资源。
您必须拥有启用了结算功能的 Trusted Cloud 项目才能使用 Cloud Monitoring。如有必要,请执行以下操作:
-
In the Trusted Cloud console, on the project selector page, select or create a Trusted Cloud project.
-
Make sure that billing is enabled for your Trusted Cloud project.
- 确保已启用 Monitoring API。如需了解详情,请参阅启用 Monitoring API。
- 对于在 Trusted Cloud by S3NS外部运行的应用,您的 Trusted Cloud 项目必须使用本地应用默认凭证 (ADC) 对应用进行身份验证。如需了解详情,请参阅为本地或其他云服务提供商设置 ADC。
创建用户定义的指标类型
如需创建用户定义的指标,您可以定义一个 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
对象的所有字段都与现有描述符的字段完全匹配,则不会出现错误,但不会产生任何效果。
在以下示例中,您将创建一个衡量指标。
协议
要创建指标描述符,请使用 metricDescriptors.create
方法。您可以使用方法参考页面上的 API Explorer 微件来执行此方法。如需了解详情,请参阅 APIs 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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
如果遇到困难,请参阅 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 微件来执行此方法。如需了解详情,请参阅 APIs 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 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
如果遇到困难,请参阅 API 调用问题排查。
删除用户定义的指标
要删除用户定义的指标,请删除其指标描述符。您无法删除存储在 Trusted Cloud 项目中的时序数据;但是,删除指标描述符会导致数据无法访问。数据会根据数据保留政策过期并被系统删除。
您无法删除内置指标的指标描述符。
如需删除指标描述符,请调用 metricDescriptors.delete
方法。
协议
要删除指标描述符,请使用 metricDescriptors.delete
方法。您可以使用方法参考页面上的 API Explorer 微件来执行此方法。如需了解详情,请参阅 APIs Explorer。
如需删除在手动创建指标描述符中创建的 stores/daily_sales
指标,请执行以下操作:
- 转到
metricDescriptors.delete
的参考页面: 将指标描述符的名称提供给 API Explorer 微件:
名称:
projects/[PROJECT_ID]/metricDescriptors/custom.googleapis.com/stores/daily_sales
点击执行按钮。
C#
如需向 Monitoring 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Go
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Java
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Node.js
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
PHP
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Python
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
Ruby
如需向 Monitoring 进行身份验证,请设置应用默认凭证。 如需了解详情,请参阅为本地开发环境设置身份验证。
在运行代码示例之前,请将 GOOGLE_CLOUD_UNIVERSE_DOMAIN
环境变量设置为 s3nsapis.fr
。
如果遇到困难,请参阅 API 调用问题排查。
修改用户定义的指标
如需修改用户定义的指标,您必须更新定义该指标的 MetricDescriptor
对象。唯一支持的修改是添加标签。
如需向现有用户定义的指标添加标签,请使用 timeSeries.create
方法,并在时序数据中包含新标签。如果您尝试写入的标签有效且标签总数小于 30,则标签会添加到指标描述符中。
然后写入时间序列数据,就好像标签从一开始就存在一样。
如果您要执行添加新标签以外的操作,必须删除并重新创建指标描述符。在这种情况下,您将丢失先前为旧指标描述符收集的所有时间序列数据。如需了解详情,请参阅删除用户定义的指标。
您无法重命名指标。