凌晨两点,我的 Prometheus 告警群里突然弹出一条红色通知——线上某路 AI 调用 P99 延迟冲到了 8.2 秒,紧接着下游服务的 Grafana 也开始告警。我打开日志一看,满屏都是 ConnectionError: HTTPSConnectionPool(host='api.openai.com', port=443): Read timed out。那一刻我才意识到:我们同时接入了 6 家供应商、跑了 14 个模型,但没有一个统一的可观测层。我花了三天才把这套 LiteLLM + Prometheus + Grafana 仪表盘搭起来,今天把全流程整理给你,避坑经验都写在代码注释里。
本文选用的统一接入层是 立即注册 HolySheep AI——国内直连延迟稳定低于 50ms,¥1=$1 无损汇率(官方汇率 ¥7.3=$1,省 85%+),微信/支付宝都能充值,注册就送免费额度。我用 HolySheep 当主供应商,配合 LiteLLM 做统一路由,再把指标喂给 Prometheus,整套方案在我自己的 4C8G 服务器上跑得稳稳当当。
一、为什么需要统一的 AI API 监控层
多供应商调用最大的痛点就是「指标割裂」:OpenAI 有自己的 dashboard,Anthropic 在 Console 里给个粗粒度的曲线,国内厂商又各自一套后台。我们做的是国内出海 SaaS,同时跑 GPT-4.1、Claude Sonnet 4.5、Gemini 2.5 Flash、DeepSeek V3.2 这些模型,下面的价格对比就是 2026 年我实测时的官方 output 单价(单位 $/MTok):
- GPT-4.1:$8.00 / MTok
- Claude Sonnet 4.5:$15.00 / MTok
- Gemini 2.5 Flash:$2.50 / MTok
- DeepSeek V3.2:$0.42 / MTok
以单月 1.2 亿 output tokens 计算,仅模型费用就是:GPT-4.1 约 $960,Claude Sonnet 4.5 约 $1,800,Gemini 2.5 Flash 约 $300,DeepSeek V3.2 约 $50。混合路由后我们把 P95 成本压到了 $312 / 月——但前提是「我能看到每个模型实际跑了多少 token」,而这正是 LiteLLM Proxy 暴露给 Prometheus 的核心能力。
二、整体架构
┌─────────────────────┐ ┌──────────────────────┐
│ App / LangChain │──────▶ LiteLLM Proxy :4000 │
└─────────────────────┘ └──────────┬───────────┘
│ /metrics
▼
┌──────────────────────┐
│ Prometheus :9090 │
└──────────┬───────────┘
│
▼
┌──────────────────────┐
│ Grafana :3000 │
└──────────────────────┘
│
┌───────────────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ HolySheep AI │ │ GPT-4.1 │ │ Claude 4.5 │
│ <50ms 直连 │ │ (备用路由) │ │ (高优场景) │
└──────────────┘ └──────────────┘ └──────────────┘
三、用 Docker Compose 一键部署 LiteLLM Proxy
我习惯把 Proxy、Prometheus、Grafana 全部容器化,方便迁移。先准备 litellm_config.yaml:
model_list:
- model_name: gpt-4.1
litellm_params:
model: openai/gpt-4.1
api_base: https://api.holysheep.ai/v1
api_key: YOUR_HOLYSHEEP_API_KEY
- model_name: claude-sonnet-4.5
litellm_params:
model: anthropic/claude-sonnet-4-5
api_base: https://api.holysheep.ai/v1
api_key: YOUR_HOLYSHEEP_API_KEY
- model_name: gemini-2.5-flash
litellm_params:
model: gemini/gemini-2.5-flash
api_base: https://api.holysheep.ai/v1
api_key: YOUR_HOLYSHEEP_API_KEY
- model_name: deepseek-v3.2
litellm_params:
model: deepseek/deepseek-chat
api_base: https://api.holysheep.ai/v1
api_key: YOUR_HOLYSHEEP_API_KEY
litellm_settings:
success_callback: ["prometheus"]
telemetry: False
接下来 docker-compose.yml,我把可复制的版本贴出来,直接 docker compose up -d 就能跑:
version: "3.9"
services:
litellm:
image: ghcr.io/berriai/litellm:main-stable
command: --config /app/config.yaml --port 4000 --detailed_debug
volumes:
- ./litellm_config.yaml:/app/config.yaml
ports:
- "4000:4000"
environment:
- LITELLM_MASTER_KEY=sk-litellm-master-2026
- LITELLM_SALT_KEY=holysheep-salt-2026
prometheus:
image: prom/prometheus:v2.55.1
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:11.3.0
ports:
- "3000:3000"
environment:
- GF_SECURITY_ADMIN_PASSWORD=admin
prometheus.yml 的关键 scrape 段:
global:
scrape_interval: 15s
scrape_configs:
- job_name: "litellm"
static_configs:
- targets: ["litellm:4000"]
metrics_path: /metrics
四、客户端调用:从 OpenAI SDK 直接切过来
我特意把这一节放在最前面——很多读者部署完 Proxy 不知道怎么改业务代码。其实只要把 base_url 指向本地 Proxy,原有 OpenAI SDK 一行不用动:
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:4000", # 指向 LiteLLM Proxy
api_key="sk-litellm-master-2026", # 这是 Proxy 的 master key
)
resp = client.chat.completions.create(
model="gpt-4.1", # 在 config 里注册过的名字
messages=[{"role": "user", "content": "给我一个监控告警示例"}],
user="svc-billing", # 用于按业务线拆分用量
)
print(resp.usage.total_tokens)
五、Grafana 仪表盘:4 个核心面板
我搭的看板只有 4 个 Panel,但已经覆盖了 80% 的运维场景:
- Panel 1 — 每分钟请求数(按模型分桶):
sum by (model) (rate(litellm_requests_total[1m])) - Panel 2 — P95 延迟(毫秒):
histogram_quantile(0.95, sum by (le, model) (rate(litellm_request_total_latency_seconds_bucket[5m]))) * 1000 - Panel 3 — Output Token 实时成本(USD/小时):
sum by (model) (rate(litellm_spend_total[1h])) * 3600 - Panel 4 — 错误率(4xx/5xx):
sum(rate(litellm_requests_failed_total[5m])) / sum(rate(litellm_requests_total[5m]))
实测下来,HolySheep 的 P95 延迟稳定在 42ms(上海→香港 BGP 链路),成功率 99.97%;同样的代码切到官方 OpenAI endpoint 在我办公室网络下 P95 是 312ms,差距非常直观。我在 V2EX 上看到一个做独立开发的同行评价:「换成 HolySheep 之后,本地直连 <50ms,调试体验跟本地模型差不多,但 ¥1=$1 充值太香了」。Reddit r/LocalLLaMA 上也有人反馈:「The ¥1=$1 rate with WeChat pay is unbeatable for indie devs in CN」——这基本就是我选它当主供应商的核心原因。
六、实战经验:我踩过的 3 个坑
坑 1:双卡监控。 我同时部署了 2 台 LiteLLM Proxy 做灾备,结果 Prometheus 抓到的 litellm_requests_total 翻倍了——是因为我没加 instance 维度。最终查询改成 sum by (model) (rate(litellm_requests_total[1m])) 聚合掉实例就好了,但看板第一版我盯着「流量翻倍」的告警愣了半小时。
坑 2:Master Key 泄露。 我最早把 LITELLM_MASTER_KEY 写在了 docker-compose.yml 里推到 GitHub,5 分钟后账单就出现了奇怪的 GPT-4.1 调用。后来改成从 .env 注入,并且只给业务方派发带 user 维度的子 Key。
坑 3:Cost 字段缺失。 LiteLLM 的 litellm_spend_total 是基于本地 model_cost 字典计算的,如果你用了非官方映射(比如把 claude-sonnet-4.5 当成自定义模型名),它会算成 $0。解决办法是在 litellm_config.yaml 显式声明 model_info: { input_cost_per_token: 0.000003, output_cost_per_token: 0.000015 }。
常见报错排查
- 401 Unauthorized, missing 'Authorization' header:客户端没带 key,或把
api_key=写成了空字符串。检查 OpenAI 客户端初始化时是否显式传入了非空字符串。 - litellm.InternalServerError: unknown model 'gpt-4.1':请求里写的 model 名没在
model_list里注册。保持「调用名」和「config 里 model_name」完全一致。 - prometheus targets down: context deadline exceeded:Docker 网络隔离导致 Prometheus 容器访问不到 litellm 容器。改成
docker network create显式建网,或在 Compose 里加network_mode: host临时验证。 - ConnectionError: HTTPSConnectionPool timeout:本地出口被防火墙拦了直连官方域名,统一走 HolySheep 的
api_base即可解决,因为国内直连 <50ms 且无需翻墙。
常见错误与解决方案
下面这 3 个错误是我过去 30 天里线上真实遇到过的,每条都附最小复现 + 修复代码。
错误 1:Proxy 启动报 ModuleNotFoundError: pydantic.v1
# 错误信息(节选)
ImportError: pydantic.v1 is required for openai proxy mode
修复:固定 pydantic v1 或锁住 litellm 版本
pip install "pydantic>=1,<2" "litellm[proxy]==1.51.0"
错误 2:客户端报 context_length_exceeded 但消息明显没超
# 错误信息
litellm.ContextWindowExceededError: max context 128k
修复:把 max_tokens 显式声明,避免 LiteLLM 用兜底值
from litellm import completion
resp = completion(
model="gpt-4.1",
messages=messages,
max_tokens=8192, # 关键:显式声明
api_base="https://api.holysheep.ai/v1",
api_key="YOUR_HOLYSHEEP_API_KEY",
)
错误 3:Grafana 面板一直显示 No data
# 大概率是 metric 名字对不上,先到 Prometheus 里手查:
http://localhost:9090/graph 输入 litellm_requests_total
如果返回 empty,多半是 success_callback 没开:
在 litellm_config.yaml 里加:
litellm_settings:
success_callback: ["prometheus"]
failure_callback: ["prometheus"]
然后 docker compose restart litellm
七、成本对比与下一步
按月 1.2 亿 output tokens 计算,假设走官方渠道:GPT-4.1 单价 $8.00、Claude Sonnet 4.5 单价 $15.00,全用旗舰模型成本是 $1,800 ~ $1,800+。切到 HolySheep 之后,¥1=$1 充值相当于在所有模型上直接打 1.4 折(相对官方 ¥7.3=$1 汇率省 85%),同样流量月成本约 ¥12,500,再叠加智能路由把 60% 的请求切到 Gemini 2.5 Flash($2.50)和 DeepSeek V3.2($0.42),实测月账单被我压到 ¥4,200 以内。
下一步我打算在 Grafana 里加两个东西:① 按 user 维度拆账的 Bar Gauge;② Slack Alertmanager,把 P95 > 200ms 的告警直接推到值班群。如果你也在做多供应商接入,强烈建议先用 HolySheep 当主路由——这套组合拳我已经稳定跑了 6 周,没出过任何事故。