先给结论:不要从“错误发生了”开始查,而要从“哪个时段、哪个请求、哪份证据能重复出现”开始查。对高权重域名来说,白天正常、凌晨报错,或整点前后短暂 5xx,往往不是全站故障,而是缓存刷新、定时任务、日志轮转、回源限流或第三方接口超时叠加出来的窗口。你要做的第一件事,是把手里的一个页面或一份访问日志变成可对照的时间切片,再决定是否需要继续扩大排查。
假设你手头有一份服务器访问日志,或一个近期被反馈“偶尔打不开”的栏目页。先不要同时查全站,也不要把所有高权重域名下的子域一起拉进来。选一个样本页,记录它的完整 URL、返回状态、响应时间、缓存命中状态、上游处理耗时,以及请求发生时的准确时间。
如果错误只在特定时段出现,那么单看一天汇总没有意义。把日志按分钟或按十分钟切一段,观察错误是否集中在固定窗口。例如,假设某页面在每天 02:00 到 02:10 之间出现 502,而其他时段正常。这个现象可能来自定时任务占用连接池,也可能来自缓存集中过期,还可能来自日志切割瞬间的磁盘写入抖动。此时不要急着认定原因,先把窗口缩小到能重复观察的范围。
实际动作:从日志中筛出该页面在异常窗口内的全部请求,逐条标注状态码、响应时间和上游地址。若同一秒内多个请求同时失败,优先怀疑资源竞争或上游不可用;若失败分散在十分钟内且状态码不一致,优先怀疑缓存或调度问题。这个动作的结果会直接影响下一步:你是在源站侧继续查,还是先查缓存层和调度层。
短暂错误最麻烦的地方是,等你登录后台时它已经恢复。要捕捉它,必须提前留下痕迹。可以从三个层面做最小化记录:
这些记录不需要长期全量保存,但至少要覆盖你怀疑的时间窗口。若日志已经被轮转覆盖,不要凭记忆补写,改用可重复的探测方式:在异常窗口前后各发一次请求,记录响应头和耗时,形成对照。这里要提醒一点:robots.txt 的抓取限制不等于可靠的索引移除,站点地图不保证收录,HTTPS 不保证安全无漏洞或排名。这些事实与短暂错误排查的关系在于,不要用“已经限制了抓取”或“已经上了 HTTPS”来解释异常窗口,它们不能替代对具体请求的追踪。
当你拿到异常窗口的记录后,通常会落入两个分支。两个分支都成立,但适用条件不同。
如果异常窗口每天或每小时固定出现,且与备份、索引重建、缓存刷新、日志切割等调度时间接近,优先查调度任务。此时要看的不是“任务有没有跑”,而是任务运行时占用了什么资源、是否与线上请求争抢连接或磁盘。假设某站点在凌晨执行全量缓存刷新,刷新期间回源请求集中,导致部分页面超时。这个假设成立的条件是:异常窗口与调度时间稳定重合,且调度结束后错误立即消失。若不满足这个条件,就不要把调度当作唯一原因。
如果异常窗口不固定,但每次出现时都伴随第三方接口超时、DNS 解析变慢或上游连接重置,优先查外部依赖。此时要区分“你的服务返回错误”和“你的服务等待外部返回时超时”。前者看自身日志,后者看上游耗时和重试记录。若错误窗口内只有部分请求失败,且失败请求都调用了同一个外部接口,这个方向更值得继续。
实际动作:把异常窗口内的请求按“是否调用外部接口”分成两组,比较两组的失败率。如果调用外部接口的一组失败明显集中,下一步就是给该接口加超时和降级记录;如果两组失败率接近,下一步回到资源竞争和缓存层。这个动作的结果会决定你是改代码、改调度,还是先加监控。
短暂错误不可能靠一次排查永久解决,但可以变成可复用的处理方案。建议按下面顺序落地:
这里要强调边界:个别样本成立,不等于规模化后同样成立。一个页面在凌晨出现短暂 502,可能只是该页面缓存策略特殊;把它直接推广到全站,可能得出错误结论。反过来,如果多个页面在同一窗口出现同类错误,才更值得按同一原因处理。请求量、抓取量或某项统计归零不能单独证明处理正确,因为也可能是日志采集中断、流量转移或监控口径变化。不同搜索引擎对抓取和索引的支持情况须分别核查,不能用一个平台的现象推断另一个平台。
最后,把“错误只在特定时段出现”当作一个证据窗口,而不是一个结论。先固定样本、固定时间切片、固定对照请求,再根据异常窗口与调度、外部依赖、资源竞争的关系选择下一步。这样做的结果不是立刻消除所有错误,而是让你在下一次窗口出现时,手里已经有可复查的记录和可执行的分支判断。