You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP自定义指标(User defined metric)无数据接收/显示求助

Google Cloud自定义指标无数据显示排查与修复

核心问题分析

你的代码存在几个关键错误,导致数据无法在Monitoring UI中显示:

  1. 指标标签不匹配:创建指标描述符时仅定义了TestLabel标签,但推送时间序列时额外添加了function和data标签。自定义指标的标签必须严格与描述符定义一致,额外标签会导致数据被直接丢弃。
  2. 项目名称格式错误:Google Cloud API要求项目名称参数必须为projects/[你的项目ID]格式,而非直接使用项目ID字符串。
  3. 函数调用参数不匹配:create_time_series函数定义仅接受2个参数,但调用时传入了3个参数,实际运行会触发参数错误(可能是代码复制遗漏导致)。

修复后的代码示例

from google.cloud import monitoring_v3
from google.api_core import metric_pb2 as ga_metric
from google.api_core import label_pb2 as ga_label
import time

# 初始化客户端
client = monitoring_v3.MetricServiceClient()
# 正确的项目名称格式
project_name = f"projects/你的实际项目ID"

# 创建指标描述符(仅需执行一次)
descriptor = ga_metric.MetricDescriptor()
descriptor.type = "custom.googleapis.com/rs_metric_test"
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(f"Created {descriptor.name}.")

# 推送时间序列函数
def create_time_series(client, test_label_value, metric_value):
    series = monitoring_v3.TimeSeries()
    series.metric.type = "custom.googleapis.com/rs_metric_test"
    series.resource.type = "global"
    series.resource.labels["project_id"] = "你的实际项目ID"

    # 仅使用指标描述符中定义的标签
    series.metric.labels["TestLabel"] = test_label_value
    
    # 简化时间戳生成
    now = time.time()
    end_time = monitoring_v3.Timestamp(seconds=int(now), nanos=int((now - int(now)) * 10**9))
    interval = monitoring_v3.TimeInterval(end_time=end_time)
    point = monitoring_v3.Point(interval=interval, value={"double_value": metric_value})
    series.points = [point]
    
    # 使用正确格式的项目名称
    client.create_time_series(name=project_name, time_series=[series])
    print("time series created")

# 正确调用函数(参数数量匹配)
replay_metric_client = monitoring_v3.MetricServiceClient()
# 示例:传入TestLabel的值和要记录的指标数值
create_time_series(replay_metric_client, "test label for testing", 3.14)

额外排查步骤

  • 确认指标描述符存在:在Cloud Monitoring控制台的「指标库」中搜索custom.googleapis.com/rs_metric_test,检查是否存在且标签定义正确。
  • 检查权限:确保Cloud Function使用的服务账号拥有Monitoring Metric Writer角色(或包含monitoring.timeSeries.create权限的自定义角色)。
  • 等待数据延迟:自定义指标数据通常需要5-10分钟才能在UI中显示,不要立即查看。
  • 查看函数日志:在Cloud Function的日志页面搜索monitoring相关条目,排查是否有隐藏的权限或格式错误。

内容的提问来源于stack exchange,提问作者Rudolph Sargenti

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:23:28