复盘›数据治理

黄金主源 403 与备用源验证(2026-10-02)

最近一条:

复盘 · 记录 · 复盘/数据治理/黄金主源403与备用源验证_2026-10-02.md

黄金主源 403 与备用源验证(2026-10-02)

主题:LBMA 黄金定盘主源 prices.lbma.org.uk 被 Cloudflare 拦截(连续 3 日),

以及经口径验证的备用源 World Gold Council(WGC)通道回填。

口径唯一来源:框架/数据口径定义(本文不改动该文件)。

一、故障时间线(事实)

时间(CST)事件
2026-09-30 07:14LBMA gold_pm.json 正常返回(n=14692 → 14693,末条 09-29)。最后一次成功抓取。
2026-10-01 21:23抓取 403(Cloudflare「Attention Required」页,4547 字节,cf-ray 可见)→ publish=FAIL。
2026-10-01 23:30 / 2026-10-02 00:21 / 01:22连续复测均 403。
2026-10-02 09:01403(连续第 3 日)。
2026-10-02 12:12403(连续第 4 次探测失败)。
2026-10-02 12:36经 WGC 备用通道回填 09-30 / 10-01,管线重跑成功(publish=PASS,target=2026-10-01)。

二、根因定性(监工完成,本库复核)

  • 根因 = prices.lbma.org.uk 子域被 Cloudflare 拦(403 / 4547B),不是本机 IP 被封。
  • 反证:cf trace 返回 200;www.lbma.org.uk 返回 200;真 WebKit(内置浏览器)通道同样过不去。
  • 前端 JS 调用的就是同一被拦接口 ⇒ 站内无旁路。
  • FRED 对应的 LBMA 系列已 404(无替代官方源)。
  • 探针留痕:数据/logs/lbma_probe.log(JSONL)记录 http / bytes / cf_ray。

最近一条:{"ts":"2026-10-02T12:40:57+08:00","http":"403","bytes":4547,"cf_ray":"a441087eab35758a-SEA","consec_fail":1,"next_interval_h":6}。

三、备用源:World Gold Council(LBMA 授权转发)

  • 接口:https://fsapi.gold.org/api/goldprice/v13/chart/main
  • 提供序列:lbma_am_usd/gbp/eur、lbma_pm_usd/gbp/eur(LBMA 定盘价口径,2023-10 起)、以及 SGE/LME/MCX 等(本库不使用)。
  • 口径验证方法(重叠期逐位比对):
  • 取 WGC 全序列(am 382 日 / pm 379 日,均为 2023-10-02 起);
  • 与本地 数据/gold_{am,pm}.json 按日期逐位比较(US$ / £ / € 三列,浮点精确相等);
  • 硬断言:任一不一致即失败退出、拒绝写盘。

验证结果(原始输出摘要)

[am] 本地 n=14845 末条=2026-09-29 | 重叠期 380 日 | 逐位不一致 0 日 | 拟新增 2 日
[am] 重叠范围 2023-10-02 → 2026-09-28
[pm] 本地 n=14693 末条=2026-09-29 | 重叠期 377 日 | 逐位不一致 0 日 | 拟新增 2 日
[pm] 重叠范围 2023-10-02 → 2026-09-28

⇒ 重叠期逐位一致(am 380/380、pm 377/377,差异 0)。

第二源确认(内置浏览器,2026-10-02)

页面 https://www.lbma.org.uk/prices-and-data/lbma-precious-metal-prices(WebKit 渲染):

  • AM $4,159.85(01/10)、PM $4,151.65(01/10)
  • 与 WGC lbma_am_usd 2026-10-01 = 4159.85、lbma_pm_usd 2026-10-01 = 4151.65 一致 ⇒ 允许 apply。

四、回填记录(只追加、不覆盖)

文件条数 前→后新增条目sha256 前 → 后备份
数据/gold_am.json14845 → 1484709-30 [4188.75, 3155.80, 3687.78];10-01 [4159.85, 3146.09, 3683.13]475db673… → 33179af5…gold_am.json.bak_20261002
数据/gold_pm.json14693 → 1469509-30 [4176.30, 3144.34, 3677.23];10-01 [4151.65, 3139.48, 3677.95]dc25ccb6… → ebdf0fa3…gold_pm.json.bak_20261002
  • 脚本:scripts/backfill_gold_from_wgc.py(默认 --dry-run,--apply 才写)。
  • 交叉验证记录:数据/gold_wgc_xcheck.json(result=APPLIED,asOfDate=2026-10-01)。
  • 回滚点:/var/minis/shared/backup/DUCKERRY_pre_gold_backfill_20261002/(含两文件 + MD5_BEFORE.txt)。
  • 写后管线:run_id 20261002T124148+0800,target=2026-10-01、G1=PASS、publish=PASS、fetch_failures=[]。

五、防复发机制(P2,并未改动信号/风控逻辑)

  1. 生产链交叉源回退(scripts/dkfetch.py):LBMA 主源不可达时自动拉 WGC,写 数据/gold_xcheck.json;

默认不写主文件;主文件回填须显式 DK_GOLD_BACKFILL=1(对齐 DK_SKIP_* 惯例)。 回退仅在重叠期逐位一致且本地已覆盖 WGC 最新定盘日时才将黄金源判为「可用」;任何异常永不阻断发布。

  1. 指数退避探针(scripts/lbma_probe.py):记录 http / bytes / cf-ray,间隔 3h → 6h → 12h → 24h(成功后复位);

结果写 数据/logs/lbma_probe.log。停止每 3 小时无脑重试。

六、限制与红线

  • ⛔ WGC 不可当主源:仅 2023-10 起、仅作回填/交叉核验用途;不作日常主通道。
  • ⛔ 任何替代源在口径验证通过前不得写 数据/gold_*.json。
  • ⛔ 不得用现货/期货价冒充 LBMA 定盘价;不得外推;不得覆盖已有日期。
  • ⚠ 单家二级源集中度风险(WGC)[待验证]。
  • ⚠ 本库未改动 框架/数据口径定义.md(红线)。
  • 仓位 / 信号 / 止损逻辑一律未动。

七、相关产物

  • 复盘/2026-10/2026-10-01 收盘复盘(正常复盘,含 WGC 回填说明)
  • 复盘/2026-09/2026-09-30 收盘复盘(回填补记)
  • scripts/backfill_gold_from_wgc.py、scripts/lbma_probe.py、数据/gold_wgc_xcheck.json、数据/logs/lbma_probe.log