在 AWS 控制台给 CloudFront distribution 开启了 Standard Logging,配置了 S3 bucket 作为日志目标,等了 24 小时——S3 里什么都没有。
排查了一遍:
cloudfront.amazonaws.com 写入就是没有日志文件。
查 AWS 文档和计费页面后发现:CloudFront Standard Logging(标准日志)在 Free Tier 下不生效。
免费套餐包含:
但不包含:
控制台不会报错,也不会提示「此功能需要付费」——它就默默不产生日志。这是个信息不透明的体验问题,坑过很多人。
最省事的方案。不需要 AWS 权限,不需要 S3,在页面里插入一段 JS beacon:
<!-- Cloudflare Web Analytics -->
<script defer src='https://static.cloudflareinsights.com/beacon.min.js'
data-cf-beacon='{"token": "YOUR_TOKEN"}'></script>
<!-- End Cloudflare Web Analytics -->
在 [Cloudflare Dashboard](https://dash.cloudflare.com) → Web Analytics 免费开通,获取 token,粘贴进去就完了。
优点:完全免费、隐私友好(无 cookie)、实时数据、支持 PV/UV/来源/地区/设备分类。
缺点:JS 被 AdBlock 拦截时不计入(通常影响 5-15% 的流量)。
只记录直接访问 S3 的请求(不经过 CloudFront 的那部分):
# 开启 S3 Server Access Logging
aws s3api put-bucket-logging \
--bucket your-site-bucket \
--bucket-logging-status '{
"LoggingEnabled": {
"TargetBucket": "your-log-bucket",
"TargetPrefix": "s3-access/"
}
}'
注意:通过 CloudFront 的请求不会出现在这里,只有直接 S3 URL 访问才记录。对多数场景意义不大。
在 EC2/Lambda 上跑一个极简 HTTP 服务,页面请求一个 1x1 透明 GIF,服务器记录来源信息。成本低,完全自控,但需要维护代码。
直接用 Cloudflare Web Analytics。5 分钟配好,永久免费,功能够用,不需要折腾 AWS 权限。
除非你有严格的「所有流量数据必须在 AWS 内」的要求,否则 CloudFront Standard Logging 在免费套餐下就是个摆设,不值得花时间排查。