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

如何基于GCP DNS复刻Cloudflare风格访客分析(无需迁移域名)

仅用GCP DNS复刻访客分析功能的实现指引

1. 开启Cloud DNS查询日志

前提是你的域名已托管在GCP Cloud DNS,接下来开启日志记录:

  • 进入GCP控制台的Cloud DNS页面,选中目标托管区域
  • 编辑区域的日志配置,启用查询日志,将日志发送至Cloud Logging

2. 导出DNS日志到BigQuery

Cloud Logging的日志无法直接完成复杂聚合分析,需导入BigQuery:

  • 打开Cloud Logging的日志浏览器,筛选resource.type="dns_query"类型的日志
  • 创建导出sink,目标选择BigQuery数据集,设置自动同步频率(比如每小时)
  • 确保BigQuery数据集具备Cloud Logging的写入权限

3. 分析日志获取核心维度

3.1 统计月度独立访客

用DNS日志中的client_ip标识访客,但需排除公共DNS、缓存服务器的IP:

  • 先整理公共DNS的IP段列表(如8.8.8.0/24、1.1.1.0/24等)存入BigQuery表
  • 执行BigQuery查询计算月度独立访客:
SELECT
  DATE_TRUNC(DATE(timestamp), MONTH) AS month,
  COUNT(DISTINCT client_ip) AS monthly_unique_visitors
FROM
  `你的项目ID.你的数据集ID.dns日志表`
WHERE
  NOT client_ip IN (SELECT ip FROM `你的项目ID.你的数据集ID.公共DNS_IP表`)
  -- 替换为你的实际域名,统计相关查询
  REGEXP_CONTAINS(name, r'^.*\.your-domain\.com\.?$')
GROUP BY
  month
ORDER BY
  month DESC

3.2 按国家统计访客

将客户端IP映射到国家,需关联GeoIP数据集:

  • 在BigQuery导入免费版MaxMind GeoIP2数据集
  • 关联日志与GeoIP数据的查询示例:
SELECT
  DATE_TRUNC(DATE(timestamp), MONTH) AS month,
  geo.country_name AS country,
  COUNT(DISTINCT client_ip) AS unique_visitors_by_country
FROM
  `你的项目ID.你的数据集ID.dns日志表`
LEFT JOIN
  `你的项目ID.你的数据集ID.geoip2_city` AS geo
ON
  NET.SAFE_IP_FROM_STRING(client_ip) BETWEEN geo.network_start_ip AND geo.network_end_ip
WHERE
  NOT client_ip IN (SELECT ip FROM `你的项目ID.你的数据集ID.公共DNS_IP表`)
  REGEXP_CONTAINS(name, r'^.*\.your-domain\.com\.?$')
GROUP BY
  month, country
ORDER BY
  month DESC, unique_visitors_by_country DESC

关键注意事项

  • DNS日志仅记录域名解析请求,无法确认用户是否实际访问网站,数据会比真实访客数偏高
  • ISP、路由器的缓存会导致大量用户查询无法到达你的Cloud DNS,数据会偏低,可结合缓存命中率估算修正
  • 必须严格过滤公共DNS、企业缓存服务器IP,否则会将这类服务器误统计为独立访客,导致数据失真
  • 控制成本:BigQuery的存储与查询费用随日志量增长,建议设置日志保留期限,用分区表优化查询效率

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:45:17