说到监控API使用量,这真是个让开发者又爱又恨的话题。我自己就吃过亏,有次项目上线后突然收到OpenAI的天价账单,仔细一查才发现是某个循环调用没加限制,一晚上烧了几十万token。从那以后我就养成了给所有API调用加监控的习惯,毕竟谁都不想半夜被账单吓醒对吧?
为什么要监控API使用量?
其实监控不只是为了省钱,更是为了服务稳定性。像GPT-3.5这样的API,免费用户只有3 RPM(每分钟请求数)的限额,一不小心就会触发限流。我有个朋友做聊天机器人,就因为没监控使用量,高峰期用户经常收到”服务繁忙”的提示,体验特别差。更别说那些按token收费的API了,要是遇到恶意请求,分分钟让你破产。
实战中的监控方案
我现在用的监控方案其实挺简单的,就是在代码里加个装饰器。每次调用API前先检查当前时间段的请求量,如果接近限额就自动延时。比如这样:
import time
from functools import wraps
def api_rate_limiter(max_calls_per_minute):
def decorator(func):
calls = []
@wraps(func)
def wrapper(*args, **kwargs):
now = time.time()
calls[:] = [call for call in calls if call > now - 60]
if len(calls) >= max_calls_per_minute:
sleep_time = 60 - (now - calls[0])
time.sleep(sleep_time)
calls.append(now)
return func(*args, **kwargs)
return wrapper
return decorator
这个装饰器会自动控制调用频率,避免触发限流。不过光这样还不够,还得记录每次调用的token用量,毕竟token限额才是更大的开销。
可视化监控仪表盘
最近我给团队做了个简单的监控面板,用Grafana+Prometheus实时显示API使用情况。能看到每分钟请求数、token消耗趋势,还能设置告警阈值。比如当每分钟token用量超过5万时自动发Slack通知,这样就能及时调整调用策略。
说实话,做好API监控后睡眠质量都变好了,再也不用半夜爬起来查日志了。建议大家都花点时间把这套监控体系搭起来,真的能省心很多。

这个装饰器写法很实用,收藏了!