报错是这么冒出来的。巡检和监控脚本大量用 HEAD 探活 日志里 HEAD 占三成 做抓取分析时把这些也当成蜘蛛访问 得出蜘蛛一天来 20 万次的结论 实际 GET 只有 6 万 差点因为误判去扩容

中间走过弯路,把「部分 CDN 把 HEAD 也记成一次请求」当成主因,改完现象没变。

真正麻烦的地方在于,几个原因的现象几乎一样。分析脚本没有区分请求方法。另一种情况是监控探活和蜘蛛抓取共用同一份日志。

不容易想到的是,统计口径没写清楚 看的人默认全是抓取。

先按请求方法拆开统计

awk '{print $6}' access.log | sort | uniq -c

只统计 GET 的蜘蛛请求

awk '$6~/GET/ && $0~/Baiduspider/' access.log | wc -l

接着把监控探活挪到独立 server 块

location = /health { access_log off; return 200; }

等前面都确认过,再对比 GET 条数与抓取后台

python crawl_stat.py --method GET

别只看报错消失,验证要多做一步。GET 统计量与抓取后台吻合 HEAD 不再混入 扩容决策基于真实数字。

日志统计第一步永远是按方法过滤 不区分 GET 和 HEAD 的曲线只能当噪音看。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189