先给结论:不要强行把两份日志的时间改成一致,而应选一条能同时被两边记录的请求标识作为锚点,用时间偏移量对齐事件序列,再判断爬虫控制规则是否按预期生效。抓取日志通常记录请求到达边缘节点或Web服务器的时刻,应用日志记录请求进入业务逻辑或写库的时刻;两者相差几十毫秒到数秒都可能正常,差出固定值往往说明中间有缓存、队列或时区处理。
第一种是固定偏移。比如抓取日志里同一URL的时间总比应用日志早若干秒,且这个差值稳定。常见解释是请求先经过CDN或反向代理,应用侧在排队或鉴权后才落日志。第二种是随机错位。同一批请求在两边顺序不同,差值忽大忽小,常见解释是应用侧异步写日志、多实例时钟未同步,或抓取日志按边缘节点本地时间记录而应用日志用统一UTC。
这两种情况对应的处理动作完全不同。固定偏移适合先测偏移量再对齐;随机错位必须先把时间基准统一,否则对齐后的序列仍然不可信。
如果两份日志里都有可关联的字段,优先用它。常见可用字段包括:
实际操作是:从抓取日志中挑一条明确由目标爬虫发出的请求,记下它到达边缘的时间,再在应用日志里用同一路径和状态码搜索,找到对应记录,计算两者差值。重复十到二十条,观察差值是稳定还是发散。这一步的结果直接决定下一步:差值稳定就可以用该偏移量批量对齐;差值发散就必须先查时钟同步和异步写入,而不是继续对齐。
假设某站点要下线一个旧栏目,但保留其中仍被外部引用的少量页面。运维在robots.txt里对旧栏目路径加了禁止抓取,同时保留站点地图中的部分旧URL。随后发现抓取日志显示爬虫仍频繁访问这些路径,而应用日志里对应请求很少。
此时不能直接断定robots.txt没生效。先看两份日志的时间差:如果应用日志普遍比抓取日志晚数秒,且访问集中在少数几个URL,那么更可能是边缘缓存命中,请求没有进入应用层,所以应用日志少。区分证据是:查看抓取日志中这些请求的响应状态码和响应字节数,若状态码为缓存命中类且字节数与缓存副本一致,说明请求被边缘拦截;若状态码为正常业务响应但应用日志确实没有,才需要检查应用侧日志采样或写入失败。
这个判断会影响下一步动作。若是缓存命中,处理对象是缓存刷新策略和边缘规则;若是应用日志缺失,处理对象是日志采集链路。两者都不是继续修改robots.txt能解决的。
时间对齐只是手段。对齐完成后,应按同一锚点回看三类事件:目标爬虫是否仍到达、到达后是否进入应用、进入后返回什么状态。只有这三步都能对应上,才能判断某条爬虫控制规则的实际效果。需要提醒的是,robots.txt的抓取限制不等于可靠的索引移除,站点地图也不保证收录;如果旧内容需要真正退出索引,抓取控制和对齐分析只能作为排查依据,不能替代移除流程本身。
另外,请求量或抓取量某段时间归零,不能单独证明规则生效。缓存、调度变化、外部链接减少、爬虫自身策略调整都可能造成同样现象。对齐日志的价值在于把这些可能逐一排除,而不是用一个时间差直接下结论。