咨询在Google Cloud Run Cron Job中推送自定义指标的方法
在Google Cloud Run Cron Job中推送自定义指标的方案
Cloud Run Job是一次性执行任务,没有持续运行的端点供Prometheus抓取,直接将自定义指标推送到Google Cloud Monitoring(原Stackdriver)是最优方案,无需额外配置推送URL,以下是具体实现步骤:
1. 配置IAM权限
给Cloud Run Job使用的服务账号添加Monitoring Metric Writer角色,确保任务有权限向Cloud Monitoring写入指标:
- 进入Cloud Run控制台,找到目标Job,查看其使用的服务账号
- 进入IAM控制台,找到该服务账号,添加角色
Monitoring > Monitoring Metric Writer
2. 使用官方客户端库推送指标
Google提供了多语言的Cloud Monitoring客户端库,直接在任务代码中集成即可,客户端会自动通过Cloud Run环境的应用默认凭据(ADC)完成认证,无需手动配置密钥。
Python示例
首先安装依赖:
pip install google-cloud-monitoring
在任务代码中添加指标推送逻辑:
import os import datetime from google.cloud import monitoring_v3 def push_custom_metric(): client = monitoring_v3.MetricServiceClient() project_id = os.environ.get("GOOGLE_CLOUD_PROJECT") project_name = f"projects/{project_id}" # 自定义指标类型(首次推送会自动在Cloud Monitoring中创建) metric_type = "custom.googleapis.com/my_job/balance_check_count" execution_id = os.environ.get("CLOUD_RUN_EXECUTION", "unknown") # 构造时间序列数据 series = monitoring_v3.TimeSeries() series.metric.type = metric_type series.resource.type = "cloud_run_job" series.resource.labels["job_name"] = "myjob-test-balance" series.resource.labels["execution_id"] = execution_id # 添加指标数值(以计数器为例,记录任务执行次数) point = monitoring_v3.Point() point.value.int64_value = 1 now = monitoring_v3.Timestamp() now.FromDatetime(datetime.datetime.now(tz=datetime.timezone.utc)) point.interval.end_time = now series.points.append(point) # 推送指标到Cloud Monitoring client.create_time_series(name=project_name, time_series=[series]) # 在任务核心逻辑执行完成后调用 push_custom_metric()
3. 自定义指标设计建议
- 指标类型:根据需求选择
gauge(记录瞬时值,比如余额数值)或counter(记录累计值,比如处理成功次数) - 标签维度:可以将
CLOUD_RUN_EXECUTION、CLOUD_RUN_TASK_INDEX等环境变量作为标签,方便后续在监控面板中筛选不同任务实例的数据
4. 验证指标推送结果
推送完成后,进入Cloud Monitoring控制台:
- 打开「指标资源管理器」
- 在指标列表的「自定义」分类下找到目标指标,即可查看推送的指标数据
内容的提问来源于stack exchange,提问作者Simson
相关产品推荐
相关产品推荐

