基于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
相关产品推荐
相关产品推荐

