搭好蜘蛛池之后,很多人习惯盯着入口页能不能打开、返回值对不对,却很少去看日志。实际运行中,入口页是否还在被蜘蛛访问、访问的是哪些 URL、返回了什么状态码,答案几乎都在 access log 里。日志不是用来数数的,而是用来判断入口页当前状态的。
先搞清楚你看到的日志是谁的
同一个入口页,可能同时存在几份日志:CDN 边缘节点的访问日志、源站 Web 服务器的日志、以及中间反向代理的日志。这三者的记录口径并不一致。
- CDN 日志记录的是真实访客和蜘蛛到边缘节点的请求,包含被缓存命中的请求,通常能看到完整 UA 和客户端 IP。
- 源站日志只记录回源请求,如果入口页被缓存了大量命中,源站日志里蜘蛛的记录会明显偏少。
- 代理日志可能把客户端 IP 写成上一跳的地址,如果不看 X-Forwarded-For,你看到的 IP 全是内网地址。
只拿源站日志判断蜘蛛来了多少,很容易得出错误结论。至少要确认自己看的是哪一层,以及 IP 字段是否已经被还原。
日志里真正值得关注的字段
日志格式各家不同,但几个字段是通用的:
- 时间戳:用来算抓取频次,也用来对齐你自己做过的改动时间点。
- 客户端 IP:用于判断来源分布,但要注意蜘蛛 IP 段会变动,反向解析比单看 IP 更可靠。
- 请求方法与 URL:确认蜘蛛抓的是入口页本身,还是被带到了参数页、404 页。
- 状态码:判断入口页是否对蜘蛛正常返回。
- 响应耗时:过长的耗时往往对应超时和抓取失败。
- User-Agent:识别蜘蛛类型,但 UA 可以伪造,只能作为参考。
- Referer:有时能看出蜘蛛是从哪条链接进来的。
状态码分布比单个请求更有价值
看一行日志意义不大,要看一段时间内的分布。入口页正常情况下,绝大多数请求应该是 200;如果 3xx 占比很高,说明跳转链路可能过长或者配置出了问题;如果 4xx 集中在某些 URL 上,说明这些地址已经被蜘蛛记住但已经失效;5xx 出现就值得单独排查,尤其是集中在某个时间段的情况。
需要提醒的是,蜘蛛遇到 5xx 通常会降低抓取频率,短期内日志里的访问量下降,未必是你改了什么东西造成的。
抓取频次和时间的读法
把日志按小时聚合,画一条访问量曲线,能看到不少东西:
- 曲线长期贴着零,说明入口页可能已经不被抓取,或者链接入口断了。
- 曲线突然抬升再迅速回落,往往是某次集中抓取后的自然衰减,不一定是好事也不一定是坏事。
- 曲线呈现固定的稀疏节奏,说明抓取预算有限,入口页在被低频巡检。
- 不同搜索引擎的曲线形态不同,混在一起看会被互相干扰,建议按 UA 或 IP 段分开统计。
几种常见的误读
- 把搜索引擎的预取、预览类请求当成正式抓取,误以为抓取量很大。
- 把 CDN 的健康检查、监控探针当成蜘蛛,因为它们的 UA 也可能长得像机器人。
- 只看总请求数,不看其中有多少是 404,导致对入口页质量判断偏高。
- 用日志里的访问量去推断收录量,这两者之间没有直接对应关系。
如果要用日志判断来源,反向 DNS 解析加 IP 归属核对比单看 UA 靠谱一些,但也只是提高准确度,并不能做到完全准确。
日志留存与轮转的实操建议
- 日志至少保留 30 天,方便做周对比;做趋势分析时保留 90 天更从容。
- 开启按天切割和压缩,避免单文件过大影响排查速度。
- 把入口页 URL 的日志单独筛出来存一份,分析时不用每次全量扫描。
- 改动入口页配置或模板时,在运维记录里标注时间,事后可以直接和日志曲线对齐。
- 对 5xx 和异常 UA 设置简单告警,比事后翻日志省力。
日志本身不会改善抓取,但它能让你在动手调整之前,先知道入口页现在到底处于什么状态。多数所谓的蜘蛛池异常,缺的不是技巧,而是一次认真的日志复盘。