搜尋抓取

搜尋蜘蛛抓取: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 發現和抓取稳定性来说,它是最靠前也最容易被跳過的一环。