搜索抓取

搜索蜘蛛抓取:DNS 解析链路与解析失败导致的入口不可达排查

蜘蛛抓取的第一步是把域名解析成 IP,这一步出问题时,日志里往往既没有请求也没有报错,容易被误判为没来抓取。本文梳理解析超时、多线路结果不一致、CNAME 链过长、TTL 与 AAAA 记录异常等常见现象,并给出一套从解析侧到抓取日志的对照排查顺序。

搜索抓取

搜索蜘蛛抓取:DNS 解析链路与解析失败导致的入口不可达排查

搜索蜘蛛要抓一个 URL,第一步并不是发 HTTP 请求,而是先把域名解析成 IP。这一步出问题时,抓取日志里往往看不到任何请求记录,站点后台也不会有 4xx 或 5xx,容易被误判成“蜘蛛没来”。把 DNS 当成抓取链路的第一个环节来看,很多入口丢失的问题会清楚不少。

为什么 DNS 问题容易被忽略

大部分抓取排查工具是从服务器访问日志开始的,而 DNS 失败发生在日志之前。蜘蛛解析不到 IP,请求根本不会到达源站,Nginx 或网关层面自然是干净的。反过来,如果解析到的 IP 不是源站期望的那个,请求可能落在了别处的节点上,日志看起来“有抓取”,但内容对不上。

另外,解析问题常常是间歇性的。缓存、多线路、递归解析器的差异,都会让同一个域名在不同时间、不同出口得到不同结果。单次 dig 看起来正常,不代表蜘蛛那一侧正常。

常见的 DNS 侧入口问题

  • 解析超时或间歇失败:权威服务器响应慢、丢包,或存在多个 NS 但其中一个不可用,递归解析器轮询到坏节点时就会失败。表现是抓取量突然下降又恢复。
  • 多线路解析结果不一致:为不同运营商或地区配置了不同 IP,其中某条线路的节点已下线但仍留在解析里,蜘蛛恰好落在该线路就会连不上。
  • CNAME 链过长:域名指向 CDN,CDN 再指向另一层,层层叠加后解析耗时增加,个别递归解析器可能在中途超时或返回不完整结果。
  • TTL 设置不合理:TTL 过长,换 IP 后旧记录长期被缓存;TTL 过短,解析请求频繁,权威服务器压力变大,反而更容易出现超时。
  • AAAA 记录缺失或指向错误:只有 A 记录时,双栈环境下的解析行为取决于客户端策略;如果 AAAA 记录指向一个并未真正提供服务的地址,抓取尝试就会直接失败。
  • 泛解析与无效子域:泛解析把所有未定义的子域都指向同一个 IP,历史遗留的子域入口可能仍然被引用,蜘蛛访问后得到的是错误页面而不是 404。

排查顺序建议

  1. 确认域名当前的 NS 记录,逐个测试每个权威服务器是否都能正常应答,而不是只测其中一个。
  2. 用多个公共递归解析器分别查询 A、AAAA、CNAME,对比返回结果和耗时,找出不一致或明显偏慢的那条路径。
  3. 把解析到的 IP 与源站实际出口 IP 列表逐一对齐,确认是否存在指向已下线节点的记录。
  4. 检查 CNAME 层级,尽量收敛到一到两层,避免解析链路被中间环节拖长。
  5. 核对 AAAA 记录是否与真实可服务的地址一致,不能服务就先不要声明。
  6. 调整 TTL 后观察一段时间,看抓取量曲线是否随之变化,而不是改完就下结论。

怎么和抓取日志对照

DNS 侧的观察结果需要和抓取行为对上。可以按小时统计源站收到的蜘蛛请求数,与解析失败率、解析耗时做同时间轴对比。如果某个时间段的请求量明显塌陷,而同期解析耗时抬升,就值得优先怀疑解析链路。

同时要注意区分“解析成功但连接失败”和“解析失败”。前者在日志里会留下连接超时或握手失败的痕迹,后者什么都没有。两者混在一起看,很容易把 DNS 问题误判成服务器负载问题。

需要长期关注的几个点

  • 换 IP、切 CDN、调整解析线路后,留出观察窗口再判断影响。
  • 把 NS、A、AAAA、CNAME 的变更记录和抓取量曲线放在一起存档,方便回溯。
  • 对解析耗时设置一个基线,出现持续偏离时提前介入,而不是等抓取量掉下来。
解析层的问题不会给出明确报错,它只表现为“什么都没发生”。所以入口核查要往前推一步,先确认域名能被稳定解析,再谈页面能不能被抓。

把 DNS 纳入日常巡检,成本并不高,但对 URL 发现和抓取稳定性来说,它是最靠前也最容易被跳过的一环。