日志中首先要核对的是请求时间、请求URL、HTTP状态码、User-Agent、来源IP和响应字节数这六个字段。它们共同回答三个问题:谁来过、拿了什么、结果如何。缺少其中任何一个,抓取问题都只能靠猜。对多人协作的团队来说,还应额外记录日志格式版本和采集节点,否则同一份日志在不同人手里会得出不同结论。
在动手分析前,先把要核对的字段写进交接文档,明确每个字段的含义、来源和格式。常见字段及其用途如下:
time或timestamp:判断抓取频率、突发峰值和时段规律,注意时区是否统一。request_uri:确认被请求的具体路径,排除参数、大小写和结尾斜杠造成的重复。status:区分正常返回、重定向、客户端拒绝和服务端错误。user_agent:识别抓取来源,注意UA可被伪造,只能作为线索而非结论。remote_addr:判断来源IP段是否稳定,用于识别异常集中访问。body_bytes_sent:响应体积异常偏小时,往往意味着返回了错误页或空内容。这份清单要固定下来,并指定一人负责日志导出、一人负责结论复核。字段口径不一致是返工的主要来源。
建议按下面的顺序逐项检查,每一步都留下记录:
time,确认日志时间范围和时区,避免把不同时间段的请求混在一起比较。status,统计各状态码占比。大量404说明链接或路径有问题,大量5xx说明服务端不稳定,大量3xx要检查重定向链是否过长。user_agent和remote_addr,把来源分组,观察是否集中在少数IP或少数UA上。request_uri,找出被频繁请求但不应被抓取的路径,以及应被抓取却从未出现的路径。body_bytes_sent,对状态码正常但体积明显偏小的请求单独列出,人工抽查返回内容。最关键的一步是第三步:把来源分组后再看行为。只看总量容易误判,分组后常能发现某个来源在短时间内高频请求同一路径,或某个来源只抓首页不跟进内页。这直接决定后续是调整抓取规则还是排查服务端问题。
得出初步判断后,用两种方式验证。一是时间对比:取调整前后的两段日志,比较同一字段的分布是否变化。二是抽样复核:从异常记录中随机抽若干条,用状态码、响应体积和实际返回内容交叉确认。
需要区分“可能原因”和“已经定位的原因”。例如日志中出现大量403,可能是抓取规则限制,也可能是防火墙拦截或权限配置问题,不能仅凭状态码下结论。验证时要逐项排除,把已确认的原因和待确认的猜测分开记录。
同时注意边界:robots.txt中的抓取限制不等于可靠的索引移除,站点地图也不保证收录。日志只能反映请求行为,不能直接证明页面已被索引或获得排名。
把日志字段清单、分析脚本和结论模板纳入版本管理。每次调整抓取规则后,在固定周期内复查同一组字段,观察是否出现新的异常模式。交接时只交付三样东西:字段说明、本次分析结论、待跟进项。这样下一轮排查不必从零开始。
下一步建议:从现有日志中导出最近一段时间的记录,按上述六个字段做一次分组统计,把结果填入统一模板,再与团队确认哪些异常需要优先处理。