生图API 出问题怎么定位?给调用加 traceId 和结构化日志(nano-banana-pro)

有次运营报"生图很慢",我去查日志,看到的是一堆这样的东西:

复制代码
生成中...
生成完成
生成失败

没有 traceId,没有耗时,没有参数。我连"哪一次慢"都定位不了,只能凭感觉去猜。

日志里至少要有什么

后来我重新定了一版最小字段集,每次调用记两条------请求前一条、响应后一条:

字段 为什么要
traceId 把请求和响应串起来,也能和上游业务日志对上
model 排查"是不是某个模型特别慢"
promptLen 提示词长度和耗时有相关性
aspect / size 尺寸直接影响耗时
costMs 核心指标
ok / errCode 成败和错误码
retryCount 这次是第几次尝试

实现

复制代码
const { randomUUID } = require('crypto');

async function genImage(params, ctx = {}) {
  const traceId = ctx.traceId || randomUUID();
  const t0 = Date.now();
  const base = {
    traceId,
    model: params.model,
    promptLen: (params.prompt || '').length,
    aspect: params.aspect_ratio,
    size: params.image_size,
  };
  log.info({ ...base, event: 'gen_start' });

  try {
    const r = await callGenApi(params);
    log.info({ ...base, event: 'gen_done', ok: true, costMs: Date.now() - t0 });
    return r;
  } catch (e) {
    log.error({
      ...base, event: 'gen_done', ok: false,
      costMs: Date.now() - t0,
      errCode: e.code || 'unknown',
      errMsg: String(e.message).slice(0, 200),
    });
    throw e;
  }
}

traceId 要从上游传下来,别在这一层新生成。用户点一次按钮可能触发多次生成(多图、重试),只有共用同一个 traceId 才能把它们归到一起看。

结构化,别拼字符串

复制代码
// ✗ 后面没法查
console.log(`生成完成,耗时 ${cost}ms`);

// ✓ 能按字段过滤和聚合
log.info({ event: 'gen_done', costMs: cost, model, traceId });

拼成一句话的日志,人能看,机器不能。改成 JSON 之后,"过去一小时 nano-banana-pro 的 p95 耗时"这种问题,一条查询就出来了。

三个真正有用的聚合

日志有了之后,我固定看这三个:

一、按模型分组的耗时分布。 看 p50 和 p95,别看平均值------生图的耗时分布很长尾,平均值会把偶发的超长请求抹平。

二、按错误码分组的失败数。 参数错误、鉴权失败、限流,是完全不同的处理方式。混成一个"失败率"没有指导意义。

三、重试率。 这个指标最容易被忽略。重试率突然上升往往是最早的信号,比失败率更灵敏------因为重试成功的那些,在失败率上根本看不出来。

一条经验

排查生图问题时,提示词长度是个常被忽略的变量。

我们有次整体变慢,查了半天网络和并发,最后发现是运营换了一版提示词模板,长度翻了三倍。日志里有 promptLen 之后,这个关联一眼就能看出来。

该服务本身的响应挺稳定,我们遇到的问题绝大多数出在自己这边------参数传错、并发没控、提示词失控。有日志才知道该怪谁,没日志就只能互相猜。


接口服务:甜甜圈API(dashengfenshen.cn)

相关推荐
菩提小狗16 分钟前
每日极客日报 · 2026年11月08日
ai·开源·极客日报·it热点·技术资讯
Martina_03212 小时前
AI生成3D场景从白模换成精模后镜头全偏了?用6步检查单位、枢轴与层级替换
图像处理·人工智能·3d·ai·自然语言处理·材质·1024程序员节
小四的小六2 小时前
重构 AI 代码,两千行里没有一处能删
aigc·openai·ai编程
狒狒AI2 小时前
手绘白板动画的生产线拆解:AI 出图、笔迹对齐、镜头渲染七道工序(附 21 个开源脚本)
人工智能·aigc
灵感__idea3 小时前
Claude Code 实战:AI这么强了,为什么还在发明新概念?
aigc·ai编程·claude
装不满的克莱因瓶3 小时前
【SpringAI Alibaba】ReactAgent记忆管理MessageTrimmingHook与MessageDeletionHook
java·人工智能·ai·ai编程·springai·springaialibaba
Dawson Zhu3 小时前
【LLM推理与Serving⑧】多机多卡Serving:TP/PP/负载均衡与弹性扩缩容全攻略
人工智能·语言模型·架构·aigc·agi
西安小哥3 小时前
AI 网关的语义缓存层:精确缓存吃掉 21% 调用量之后我才做向量
aigc
长不大的杨瑞杰4 小时前
ChatGPT 广告技术栈架构拆解:多轮意图、LLM 工具编排、ANN 召回与拍卖闭环
人工智能·chatgpt·系统架构·推荐系统·广告
七夜zippoe4 小时前
Agent 数据安全实战:输入校验、PII 脱敏与输出过滤的三道防线
ai·agent·数据安全·校验·过滤·pii脱敏