先给结论:抓取日志和应用日志的时间戳通常不在同一时间基准上,直接比对会得出错误的事件顺序。对齐的正确做法是先把两边时间换算到同一时区与同一时间源,再按请求唯一标识匹配,最后才判断先后。下面用一个假设情境把决策过程走一遍。
假设你正在让一个旧接口退出,但保留其中仍有价值的历史查询能力。旧系统只记录应用日志,时间戳取的是服务器本地时间;新的抓取入口记录抓取日志,时间戳取的是UTC。某天你看到抓取日志显示某URL在10:00被抓取,应用日志显示同一请求在09:58被处理,于是怀疑抓取发生在处理之前,逻辑上不可能。这个矛盾本身就是线索:先别下结论,先确认两边的时间基准。
动作一:分别查两套系统的时区配置和时间同步方式。如果应用服务器是UTC+8且未做时区标注,抓取系统是UTC,那么09:58本地时间实际等于01:58 UTC,换算后抓取发生在处理之后,矛盾消失。这一步的结果直接决定下一步:如果换算后顺序合理,问题只是展示层;如果换算后仍冲突,才需要继续查请求匹配。
把两边日志的时间戳都换算成UTC,并在日志里补上明确的时区偏移,而不是只写一个裸时间。判断依据是:同一台机器上,系统时间与日志时间是否一致;跨机器时,各机器是否使用同一时间源。若两边时间源不同,即使时区相同,也可能存在秒级漂移,此时应按分钟粒度比较,不要按秒下结论。
时间只能用来缩小范围,不能用来确定同一条请求。优先找请求ID、trace ID、URL加时间窗口的组合。如果应用日志没有请求ID,只能用URL加一个时间窗口去近似匹配,这时要把窗口设得比最大时间漂移更宽,并明确这是近似而非精确对应。
抓取日志记录的是“发起了抓取”,应用日志记录的是“处理了请求”。两者之间还可能有排队、重试、缓存命中。假设抓取日志显示一次抓取,应用日志显示两次处理,合理解释之一是重试,而不是两次抓取。要区分这一点,需要看应用日志里两次处理的入参是否相同、间隔是否接近重试策略。
注意,请求量或抓取量归零不能单独证明某一步做对了。它还有别的解释:日志轮转、采样、采集管道中断、入口切换。要排除这些,至少核对采集端是否仍在写入,以及时间窗口是否覆盖了切换点。
回到假设情境:如果对齐后确认旧接口仍在被有效使用,就不应直接关闭,而应保留其读取能力,只停掉写入或重复提交路径。判断依据不是抓取日志的数量,而是应用日志里是否仍有成功处理的业务请求。
具体动作:先按URL分组统计一段时间内的成功处理次数,再决定保留、重定向还是下线。这一步的结果影响下一步——保留的URL需要继续纳入日志监测,下线的URL则要确认不再有应用层调用,而不是只看抓取层是否安静。
如果涉及robots.txt限制,要记住它约束的是抓取行为,不等于可靠的索引移除;站点地图也不保证收录。这些规则和对齐日志是两件事,不要用其中一件的结果去推断另一件。
按这个顺序走,时间不一致就不再是障碍,而是一条能指向具体环节的证据。