为何自定义指标在写入时设置资源类型而非描述符阶段?能否强制绑定?
问题描述
文档提到手动创建指标描述符时需要选择资源类型,但创建MetricDescriptor的代码中没有设置资源类型的字段:
client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}" descriptor = ga_metric.MetricDescriptor() descriptor.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4()) descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE descriptor.description = "This is a simple example of a custom metric." labels = ga_label.LabelDescriptor() labels.key = "TestLabel" labels.value_type = ga_label.LabelDescriptor.ValueType.STRING labels.description = "This is a test label" descriptor.labels.append(labels) descriptor = client.create_metric_descriptor( name=project_name, metric_descriptor=descriptor ) print("Created {}.".format(descriptor.name))
只有在写入自定义指标时才设置资源类型:
series = monitoring_v3.TimeSeries() series.metric.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4()) ###### SET TYPE HERE ###### series.resource.type = "gce_instance" series.resource.labels["instance_id"] = "1234567890123456789" series.resource.labels["zone"] = "us-central1-c" series.metric.labels["TestLabel"] = "My Label Data" now = time.time() seconds = int(now) nanos = int((now - seconds) * 10**9) interval = monitoring_v3.TimeInterval( {"end_time": {"seconds": seconds, "nanos": nanos}} ) point = monitoring_v3.Point({"interval": interval, "value": {"double_value": 3.14}}) series.points = [point] client.create_time_series(name=project_name, time_series=[series])
尝试用gce_instance、generic_task和global三种资源类型写入该指标,结果生成了三个不同的指标。原本期望能将自定义指标绑定到特定资源类型,这样写入错误类型时会抛出错误。想问是否有办法为自定义指标强制绑定资源类型?
解决方案
可以在创建MetricDescriptor时显式设置resource_type字段,以此强制绑定特定资源类型。修改后的创建代码如下:
client = monitoring_v3.MetricServiceClient() project_name = f"projects/{project_id}" descriptor = ga_metric.MetricDescriptor() descriptor.type = "custom.googleapis.com/my_metric" + str(uuid.uuid4()) descriptor.metric_kind = ga_metric.MetricDescriptor.MetricKind.GAUGE descriptor.value_type = ga_metric.MetricDescriptor.ValueType.DOUBLE descriptor.description = "This is a simple example of a custom metric." # 绑定指定资源类型 descriptor.resource_type = "gce_instance" labels = ga_label.LabelDescriptor() labels.key = "TestLabel" labels.value_type = ga_label.LabelDescriptor.ValueType.STRING labels.description = "This is a test label" descriptor.labels.append(labels) descriptor = client.create_metric_descriptor( name=project_name, metric_descriptor=descriptor ) print("Created {}.".format(descriptor.name))
这样创建的指标描述符就和gce_instance资源类型绑定,后续写入指标时如果使用其他资源类型,调用create_time_series会直接抛出错误,符合预期的校验逻辑。
内容的提问来源于stack exchange,提问作者red888
相关产品推荐
相关产品推荐

