先给结论:不要试图把两套日志的时间戳改成同一个值,而要先判断差异是“时钟偏移”还是“链路延迟”。前者是两台机器对同一时刻的读数不同,后者是同一台机器上事件被记录的时刻不同。百度索引查询中看到抓取量忽高忽低时,这两种原因指向的处理动作完全不同。
抓取日志通常由前端接入层或反向代理写入,记录的是请求到达或响应完成的时刻;应用日志由业务进程写入,记录的是请求进入业务逻辑或处理完毕的时刻。两者之间隔着连接建立、排队、中间件转发、进程调度等环节。如果两台机器的系统时钟没有同步,即使请求瞬间穿透,两个时间戳也会稳定地相差一个固定值。如果时钟是准的,差异则会随负载波动:空闲时接近零,高峰期被拉长。
这就是矛盾现象的两种解释:固定偏移说明时钟源不一致,浮动偏移说明链路本身有耗时。把两者混为一谈,就会得出“抓取变慢”或“抓取变多”的错误结论。
取一批能通过请求标识对应上的记录,计算应用日志时间减去抓取日志时间的差值,然后看这组差值的形态:
这里有一个容易踩的坑:如果两套日志都只记录到秒级,而实际处理耗时在毫秒级,那么差值会大量出现 0 和 1 的跳变,看起来像随机噪声。此时应先把精度统一到毫秒,再重新计算分布,否则会把精度不足误判成链路抖动。
在对齐时间之前,先确认以下前提,否则后续计算没有意义。
假设一个场景:抓取日志显示某 URL 在 10:00:00 被访问,应用日志显示 10:00:03 处理完成,差值 3 秒。若这 3 秒在低峰期同样存在,那是时钟问题;若低峰期为 0.1 秒、高峰期才到 3 秒,那是排队问题。这个判断直接决定下一步:前者去校准 NTP,后者去查连接池或进程并发配置。
时间对齐的价值在于让抓取量统计可信。如果偏移是固定的,直接对其中一套日志做整体平移即可用于趋势分析;如果偏移是浮动的,就不能简单平移,而应按时间段分别校准,或者干脆只用其中一套日志统计抓取量,另一套只用于定位单次请求。
需要提醒的是,抓取日志里的请求数量并不等于百度索引查询中看到的收录数量。日志只能说明百度蜘蛛来过,不能说明页面被索引。robots.txt 的抓取限制也不等于可靠的索引移除,站点地图同样不保证收录。因此对齐日志之后得到的结论,应限定在“抓取行为”这一层,不要直接外推到收录或展现。
一个可执行的动作是:先按上述方法确认偏移类型,再决定是校准时钟还是排查链路,最后用校准后的数据核对抓取趋势是否与索引查询结果的变化在时间上同步。如果两者仍然对不上,问题就不在时间对齐,而在于抓取与索引之间本身存在处理周期,此时应转向检查页面状态和内容质量,而不是继续纠缠时间戳。