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

基于BigQuery表信息配置Cloud Monitoring未修改告警

用Cloud Monitoring实现BigQuery表未修改时的告警

这里提供两种可行方案,你可以根据自身需求选择:

方案一:基于自定义指标监控表最后修改时间

1. 定期查询表的最后修改时间

通过BigQuery的系统视图获取目标表的最后修改时间,执行以下SQL:

SELECT last_modified_time
FROM `[你的项目ID].[目标数据集ID].INFORMATION_SCHEMA.TABLES`
WHERE table_id = '[目标表名]'

2. 配置自定义指标上报

用Cloud Functions + Cloud Scheduler定期将查询结果上报到Cloud Monitoring:

  • 创建Cloud Function,示例Python代码如下(需替换占位符):
    import time
    from google.cloud import bigquery
    from google.cloud import monitoring_v3
    
    def report_table_modified_time(event, context):
        # 初始化客户端
        bq_client = bigquery.Client()
        monitoring_client = monitoring_v3.MetricServiceClient()
        project_id = "[你的项目ID]"
        dataset_id = "[目标数据集ID]"
        table_id = "[目标表名]"
    
        # 查询最后修改时间
        query = f"""
            SELECT last_modified_time
            FROM `{project_id}.{dataset_id}.INFORMATION_SCHEMA.TABLES`
            WHERE table_id = '{table_id}'
        """
        result = bq_client.query(query).result()
        last_modified_ts = next(result).last_modified_time.timestamp()
    
        # 构造时间序列指标
        project_name = f"projects/{project_id}"
        series = monitoring_v3.TimeSeries()
        series.metric.type = "custom.googleapis.com/bigquery/table_last_modified"
        series.resource.type = "bigquery_dataset"
        series.resource.labels["dataset_id"] = dataset_id
        series.resource.labels["project_id"] = project_id
        point = series.points.add()
        point.value.double_value = last_modified_ts
        interval = monitoring_v3.TimeInterval()
        interval.end_time.seconds = int(time.time())
        point.interval = interval
    
        # 上报到Cloud Monitoring
        monitoring_client.create_time_series(name=project_name, time_series=[series])
    
  • 用Cloud Scheduler设置定时任务(比如每小时执行一次),触发该Cloud Function,确保指标持续更新。

3. 创建告警策略

进入Cloud Monitoring控制台,按以下步骤配置:

  • 新建告警策略,选择自定义指标custom.googleapis.com/bigquery/table_last_modified
  • 配置条件表达式,以“超过24小时未修改”为例:
    fetch bigquery_dataset
    | metric 'custom.googleapis.com/bigquery/table_last_modified'
    | filter (resource.dataset_id == "[目标数据集ID]")
    | align rate(1h)
    | condition val() < (time() - 86400)
    
  • 添加通知渠道(邮件、Slack等),设置告警名称和描述

方案二:基于BigQuery审计日志告警

如果不想维护自定义指标,可通过监控审计日志判断表是否被修改:

1. 启用BigQuery审计日志

在Cloud Console的「日志路由器」中,确保BigQuery的审计日志被导出到Cloud Logging。

2. 创建基于日志的告警

  • 进入Cloud Monitoring控制台,新建告警策略,选择「基于日志的指标」
  • 配置日志过滤器,筛选目标表的修改操作(LOAD/QUERY/COPY/DML等):
    resource.type="bigquery_dataset"
    resource.labels.dataset_id="[目标数据集ID]"
    protoPayload.methodName="google.cloud.bigquery.v2.JobService.InsertJob"
    protoPayload.serviceData.jobInsertRequest.job.configuration.tableReference.tableId="[目标表名]"
    protoPayload.serviceData.jobInsertRequest.job.configuration.type:("LOAD" OR "QUERY" OR "COPY" OR "DML")
    
  • 设置告警条件为「指定时间窗口内无匹配日志」(比如24小时)
  • 配置通知渠道和告警详情即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 16:42:44