时间不一致通常不是“谁记错了”,而是两台机器、两层时间基准或两种事件定义造成的。要判断该不该改代码、改日志配置还是改排查方向,先确认两件事:日志里的时间戳是事件发生时间还是写入时间,以及两侧是否使用同一时区与同一时钟源。
抓取日志里的时间,可能是请求到达服务器的时间,也可能是爬虫程序记录请求发起的时间;应用日志里的时间,可能是业务逻辑开始处理的时间,也可能是日志框架落盘的时间。两者相差几毫秒到几秒都属正常,但若相差数分钟甚至数小时,就不能用“网络慢”解释。
一个可操作的动作是:在应用入口处额外记录一个请求标识,并把这个标识同时写进抓取侧和应用侧。这样对齐事件时,不再依赖时间戳本身,而是靠标识把同一请求的两条记录配对。配对成功后,再比较两侧时间差,才能判断是时钟偏移还是处理延迟。
如果同一请求在抓取侧记录为 10:00:00,在应用侧记录为 10:00:07,且这个差值在多条记录上稳定出现,那么更可能是两台机器没有同步到同一时间源,或者其中一台的时区设置与另一台不同。固定偏移的特征是差值方向一致、幅度接近。
如果差值时大时小,高峰期拉大、低峰期缩小,那么更可能是抓取侧记录的是请求发出时刻,应用侧记录的是请求进入业务逻辑或写日志的时刻,中间夹着排队、连接建立或中间层转发。这类差值的特征是方向一致但幅度不稳定。
能区分两者的关键证据是:把同一请求标识配对后,观察时间差的分布。若差值集中在某个固定值附近,优先检查系统时间同步与时区配置;若差值随请求量或处理耗时波动,优先检查日志打点位置和中间层耗时。
执行上述任一步后,如果固定偏移消失,说明问题在时钟配置;如果差值波动仍然存在,说明问题在打点位置或中间层,下一步应继续拆分处理链路,而不是继续调整时间同步。
假设抓取侧记录请求 A 的时间为 09:59:58,应用侧记录同一请求的时间为 10:00:05。若仅看时间,容易误判为应用侧延迟了 7 秒。但若两侧都记录了请求标识 A,配对后发现该请求在应用侧实际进入业务逻辑的时间是 09:59:59,写日志时间是 10:00:05,那么真正需要排查的是日志写入环节,而不是抓取或网络。
这个例子的前提是请求标识在两侧都能稳定传递且不重复。若标识在中间层被丢弃或重写,配对就会失败,此时应先恢复标识传递,再谈时间对齐。
确认是时钟偏移后,统一时间源和时区格式即可,不需要改动抓取或应用逻辑。确认是打点位置差异后,应把日志打点移到更接近事件发生的位置,或在日志中同时记录多个阶段的时间。确认是中间层耗时后,应把中间层也纳入打点范围,而不是只对比两端时间。
需要留意的是,robots.txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录。时间对齐解决的是排查依据问题,不是收录结果问题。对齐完成后,应重新用同一请求标识验证一次,确认时间差已落在可解释范围内,再继续判断抓取与索引的其他环节。