diff --git a/docs/20260919-20_接口2空图失败统计.md b/docs/20260919-20_接口2空图失败统计.md new file mode 100644 index 0000000..03eeb95 --- /dev/null +++ b/docs/20260919-20_接口2空图失败统计.md @@ -0,0 +1,99 @@ +# 2026-09-19~09-20 接口2 空图失败统计 + +- **统计窗口**:2026-09-19 00:00:00 ~ 2026-09-20 23:59:59(北京时间) +- **生成时间**:2026-09-21 10:45 + +## 1. 要抓的失败 + +接口2(`POST /api/v1/hair/grow`)在 GPU worker 内部出错时,仍返回 HTTP 200、`code=0`,只把 `grown_image_*` 置空。只看业务码会当成成功。 + +| 判定 | 条件 | +|------|------| +| **真成功(出图)** | `code=0` 且至少一张生发图非空 | +| **空图失败** | `code=0` 且有 `results`,但生发图全空 | +| **业务码失败** | `code≠0` | + +抓取:jsonl 里看 `results[].grown_image_url|base64`;9/19 18:53 之前 jsonl 已轮转,用 journal 的 `base64→URL: grown_image_base64` 与 `POST /hair/grow` 次数对照(白天每小时 rewrite ≥ 请求数,说明在出图)。 + +空图耗时中位约 **2.2~2.5s**;正常出图中位约 **16~23s**。 + +## 2. 两天接口2 合计 + +| 类别 | 9/19 | 9/20 | 两天合计 | +|------|------|------|----------| +| 调用量 | 4,958 | 3,352 | **8,310** | +| 真成功(有生发图) | 1,968 | 701 | **2,669** | +| **空图失败** | **2,988** | **2,649** | **5,637** | +| 业务码失败 | 2 | 2 | 4 | +| 按业务码成功率 | 99.96% | 99.94% | 99.95% | +| **有效出图成功率** | **39.7%** | **20.9%** | **32.1%** | + +9/19 调用量来自 journal(全日 4,958);空图 2,988 全部落在 jsonl 仍在的 18:53 之后,白天 journal 显示仍在出图,故空图数可视为全日完整。9/20 全日 jsonl。 + +把空图算失败后:两天有效成功 **2,669**,失败 **5,641**(空图 5,637 + 业务码 4)。 + +## 3. 连续故障段 + +不是两天各坏一段时间,而是**一段连续故障**: + +| 节点 | 时间 | +|------|------| +| 9/19 白天~22:20 | 正常出图 | +| 9/19 **22:30** | 开始大量空图(该 10 分钟 165 次里 19 张有图、146 张空) | +| 9/19 **22:34:49** | 故障前最后一张生发图 | +| 9/19 22:40 ~ 9/20 13:36 | **全部空图** | +| 9/20 **13:36:54** | 恢复后第一张生发图 | +| 9/20 13:40 以后 | 基本正常(偶发单次空图) | + +故障段内空图: + +| 时段 | 空图次数 | +|------|----------| +| 9/19 22:30–22:39 | 146(另 19 次仍出图,过渡) | +| 9/19 22:40–24:00 | 2,835 | +| 9/20 00:00–13:36 | 2,625 | +| **连续故障空图合计** | **约 5,606** | + +其中 9/20 00:00–00:50 有 2,127 次,来源 IP `47.93.63.201`(客户侧重试/批量)。 + +## 4. 按小时(接口2) + +### 9/19 + +| 小时 | 调用 | 出图 | 空图 | 状态 | +|------|------|------|------|------| +| 00–21 | 1,840 | ≈1,832 | 7(零星) | 正常(journal + 18:53 后 jsonl) | +| 22 | 849 | 136 | 713 | 22:30 起故障 | +| 23 | 2,269 | 0 | 2,269 | 故障 | + +18–21 点 jsonl 可核验:854 次出图、仅 7 次零星空图。 + +### 9/20 + +| 小时 | 调用 | 出图 | 空图 | 状态 | +|------|------|------|------|------| +| 00 | 2,127 | 0 | 2,127 | 故障 | +| 01–12 | 417 | 0 | 417 | 故障 | +| 13 | 125 | 32 | 93 | 13:36 恢复 | +| 14–18 | 354 | 354 | 0 | 正常 | +| 19–20 | 177 | 165 | 12 | 正常,少量单次空图 | +| 21–23 | 152 | 150 | 0 | 正常(另 2 次业务码失败) | + +## 5. 9/20 其它接口(业务码,供对照) + +| 接口 | 调用量 | `code=0` | 业务码失败 | +|------|--------|----------|------------| +| 接口1 四庭七眼 | 380 | 361 | 19 | +| 接口4 特征 | 347 | 345 | 2 | +| 接口99 特殊点 | 344 | 344 | 0 | +| 接口5 发际线 | 248 | 248 | 0(但 247 次无生发图,全天) | +| 接口6 测量 v2 | 105 | 75 | 30 | + +9/20 按业务码成功率 98.89%,同样会漏掉接口2 空图。接口5 当天几乎也无生发图,主结论仍以接口2 为准。 + +## 6. 结论 + +1. 故障从 **9/19 22:30** 开始,到 **9/20 13:36** 结束,约 **15 小时**。 +2. 两天空图失败 **5,637** 次(9/19 的 2,988 + 9/20 的 2,649),占两天接口2 的 **67.8%**。 +3. 有效出图 **2,669** 次,有效成功率 **32.1%**;只看 `code=0` 则是 99.95%。 +4. 9/19 白天(22:30 前)journal 显示仍在落盘生发图,空图集中在当晚 22:30 之后并跨到次日下午。 diff --git a/docs/20260920_接口2空图失败统计.md b/docs/20260920_接口2空图失败统计.md new file mode 100644 index 0000000..5853a22 --- /dev/null +++ b/docs/20260920_接口2空图失败统计.md @@ -0,0 +1,7 @@ +# 2026-09-20 调用成败统计(含接口2「秒回无图」) + +本文已并入两天统计,请看: + +**[20260919-20_接口2空图失败统计.md](20260919-20_接口2空图失败统计.md)** + +覆盖 9/19~9/20。故障从 **9/19 22:30** 持续到 **9/20 13:36**,两天空图失败合计 **5,637** 次。 diff --git a/docs/README.md b/docs/README.md index 475331e..abec343 100644 --- a/docs/README.md +++ b/docs/README.md @@ -9,6 +9,8 @@ | [接口文档.md](接口文档.md) | 对外 API 契约(字段 / 错误码)。字段命名的唯一权威。 | | [旷视具体需求.md](旷视具体需求.md) | 原始需求。 | | [../OFFLINE_ASSETS.md](../OFFLINE_ASSETS.md) | worker 离线模型权重/字体清单(内网部署)。 | +| [最近一周调用统计_20260915-20260921.md](最近一周调用统计_20260915-20260921.md) | 2026-09-15~09-21 网关调用量、接口构成、成功率。 | +| [20260919-20_接口2空图失败统计.md](20260919-20_接口2空图失败统计.md) | 9/19~9/20 接口2 `code=0` 但无生发图(GPU 内部错误,跨午夜连续故障)。 | > 原先分散的「各接口技术方案 / 开发任务书 / 系统架构 / 网关任务书」已合并进 `实现说明.md` > (细节可查 git 历史)。 diff --git a/docs/最近一周调用统计_20260915-20260921.md b/docs/最近一周调用统计_20260915-20260921.md new file mode 100644 index 0000000..945c3b5 --- /dev/null +++ b/docs/最近一周调用统计_20260915-20260921.md @@ -0,0 +1,145 @@ +# 最近一周接口调用统计 + +- **统计窗口**:2026-09-15 00:00:00 ~ 2026-09-21 10:13:00(北京时间,共 7 个自然日;21 日为截至上午的部分数据) +- **统计对象**:网关 `hair.xiangsilian.com` 对外业务接口(`POST /api/v1/...`) +- **不含**:健康检查、静态页、扫描探测(如 `GET /api/.env`) +- **生成时间**:2026-09-21 10:13 + +## 1. 口径 + +| 指标 | 定义 | +|------|------| +| 调用量 | 网关访问日志中,下列业务路径的完成次数 | +| 业务成功 | HTTP 200 **且** 响应 JSON `code=0`(或无 `code`) | +| 业务失败 | 非上述情况(含业务错误码 1001/1003/1008,以及 HTTP 405 等) | +| HTTP 完成 | uvicorn 记录的 HTTP 200,**不区分**业务码 | + +`request_log.jsonl` 已轮转,**9/15–9/18 全日、9/19 白天**只剩 systemd journal,这些天的调用量按 journal 统计;业务成功率仅在仍保留 jsonl 的时段可精确计算(见第 4 节)。 + +业务接口清单: + +| 接口 | 路径 | +|------|------| +| 1 四庭七眼测量 | `/api/v1/face/measure` | +| 2 C 端生发 | `/api/v1/hair/grow` | +| 3 B 端生发 | `/api/v1/hair/grow-b` | +| 4 用户特征分析 | `/api/v1/face/features` | +| 5 发际线 PNG | `/api/v1/hairline/generate` | +| 6 四庭七眼 v2 | `/api/v1/face/measure-v2` | +| 7 C 端生发 v2 | `/api/v1/hair/grow-v2`(已弃用,基本无流量) | + +## 2. 总览 + +| 项 | 数值 | +|----|------| +| 7 日合计调用量 | **20,104** | +| 完整 6 日(9/15–9/20)合计 | **19,824** | +| 完整 6 日日均 | **3,304** | +| 峰值日 | **9/19(周六)8,234** | +| 最低完整日 | **9/15(周二)1,258** | +| 9/21 截至 10:13 | **280** | + +主接口构成(7 日合计): + +| 接口 | 次数 | 占比 | +|------|------|------| +| 接口2 C 端生发 | 12,470 | 62.0% | +| 接口4 特征分析 | 3,025 | 15.0% | +| 接口1 四庭七眼 | 2,800 | 13.9% | +| 接口5 发际线 | 1,243 | 6.2% | +| 接口6 四庭七眼 v2 | 562 | 2.8% | +| 接口3 / 接口7 等 | 4 | <0.1% | + +## 3. 按日调用量 + +| 日期 | 星期 | 调用量 | 接口2 生发 | 接口4 特征 | 接口1 测量 | 接口5 发际线 | 接口6 测量v2 | 数据来源 | +|------|------|--------|------------|------------|------------|--------------|--------------|----------| +| 9/15 | 周二 | 1,258 | 643 | 171 | 174 | 170 | 100 | journal | +| 9/16 | 周三 | 1,688 | 921 | 236 | 285 | 169 | 75 | journal | +| 9/17 | 周四 | 1,789 | 1,069 | 254 | 232 | 183 | 51 | journal | +| 9/18 | 周五 | 2,429 | 1,350 | 432 | 381 | 189 | 77 | journal | +| 9/19 | 周六 | **8,234** | 4,959 | 1,531 | 1,302 | 287 | 153 | journal | +| 9/20 | 周日 | 4,426 | 3,350 | 347 | 380 | 244 | 105 | jsonl / journal 互核 | +| 9/21 | 周一 | 280 | 178 | 54 | 46 | 0 | 1 | journal(截至 10:13) | +| **合计** | | **20,104** | **12,470** | **3,025** | **2,800** | **1,243** | **562** | | + +9/16 另有接口3 共 2 次;9/19 有接口3、接口7 各 1 次(均为 405,见失败说明)。 + +工作日(9/15–9/18)在 1.3k~2.4k / 天,周六冲到 8.2k,周日回落到 4.4k,仍高于工作日。增量主要来自接口2。 + +## 4. 成功率 + +分两层看:HTTP 几乎全部 200;**业务是否成功要以 `code=0` 为准**。 + +### 4.1 HTTP 完成率(全窗口,journal) + +20,104 次中 HTTP 200 为 **20,098**,**99.97%**。非 200 仅 **6 次 HTTP 405**(均为外部对业务路径发 GET,不是客户 POST)。 + +| 日期 | 调用量 | HTTP 200 | HTTP 成功率 | +|------|--------|----------|-------------| +| 9/15 | 1,258 | 1,258 | 100% | +| 9/16 | 1,688 | 1,688 | 100% | +| 9/17 | 1,789 | 1,789 | 100% | +| 9/18 | 2,429 | 2,429 | 100% | +| 9/19 | 8,234 | 8,228 | 99.93%(6 次 405) | +| 9/20 | 4,426 | 4,426 | 100% | +| 9/21 截至 10:13 | 280 | 280 | 100% | + +### 4.2 业务成功率(`code=0`,jsonl 可核验时段) + +jsonl 当前只覆盖 **9/19 18:53 之后、9/20 全日、9/21 截至 10:13**,共 **9,720** 次: + +| 时段 | 调用量 | 业务成功 | 业务失败 | 业务成功率 | +|------|--------|----------|----------|------------| +| 9/19 18:53–24:00 | 5,011 | 4,991 | 20 | 99.60% | +| 9/20 全日 | 4,432 | 4,379 | 53 | 98.80% | +| 9/21 00:00–10:13 | 277 | 267 | 10 | 96.39% | +| **可核验合计** | **9,720** | **9,637** | **83** | **99.15%** | + +按接口(同一 jsonl 窗口): + +| 接口 | 调用量 | 业务成功 | 失败 | 成功率 | +|------|--------|----------|------|--------| +| 接口2 C 端生发 | 7,373 | 7,369 | 4 | 99.95% | +| 接口5 发际线 | 354 | 353 | 1 | 99.72% | +| 接口4 特征分析 | 670 | 661 | 9 | 98.66% | +| 接口1 四庭七眼 | 1,157 | 1,120 | 37 | 96.80% | +| 接口6 四庭七眼 v2 | 164 | 134 | 30 | 81.71% | + +接口6 成功率偏低,失败几乎全是 `1003 角度问题,请上传正面照`(照片侧脸/角度,不是服务宕机)。接口1 同类原因也较多。 + +### 4.3 可核验窗口内的失败原因(83 次) + +| 次数 | HTTP | 业务码 | 含义 | +|------|------|--------|------| +| 60 | 200 | 1003 | 角度问题,请上传正面照 | +| 15 | 200 | 1001 | 无法识别人像 | +| 6 | 405 | — | 对业务路径发 GET(扫描,非客户) | +| 2 | 200 | 1008 | 图片下载失败或格式不支持 | + +没有出现批量 `1007 后端服务暂不可用` / 排队超时。失败以**入图不合规**为主,不是网关或 GPU worker 整段掉线。 + +## 5. 接口2:业务成功 ≠ 一定出了生发图 + +接口2 在 ComfyUI / change_hair 失败时仍返回 `code=0`,只是 `grown_image_*` 为 `null`(测试页会显示「ComfyUI 未就绪或生成失败」)。因此第 4 节的成功率**不能**当成「生发图都生成了」。 + +jsonl 可核验的接口2 出图情况: + +| 日期 | 接口2 次数 | 业务成功 | 含生发图 | 生发图为空 | +|------|------------|----------|----------|------------| +| 9/19 18:53 后 | 3,844 | 3,842 | 854 | 2,988 | +| 9/20 | 3,352 | 3,350 | 701 | 2,649 | +| 9/21 截至 10:13 | 178 | 178 | **178** | **0** | + +9/19–9/20 大量请求只返回了发际线叠图、没有生发效果图(与当时 GPU 上 change_hair「用户图像加载失败」一致)。**9/21 上午接口2 已全部带生发图**。 + +## 6. 数据来源与局限 + +- 调用量:`journalctl -u hair-gateway` 中 uvicorn 访问日志(`POST /api/v1/...`)。 +- 业务码 / 失败原因 / 是否含 `grown_image`:`gateway/request_log.jsonl`(及 `.jsonl.1`)。轮转后目前最早一条为 **2026-09-19 18:53**。 +- 9/15–9/18 没有业务码明细,不能把 HTTP 100% 等同于业务 100%。 +- 接口4 在网关本机执行(豆包),不占 GPU worker;其余表内接口转发 worker。 + +--- + +*本文只做观测统计,不包含代码或配置变更。*