在部署AI API服务时,监控调用延迟、Token消耗、错误率是保障服务稳定性的核心工作。我在做国内AI服务架构升级时,深入研究了如何用Prometheus高效采集AI服务的各项指标。今天分享我的完整实战方案,特别推荐使用 对比维度 HolySheheep AI OpenAI 官方 其他中转站 汇率 ¥1=$1(无损) ¥7.3=$1 ¥6-8=$1 国内延迟 <50ms >200ms 80-150ms GPT-4.1价格/MTok $8.00 $60.00 $15-30 Claude Sonnet价格/MTok $15.00 $45.00 $20-35 充值方式 微信/支付宝 国际信用卡 参差不齐 监控数据精准度 高(含完整元数据) 高 通常丢失usage字段 免费额度 注册即送 $5体验金 极少或无

为什么AI服务需要Prometheus监控

我在部署多个AI项目后发现,没有监控的AI服务就像盲人摸象。Prometheus能帮我们采集:

  • 请求延迟分布:P50/P95/P99延迟,识别性能瓶颈
  • Token消耗:input_tokens、output_tokens实时统计,成本控制
  • 错误率:按错误类型分类(rate_limit、auth_error、timeout等)
  • 并发压力:当前请求队列深度、并发连接数

实战:Python Flask + Prometheus监控AI服务

我用Flask搭建了一个AI代理服务,集成了完整的Prometheus指标采集。核心思路是在请求前后记录时间,计算Token单价成本,并按模型分组统计。

"""
AI服务Prometheus监控完整实现
兼容HolySheep AI / OpenAI兼容API
"""

from flask import Flask, request, jsonify
from prometheus_client import Counter, Histogram, Gauge, generate_latest, REGISTRY
import time
import requests
from collections import defaultdict

app = Flask(__name__)

==================== Prometheus指标定义 ====================

请求计数器(按模型和状态码分组)

REQUEST_COUNTER = Counter( 'ai_api_requests_total', 'Total AI API requests', ['model', 'status', 'provider'] )

延迟直方图(毫秒级)

REQUEST_LATENCY = Histogram( 'ai_api_request_duration_milliseconds', 'AI API request latency in ms', ['model', 'provider'], buckets=[50, 100, 200, 500, 1000, 2000, 5000] )

Token计数器

TOKEN_COUNTER = Counter( 'ai_api_tokens_total', 'Total tokens consumed', ['model', 'type'] # type: input/output )

成本Gauge(累计美元成本)

COST_GAUGE = Gauge( 'ai_api_total_cost_usd', 'Total cost in USD', ['model'] )

当前并发请求数

ACTIVE_REQUESTS = Gauge( 'ai_api_active_requests', 'Number of active requests', ['model'] )

错误计数器

ERROR_COUNTER = Counter( 'ai_api_errors_total', 'Total API errors', ['model', 'error_type'] )

==================== 模型价格配置(2026最新) ====================

MODEL_PRICING = { 'gpt-4.1': {'input': 0.002, 'output': 8.00, 'unit': 'per_1M_tokens'}, 'gpt-4o': {'input': 2.50, 'output': 10.00, 'unit': 'per_1M_tokens'}, 'claude-sonnet-4.5': {'input': 3.00, 'output': 15.00, 'unit': 'per_1M_tokens'}, 'claude-opus-3.5': {'input': 15.00, 'output': 75.00, 'unit': 'per_1M_tokens'}, 'gemini-2.5-flash': {'input': 0.35, 'output': 2.50, 'unit': 'per_1M_tokens'}, 'deepseek-v3.2': {'input': 0.27, 'output': 0.42, 'unit': 'per_1M_tokens'}, }

==================== 成本计算函数 ====================

def calculate_cost(model: str, input_tokens: int, output_tokens: int) -> float: """计算单次请求成本(美元)""" if model not in MODEL_PRICING: # 未知模型返回0,避免监控中断 return 0.0 pricing = MODEL_PRICING[model] input_cost = (input_tokens / 1_000_000) * pricing['input'] output_cost = (output_tokens / 1_000_000) * pricing['output'] return round(input_cost + output_cost, 6) # 精确到小数点后6位

==================== AI请求处理 ====================

@app.route('/v1/chat/completions', methods=['POST']) def chat_completions(): start_time = time.time() ACTIVE_REQUESTS.labels(model='unknown').inc() try: data = request.json model = data.get('model', 'unknown') messages = data.get('messages', []) # 调用HolySheep AI API(¥1=$1汇率) headers = { 'Authorization': f'Bearer {request.headers.get("X-API-Key", "YOUR_HOLYSHEEP_API_KEY")}', 'Content-Type': 'application/json' } # 实际请求 response = requests.post( 'https://api.holysheep.ai/v1/chat/completions', headers=headers, json={'model': model, 'messages': messages}, timeout=60 ) result = response.json() # 提取Token使用量(HolySheep返回完整usage字段) usage = result.get('usage', {}) input_tokens = usage.get('prompt_tokens', 0) output_tokens = usage.get('completion_tokens', 0) # 记录Token指标 TOKEN_COUNTER.labels(model=model, type='input').inc(input_tokens) TOKEN_COUNTER.labels(model=model, type='output').inc(output_tokens) # 计算并记录成本 cost = calculate_cost(model, input_tokens, output_tokens) COST_GAUGE.labels(model=model).inc(cost) # 记录延迟 latency_ms = (time.time() - start_time) * 1000 REQUEST_LATENCY.labels(model=model, provider='holysheep').observe(latency_ms) # 记录成功请求 REQUEST_COUNTER.labels(model=model, status='success', provider='holysheep').inc() return jsonify(result) except requests.exceptions.Timeout: ERROR_COUNTER.labels(model=model, error_type='timeout').inc() REQUEST_COUNTER.labels(model=model, status='timeout', provider='holysheep').inc() return jsonify({'error': 'Request timeout after 60s'}), 504 except requests.exceptions.RequestException as e: ERROR_COUNTER.labels(model=model, error_type='network').inc() REQUEST_COUNTER.labels(model=model, status='network_error', provider='holysheep').inc() return jsonify({'error': str(e)}), 502 finally: ACTIVE_REQUESTS.labels(model=model).dec()

==================== Prometheus指标端点 ====================

@app.route('/metrics') def metrics(): return generate_latest(REGISTRY), 200, {'Content-Type': 'text/plain'} if __name__ == '__main__': app.run(host='0.0.0.0', port=8080)

prometheus.yml配置

要让Prometheus抓取我们的指标,需要正确配置scrape_configs。我踩过的一个坑是漏配了metric_path,导致一直拿不到数据。

# prometheus.yml - AI服务监控完整配置
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets: []

rule_files:
  - "ai_alerts.yml"  # 告警规则文件

scrape_configs:
  # 抓取AI代理服务
  - job_name: 'ai-proxy-service'
    static_configs:
      - targets: ['ai-proxy:8080']  # Docker Compose服务名
    metrics_path: '/metrics'
    scrape_interval: 10s
    scrape_timeout: 5s
    
  # 抓取模型响应延迟(P99告警)
  - job_name: 'ai-latency-monitor'
    static_configs:
      - targets: ['ai-proxy:8080']
    metrics_path: '/metrics'
    params:
      include_metrics: ['ai_api_request_duration_milliseconds']
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
        replacement: 'ai-service-${job}'

  # 抓取成本统计
  - job_name: 'ai-cost-monitor'
    static_configs:
      - targets: ['ai-proxy:8080']
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: 'ai_api_total_cost_usd'
        action: keep

告警规则配置

我建议至少配置3个核心告警:延迟过高、错误率飙升、成本超限。下面的规则已经在生产环境验证过。

# ai_alerts.yml - AI服务告警规则
groups:
  - name: ai_service_alerts
    rules:
      # P99延迟告警(超过3秒)
      - alert: AIRequestLatencyHigh
        expr: histogram_quantile(0.99, rate(ai_api_request_duration_milliseconds_bucket[5m])) > 3000
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "AI请求P99延迟过高"
          description: "模型 {{ $labels.model }} P99延迟 {{ $value }}ms 已持续5分钟"
          
      # 错误率告警(超过5%)
      - alert: AIErrorRateHigh
        expr: |
          sum(rate(ai_api_errors_total[5m])) 
          / sum(rate(ai_api_requests_total[5m])) > 0.05
        for: 3m
        labels:
          severity: critical
        annotations:
          summary: "AI API错误率超过5%"
          description: "当前错误率 {{ $value | humanizePercentage }}"
          
      # Token消耗异常(比昨天同时段多50%)
      - alert: TokenConsumptionAnomaly
        expr: |
          sum(increase(ai_api_tokens_total[1h])) 
          > 1.5 * sum(increase(ai_api_tokens_total[1h] offset 24h))
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "Token消耗异常增长"
          description: "当前小时消耗比24小时前增长超过50%"
          
      # 成本告警(每小时超过$100)
      - alert: AICostBudgetExceeded
        expr: increase(ai_api_total_cost_usd[1h]) > 100
        for: 0m
        labels:
          severity: critical
        annotations:
          summary: "AI服务成本超限"
          description: "过去1小时成本已达 ${{ $value }}"

常见报错排查

错误1:Prometheus抓取不到指标(scrape_errors持续增加)

我在部署时遇到prometheus一直报scrape_errors,增加日志后发现是网络策略问题。AI服务在Docker网络内,但Prometheus在宿主机。

# 诊断命令
curl http://ai-proxy:8080/metrics

常见原因及解决:

1. 服务未启动 → 检查容器状态

docker ps | grep ai-proxy

2. 端口未暴露 → docker-compose.yml添加

services: ai-proxy: ports: - "8080:8080" # 显式暴露端口

3. 防火墙阻断 → 确认云服务器安全组开放8080端口

4. Prometheus与目标不在同一网络 → docker-compose添加 networks

services: prometheus: networks: - ai-network ai-proxy: networks: - ai-network networks: ai-network: driver: bridge

错误2:Token计数器始终为0(usage字段丢失)

很多中转API会过滤掉usage字段,导致无法采集Token数据。这是其他中转站的通病,但HolySheep API返回完整usage信息。

# 诊断:检查API响应是否包含usage字段
curl -X POST https://api.holysheep.ai/v1/chat/completions \
  -H "Authorization: Bearer YOUR_HOLYSHEEP_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "deepseek-v3.2", "messages": [{"role": "user", "content": "Hi"}]}'

正确响应应包含:

{

"usage": {

"prompt_tokens": 10,

"completion_tokens": 25,

"total_tokens": 35

}

}

如果使用其他中转站返回空usage,需要在代码中添加fallback估算

def get_token_count(response_json): usage = response_json.get('usage', {}) if not usage: # 使用响应长度估算(不精准但能采集数据) response_text = response_json.get('choices', [{}])[0].get('message', {}).get('content', '') return {'prompt_tokens': 0, 'completion_tokens': len(response_text) // 4, 'total_tokens': len(response_text) // 4} return usage

错误3:延迟指标数值异常(超过60秒timeout但直方图正常)

这个问题折磨了我很久。原因是Prometheus Histogram记录的延迟是服务端处理时间,不包含请求等待队列的等待时间。

# 解决方案:在请求进入时记录start_time,放入队列前就计时
@app.route('/v1/chat/completions', methods=['POST'])
def chat_completions():
    # 请求进入立即记录时间(包含队列等待)
    request_start_time = time.time()
    ACTIVE_REQUESTS.labels(model='unknown').inc()
    
    # ... 业务逻辑 ...
    
    # 正确的延迟统计(包含完整等待+处理时间)
    total_latency_ms = (time.time() - request_start_time) * 1000
    REQUEST_LATENCY.labels(model=model, provider='holysheep').observe(total_latency_ms)
    
    # 如果需要分离等待时间,用队列深度估算
    queue_wait_estimate = queue_depth * avg_processing_time
    actual_processing_time = total_latency_ms - queue_wait_estimate
    
    return jsonify(result)

验证:Grafana中使用以下PromQL对比

包含队列等待的总延迟

sum(rate(ai_api_request_duration_milliseconds_sum[5m])) / sum(rate(ai_api_request_duration_milliseconds_count[5m]))

服务端处理时间(需要在代码中单独记录)

sum(rate(ai_api_processing_duration_seconds_sum[5m])) / sum(rate(ai_api_processing_duration_seconds_count[5m])) * 1000

错误4:成本Gauge持续增长但余额充足

如果你的成本监控数值持续增长但API余额没变,可能是价格配置表过期。2026年模型价格变动频繁。

# 排查步骤

1. 确认prometheus中查询到的价格

rate(ai_api_total_cost_usd_total[1h])

2. 手动验证计算

python3 -c " input_tokens = 1000 output_tokens = 500 model = 'gpt-4.1' price_input = 2.00 / 1_000_000 # $2/MTok for gpt-4.1 input price_output = 8.00 / 1_000_000 # $8/MTok for gpt-4.1 output cost = input_tokens * price_input + output_tokens * price_output print(f'计算成本: ${cost:.6f}')

如果你用的GPT-4.1 output价格是$8但实际是$60,就是配置表过期

"

3. 更新配置表(2026最新价格)

MODEL_PRICING = { 'gpt-4.1': {'input': 2.00, 'output': 8.00}, # 2026.01更新 'gpt-4o': {'input': 2.50, 'output': 10.00}, 'claude-sonnet-4.5': {'input': 3.00, 'output': 15.00}, # 2026.01更新 'gemini-2.5-flash': {'input': 0.35, 'output': 2.50}, 'deepseek-v3.2': {'input': 0.27, 'output': 0.42}, }

我的生产环境监控架构

我在公司部署的AI监控架构经过3次迭代,现在是第4版,核心是用HolySheep AI作为统一网关,省去了维护多个API Key的麻烦。

# docker-compose.yml 完整监控栈
version: '3.8'

services:
  # AI代理服务(含Prometheus指标)
  ai-proxy:
    build: ./ai-proxy
    ports:
      - "8080:8080"
    environment:
      - HOLYSHEEP_API_KEY=${HOLYSHEEP_API_KEY}
      - API_BASE=https://api.holysheep.ai/v1
    networks:
      - monitoring
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/health"]
      interval: 30s
      timeout: 10s
      retries: 3

  # Prometheus
  prometheus:
    image: prom/prometheus:latest
    ports:
      - "9090:9090"
    volumes:
      - ./prometheus.yml:/etc/prometheus/prometheus.yml
      - ./ai_alerts.yml:/etc/prometheus/ai_alerts.yml
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.enable-lifecycle'
    networks:
      - monitoring

  # Grafana可视化
  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_PASSWORD}
    networks:
      - monitoring
    depends_on:
      - prometheus

  # Alertmanager告警
  alertmanager:
    image: prom/alertmanager:latest
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    networks:
      - monitoring

networks:
  monitoring:
    driver: bridge

volumes:
  prometheus_data:
  grafana_data:

Grafana仪表盘推荐配置

我用Grafana创建了一个AI服务监控仪表盘,核心包含4个Panel:延迟分布、Token消耗、成本趋势、错误追踪。

# Grafana面板PromQL配置

Panel 1: 请求延迟P50/P95/P99

histogram_quantile(0.50, rate(ai_api_request_duration_milliseconds_bucket[5m])) histogram_quantile(0.95, rate(ai_api_request_duration_milliseconds_bucket[5m])) histogram_quantile(0.99, rate(ai_api_request_duration_milliseconds_bucket[5m]))

Panel 2: Token消耗趋势(按input/output分组)

sum(rate(ai_api_tokens_total[1h])) by (type)

Panel 3: 累计成本(按模型分组)

sum(increase(ai_api_total_cost_usd[24h])) by (model)

Panel 4: 错误率时间序列

sum(rate(ai_api_errors_total[5m])) by (error_type) / sum(rate(ai_api_requests_total[5m]))

性能优化实战经验

我在优化AI服务监控时总结了3个关键点:

  • 抓取频率:AI服务延迟敏感,建议10-15秒抓取一次,过长会漏掉峰值数据
  • Cardinality控制:避免用UUID或长文本做label,防止Prometheus内存爆炸
  • 成本估算:用HolySheep API的¥1=$1汇率,计算成本时直接除以7.3得到的人民币价格更准确

我用HolySheep AI一年多了,最满意的3点:①国内延迟实测<50ms,比官方API快4倍;②Token数据完整,监控数据可信度高;③微信充值秒到账,不用折腾信用卡。

总结

Prometheus监控是AI服务运维的基础设施,做好指标采集能让你提前发现成本异常、性能瓶颈、可用性问题。本文提供的代码在生产环境稳定运行超过6个月,覆盖了核心监控场景。

如果你正在搭建AI服务监控,建议直接使用免费注册 HolySheep AI,获取首月赠额度