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

如何统计Google GCS存储桶文件的访问与下载次数

GCS存储桶文件访问/读取/下载次数统计全流程

1. 配置Logging Sink的日志包含过滤器(inclusion filter)

创建日志导出Sink时,在「包含过滤器」输入框填入以下规则,即可只导出GCS访问相关的审计日志,不会混入其他无关日志:

resource.type="gcs_bucket"
logName="projects/替换为你的GCP项目ID/logs/cloudaudit.googleapis.com%2Fdata_access"
protoPayload.serviceName="storage.googleapis.com"
protoPayload.methodName=("storage.objects.get" OR "storage.objects.list")

# 仅统计单个指定存储桶时,取消下一行注释并替换为实际桶名
# resource.labels.bucket_name="your-target-bucket-name"

# 需要排除GCP内部服务自动发起的访问请求时,添加下一行规则
# protoPayload.callerSuppliedUserAgent!~"google-internal"

过滤器规则说明

  • 所有GCS对象的读取、下载、文件列表查询操作,都会记录在cloudaudit.googleapis.com/data_access(URL编码后为cloudaudit.googleapis.com%2Fdata_access)数据访问审计日志中,不会和管理员操作、系统事件类日志混淆
  • storage.objects.get对应单文件的读取、下载行为,storage.objects.list对应目录/文件列表的访问请求,不需要统计列表访问量直接删除OR后面的条件即可
  • Sink创建完成后仅会同步新产生的日志,不会回溯导出创建时间点之前的历史访问记录,需要统计历史数据请提前部署Sink
  • 创建Sink时目标位置选择BigQuery,按需选择已有数据集或新建数据集即可,控制台操作时会自动给Sink的服务账号授予BigQuery写入权限,命令行创建需手动配置权限。

2. BigQuery日志查询统计

Sink创建完成后,GCS访问日志会实时写入BigQuery对应数据集下的审计日志表,默认按日期生成分表,可直接用以下SQL完成不同维度的统计:

场景1:统计指定周期内各文件的总访问/下载次数

SELECT
  -- 提取文件完整路径
  REPLACE(protoPayload.resourceName, "projects/_/buckets/替换为你的桶名/objects/", "") AS file_path,
  COUNT(*) AS total_access_count,
  -- 统计访问的独立用户数
  COUNT(DISTINCT protoPayload.authenticationInfo.principalEmail) AS distinct_user_count
FROM
  `你的GCP项目ID.你的BigQuery数据集ID.cloudaudit_googleapis_com_data_access_*`
WHERE
  -- 限定统计的日期范围,后缀格式为YYYYMMDD
  _TABLE_SUFFIX BETWEEN '20240101' AND '20240630'
  AND protoPayload.methodName = 'storage.objects.get'
  -- 过滤断点续传的分片请求,避免重复计数
  AND protoPayload.request.range IS NULL
GROUP BY
  file_path
ORDER BY
  total_access_count DESC

场景2:按天统计下载量趋势

SELECT
  DATE(timestamp) AS access_date,
  COUNT(*) AS daily_download_count
FROM
  `你的GCP项目ID.你的BigQuery数据集ID.cloudaudit_googleapis_com_data_access_*`
WHERE
  _TABLE_SUFFIX BETWEEN '20240101' AND '20240630'
  AND protoPayload.methodName = 'storage.objects.get'
  AND protoPayload.request.range IS NULL
  AND resource.labels.bucket_name = '你的目标桶名'
GROUP BY
  access_date
ORDER BY
  access_date ASC

查询注意事项

  • 如果提示表不存在,先到BigQuery控制台确认自动生成的审计日志表实际名称,部分区域的表命名可能存在微小差异,替换为实际表名即可
  • 需要区分访问来源(控制台/gsutil/API调用/第三方客户端),可以新增protoPayload.callerSuppliedUserAgent维度分组统计
  • 配置前先确认项目级审计日志设置中,GCS服务的「数据读取」类审计日志处于开启状态,否则不会生成对应访问日志,Sink无法导出数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 14:21:13