站点日均请求两千万,Logpush 开了 adaptive sampling,控制台显示采样率 10%。导出的文件里 Googlebot 一天只有 1800 条,GSC 抓取统计写的是 1.9 万,两边差十倍,按日志整理的死链清单漏掉大半。

一开始怀疑是「导出按小时滚动,下载时只取了最后一个 part」,查了一圈,方向不对。

真正麻烦的地方在于,几个原因的现象几乎一样。adaptive sampling 按流量比例抽样,日志条数不能直接当请求数。还有一种是job 只订阅了 http_requests 数据集,其余请求根本不进这份文件。

少数情况下是字段里没有 ray_id,无法和源站日志做去重与回补。

先看 job 的采样配置与字段列表

curl -s "https://api.cloudflare.com/client/v4/zones/$ZONE/logpush/jobs/$JOB" -H "Authorization: Bearer $TOKEN"

接着按小时导出后用 ray_id 去重

zcat logs/*.gz | jq -r '.RayID' | sort -u | wc -l

然后用采样率还原量级而不是直接计数

SELECT count(*) * 10 AS est FROM cflogs WHERE ua LIKE '%Googlebot%';

末了关键目录改用源站日志对账

awk '{print $7}' access.log | grep -c '^/article/'

改完先别撤,确认这几项。用 ray_id 去重后估算的抓取量与 GSC 抓取统计落在同一量级,抽样三天内两边误差从十倍收到 15% 以内。

采样日志适合看趋势和分布,不适合做逐条死链清单,要精确计数只能回源站或关掉采样。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189