先别急着改服务器时间,也不要直接认定“抓取没来过”。抓取日志与应用日志时间不一致时,正确的做法是先判断两台机器或两个日志源是否处在同一时间基准上,再把同一请求的多个时间戳归并成一条事件记录。只有对齐之后,才能回答“这次抓取是否到达应用层”这类问题。下面用两种不同条件说明该选哪种对齐方式,以及对齐后下一步怎么做。
把同一批请求在两个日志里的时间戳相减,观察差值分布。如果差值集中在一个固定值附近,例如都差几十秒或几小时,通常是时区设置、时钟同步或日志写入格式不同造成的固定偏移。如果差值忽大忽小、甚至正负交替,那更可能是两台机器时钟各自漂移,或者日志缓冲、异步写入导致的延迟。
这一步的判据是差值本身,不是“哪台机器看起来更准”。固定偏移可以用统一换算修正;随机漂移不能靠加减一个常数解决,必须回到时间同步机制上。假设某次比对中,差值大多落在同一秒数附近,只有少量请求差异明显,那这批少量请求更值得单独看,而不是把整段日志都平移。
当偏移稳定时,选择“以应用日志为基准、对抓取日志做换算”。动作是确认抓取侧记录的是 UTC 还是本地时间,再在比对脚本里统一转成同一时区。结果会直接影响下一步:换算后如果请求能一一对应,说明抓取确实到了应用层,问题可能出在后续处理或索引环节;如果换算后仍对不上,才需要怀疑请求根本没到达应用。
这里要留一个例外:如果抓取日志只记录到秒,而应用日志精确到毫秒,同一秒内多个请求会挤在一起,单靠时间无法唯一匹配。此时应改用请求标识、URL 加时间窗口等辅助字段归并,而不是硬按秒对齐。
当偏移不稳定时,不要先修时间,而是选择“用事件键把两侧记录拼起来”。可用的键包括请求的 URL、方法、来源标识,以及一个落在合理窗口内的时间范围。动作是:给每条记录生成一个由这些字段组成的键,再在两侧做匹配。结果会告诉你哪些请求只在抓取侧出现、哪些只在应用侧出现。前者可能被拦截或未到达,后者可能是应用侧的内部请求或缓存命中。
如果两侧都没有稳定可用的键,那就先补日志字段,再谈对齐。这不是拖延,而是因为没有共同标识时,任何时间换算都只是猜测。
多个角色对“这次抓取是否来过”有不同理解时,争论往往卡在各自看的是不同日志。把分歧拆成可核对的项目,比反复解释更有效:
这些项目逐条填完后,原本“来过还是没来过”的争论会变成“哪几条记录在哪一侧缺失”。下一步动作也随之明确:如果是抓取侧缺失,去看抓取配置和拦截规则;如果是应用侧缺失,去看请求进入应用前的链路。
时间对齐只解决“事件是否对应”,不等于证明收录状态。即使确认某次抓取到达了应用层,也不能据此断定页面会被收录。robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。抓取日志里请求数下降或某段时间归零,同样不能单独证明处理正确,它也可能是抓取调度变化、日志轮转或采集范围调整造成的。
如果对齐后要判断收录,应回到搜狗收录查询的实际结果,并把查询结果与对齐后的事件记录分开记录。两者是不同层面的证据,混在一起会让下一次排查重新陷入分歧。
每次遇到时间不一致,先做这个动作:取同一时间窗内两侧各若干条记录,算出时间差分布,再决定是统一换算还是改用事件键。这个动作的结果决定了后续是修时间同步,还是补请求标识。若分布显示固定偏移,就换算后重新比对;若分布散乱,就停止在时间上纠缠,转去建立事件键。例外情况是两侧连 URL 都无法对应,这时应先确认比对的是不是同一批请求,而不是继续调时间参数。
把这一步做完,再进入收录判断,才不会把时间误差误读成抓取或索引的结论。