事情本身不复杂,线索都在日志里。公司账户里预充的 500 美元额度在季度末清零,服务当天开始报 402,财务以为还有余额,实际上那批额度有 90 天有效期。
第一反应是「告警只看剩余金额,没看到期时间」,验证下来不成立。
原因不止一个,得分开看。预付费额度有有效期,过期自动作废。还有一种是余额接口只返回总额,不区分到期批次。
少数情况下是多批次额度混在一起,先扣快到期的。
动手时先查账户额度明细和到期时间
curl -s https://api.openai.com/v1/dashboard/billing/credit_grants -H "Authorization: Bearer $OPENAI_API_KEY" | jq '.grants[] | {amount,expires_at}'
接着按到期时间排序找出三十天内到期的批次
python -c "import json,datetime;g=json.load(open('grants.json'))['grants'];print(sorted(g,key=lambda x:x['expires_at'])[:3])"
然后在监控里加一条到期前十五天的告警
python -c "print('alert if expires_at - now < 15d')"
剩下的就是把 402 的兜底改成切到备用账号
python fallback.py --on-402 switch_account --backup acct_b
改完先别撤,确认这几项。告警能提前十五天触发,额度续期后 402 消失,账单里不再出现因过期导致的调用中断。
容易忽略的是,余额数字会骗人,预付费和多批次额度一定要把到期时间一起看。监控比日志更早给出信号,事后回看经常能提前半小时发现异常。
