先给结论:不要试图把两份日志的时间戳改成一致,而要把它们转换成同一个事件时钟,再判断差异是否稳定。若偏移量恒定,通常说明其中一侧的时区、写入时机或时钟同步有问题;若偏移量随请求量变化,则更可能是缓冲、批量落盘或异步队列造成的,此时应优先核对日志管道的写入路径,而不是修改 robots txt 文件本身。
抓取日志记录的是爬虫请求到达边缘节点或源站的时刻,应用日志记录的是业务代码处理该请求的时刻。两者天然存在间隔,所以“不一致”本身不是故障。真正需要区分的是三种情况:
判断方法很直接:抽取同一时间段内可唯一对应的请求,比如带相同请求标识的抓取记录,计算两组时间戳的差值,再看差值的分布。如果中位数稳定而尾部很长,属于第二种;如果整体平移,属于第一种。这个动作决定了下一步是改配置还是改管道,而不是先去动 robots txt 规则。
时间窗口匹配在偏移未知时几乎必然出错。更稳妥的做法是找到两侧都存在的关联字段,常见的有请求 ID、User-Agent 加路径加秒级时间的组合,或源站访问日志中的上游请求头。若应用侧没有记录可关联字段,可临时在边缘层注入一个请求头,让应用日志把它写入结构化字段,再重新采集一小段样本。
假设某站点在边缘日志中看到 GET /product/123 的时间是 10:00:00,应用日志中同一路径的记录是 10:00:07,且当天所有样本都稳定相差 7 秒。这提示应用侧记录的是处理完成时间,而边缘侧记录的是接收时间,中间有固定的排队与处理耗时。此时保留两份日志、在分析时统一减去该偏移即可,不需要合并存储。反过来,如果偏移量在 0 到 30 秒之间随机分布,就应检查应用是否按批写入日志,或是否经过消息队列后才落盘。
原始日志应保持不可变,便于回溯。对齐动作发生在查询或分析层:在日志查询语句中为其中一侧加上固定偏移,或建立一个视图把两侧归一到同一时区。适用前提是偏移量经过多天抽样验证稳定,且没有跨夏令时切换。若业务所在地区实行夏令时,固定偏移会在切换日失效,此时应改为按时间戳中的时区字段动态换算,而不是写死一个秒数。
如果偏移不稳定,保留两份日志但不要强行对齐,改为分别回答不同问题:抓取日志用于判断爬虫是否到达、频率如何、是否被 robots txt 规则拦截;应用日志用于判断请求是否真正进入业务逻辑、是否返回了有效内容。两者回答的问题不同,强行合并反而会掩盖真实瓶颈。
出现以下条件时,继续对齐两份日志的投入产出比会明显下降:应用侧日志采样率很低,无法与抓取日志形成足够对应样本;两侧都缺少稳定关联字段,且短期内无法增加埋点;或者业务关注点已经从“爬虫是否抓取”转向“页面是否被索引”,此时抓取与应用日志的时间关系不再是关键证据。
退出不等于放弃排查,而是换用其他证据链:检查服务端返回状态码与响应体长度是否正常,检查渲染后的内容是否包含目标信息,检查 robots txt 规则是否误伤了需要被抓取的路径。需要提醒的是,robots txt 的抓取限制不等于可靠的索引移除,站点地图也不保证收录,因此日志对齐只能说明抓取侧的行为,不能单独证明索引结果。
完成这四步后,如果差异仍然无法解释,再考虑是否存在边缘节点与源站之间的时钟漂移,或同一请求被多次记录。此时应优先核对基础设施的时间同步状态,而不是继续调整 robots txt 文件中的规则。