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

Cloud Functions删除log-based metric时报指标被修改错误如何解决

报错原因
  • 直接遍历client_metric.list_metrics()返回的懒加载迭代器执行删除是核心诱因:该迭代器采用分页拉取逻辑,不会一次性拉取全量指标生成本地快照。遍历过程中执行的删除操作会修改远程指标集合的版本,后续分页请求触发API的一致性校验,就会抛出FAILED_PRECONDITION状态码,提示资源在请求过程中被修改。
  • 次要触发场景为GCP监控API的内置一致性延迟:log-based metric的状态变更存在毫秒级的后台同步窗口,删除请求刚好命中同步窗口时也会触发该冲突。
解决方案
  • 先全量拉取指标生成本地快照,再遍历执行删除,避免迭代过程中触发远程分页请求。代码修改示例:
# 先拉取所有指标到本地列表,切断迭代和远程API的动态关联
metrics = list(client_metric.list_metrics())
for metric in metrics:
    if metric.name not in item_list:
        metric.delete()
        print('delete {}'.format(metric.name))
  • 针对FailedPrecondition异常增加指数退避重试逻辑,适配API侧的同步延迟,示例如下:
from google.api_core.exceptions import FailedPrecondition
import time

def delete_metric_with_retry(metric, max_retry=3):
    retry_count = 0
    while retry_count < max_retry:
        try:
            metric.delete()
            return True
        except FailedPrecondition:
            retry_count +=1
            time.sleep(2 ** retry_count) # 指数退避等待
    raise Exception(f"删除指标{metric.name}重试{max_retry}次后仍失败")

# 调用逻辑
metrics = list(client_metric.list_metrics())
for metric in metrics:
    if metric.name not in item_list:
        delete_metric_with_retry(metric)
        print('delete {}'.format(metric.name))
  • 排查是否存在其他进程、定时任务同时操作同项目下的log-based metric,避免并发修改引发的冲突。

内容的提问来源于stack exchange,提问作者Simon Breton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 13:36:03