组织里 12 个 key 分给四个团队,账单页只按项目汇总,某天用量涨了 3 倍,只能在网关日志里 grep key 尾号,查了两小时才定位到一个跑批脚本。

一开始怀疑是「四个团队共用一个 key,本身就分不开」,查了一圈,方向不对。

排查方向其实有限,先把可能性排一排。用量接口最细只到项目粒度,不按 key 出数。另一种情况是自建服务转发时没在日志里记 key 尾号。

不容易想到的是,日志里只记了模型名,没记调用来源。

先把用量按项目拉出来看分布

curl -s 'https://api.openai.com/v1/organization/usage/completions?start_time=1730000000&bucket_width=1d&group_by=project_id' -H "Authorization: Bearer $ADMIN_KEY" | jq -r '.data[].results[] | [.project_id,.input_tokens,.output_tokens] | @tsv'

随后在网关日志里补上 key 尾号字段

log_fields = {'key_tail': auth[-4:], 'model': body.get('model'), 'team': header.get('X-Team')}

接着按尾号聚合出当天消耗

awk -F'key_tail=' '{split($2,a," "); c[a[1]]++} END{for(k in c) print k, c[k]}' gw.log | sort -k2 -nr | head

末了把结果接进成本看板按团队出账

python cost_report.py --log gw.log --price price.json --out team_cost.csv

改完先别撤,确认这几项。每个 key 尾号都能对上一段消耗,成本报表按团队拆分后总数与账单相差不到 1%,再涨量能直接指到具体脚本。

这里还有个坑。等到账单异常才想起来分 key 已经晚了,上线时就把 key 尾号写进日志字段,后面所有按团队分摊的动作都省一半时间。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189