先给有条件的结论:只有当两台服务器使用同一时间基准、且抓取日志记录的是请求到达时刻时,才能用时间戳直接对齐抓取事件与应用事件;否则应先做时区与时钟偏移校正,再用请求标识关联。删除百度缓存后,若你只靠日志时间比较,规模化样本里出现例外几乎是必然的。
抓取日志通常记录的是百度蜘蛛请求到达Web服务器的时刻,应用日志记录的是业务逻辑开始或结束处理的时刻。两者之间隔着反向代理、负载均衡、排队和超时重试。即使时间戳看起来只差几百毫秒,也可能来自不同的处理阶段。
一个可操作的判断方法:在抓取日志中找请求ID、URL、User-Agent和响应状态,在应用日志中找同一请求ID或同一URL的进入时间。如果请求ID能贯通两条日志,对齐应以ID为主、时间为辅;如果请求ID在代理层被丢弃,才退回到时间窗口匹配。
先检查抓取日志与应用日志是否都使用UTC,或者是否都使用同一地区时区。若一个用UTC、另一个用本地时间,相差可能正好是整小时偏移,看起来像“抓取比应用早了一小时”。
再检查NTP同步状态。两台机器如果各自与不同时间源同步,偏移可能在几十毫秒到数秒之间波动。此时用固定偏移量校正只能解决部分样本,不能覆盖全部。
实际操作:先取一小段日志,找出同一请求在两边的记录,计算时间差的分布。如果差值稳定且接近某个整数分钟或整小时,优先怀疑时区配置;如果差值随机波动,优先怀疑时钟同步或处理链路延迟。
个别样本对齐成功,不代表可以照搬到全量日志。以下边界会让时间对齐失效:
一个反例:假设某站点抓取日志显示蜘蛛在10:00:00访问了某URL,应用日志显示该URL在10:00:03开始处理。如果只看时间,会认为应用处理滞后3秒。但如果应用日志记录的是队列出队时间,而抓取日志记录的是代理转发时间,这3秒可能只是排队等待,并非处理异常。此时用时间差判断“抓取后应用没有及时响应”就是错误结论。
先不要急着全量匹配。取一天中访问量较低的一小时日志,按以下顺序处理:
完成这一步后,你会得到一张“可对齐样本”和“不可对齐样本”的清单。下一步动作取决于不可对齐样本的比例:如果比例很低,可以只对可对齐样本做删除百度缓存后的抓取行为分析;如果比例很高,说明日志链路本身缺少关联字段,应先补请求ID透传,再谈时间对齐。
删除百度缓存本身不改变日志记录方式,但它会改变抓取频率和URL集合。对齐事件的目的不是证明缓存已删除,而是确认抓取请求是否真正到达了应用层。若两条日志无法对齐,任何基于时间的因果判断都不成立。