现场是这样的。GSC 抓取统计的峰值是每秒 40 次,源站 Nginx 的 QPS 面板同期只有 6,两边差了近七倍,排查半天怀疑统计造假。

中间走过弯路,把「统计里包含图片与静态资源抓取,它们不经过动态页面」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。GSC 的抓取速率是按分钟均值折算,短时间的突发会被放大;请求被 CDN 边缘直接命中缓存,源站只看到回源的那一小部分;日志只统计了主域名,静态资源域名是另一个独立的 server 块。

上来先按分钟统计蜘蛛请求的峰值

awk '{print substr($4,14,5)}' access.log | sort | uniq -c | sort -rn | head -5

区分动态页与静态资源的抓取占比

awk '$7 ~ /\.(css|js|png|jpg|webp)$/{s++} END{print s, NR}' access.log

剩下的就是核对 CDN 回源率与边缘命中率的差值

curl -sI https://www.example.com/ | grep -i -E 'cf-cache-status|x-cache'

恢复的判定其实很直接。把静态资源按分钟折算后两边的峰值差异缩到一倍以内,确认统计口径一致,后续按同一口径评估抓取预算。

这里还有个坑。抓取频次对不上时先统一口径,均值、峰值、含不含静态资源,三种算法能差出一个数量级。改动前把原配置备份一份,出问题能马上回滚,这比任何技巧都实用。

作者 9823189