必须在请求头中注入统一命名的x-client-id标识并贯穿全链路,通过nginx或go中间件透传校验,再经日志解析、时序存储与grafana看板实现按客户端统计调用量和费用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

要让多个客户端共用一个Grok API密钥但又能分别统计各自调用量和费用,必须在请求链路中注入可识别的客户端标识,并确保该标识能贯穿计费、日志、聚合全链路。
在请求头中注入客户端唯一标识
所有客户端发起Grok API调用时,必须在HTTP请求头中携带统一命名的标识字段,推荐使用 【X-Client-ID】。这个字段值需由你统一分配,不能由客户端自行生成或伪造——否则无法用于分账审计。
例如:curl -H "X-Client-ID: client-prod-001" -H "Authorization: Bearer sk-xxx" https://api.x.ai/v1/chat/completions
这一步不可跳过。若跳过,后续所有统计都将失去客户端维度,变成“谁调用都算在一起”的黑盒账单。
通过反向代理层做标识透传与日志打点
方法一:Nginx反向代理 + $http_x_client_id 变量记录
在Nginx配置中,将客户端标识透传给上游Grok网关,并同步写入本地访问日志:
log_format grok_with_client '$time_iso8601\t$http_x_client_id\t$request_method\t$uri\t$status\t$upstream_response_time\t$bytes_sent';
access_log /var/log/nginx/grok_access.log grok_with_client;
proxy_set_header X-Client-ID $http_x_client_id;
方法二:自研Go中间件拦截并注入上下文
用Go编写轻量HTTP中间件,在ServeHTTP中提取X-Client-ID,封装进context,并异步推送至统计通道:
clientID := r.Header.Get("X-Client-ID")
if clientID == "" { http.Error(w, "missing X-Client-ID", http.StatusBadRequest); return }
ctx = context.WithValue(r.Context(), ctxKeyClientID, clientID)
// 后续调用Grok前,从ctx取值拼入日志/指标/trace
【务必校验clientID格式:只允许字母、数字、短横线,长度3–32位,否则拒绝转发】
构建按客户端聚合的用量看板
第一步:从原始日志中提取结构化数据
用Logstash或Fluent Bit将Nginx日志解析为JSON,关键字段包括:client_id、model、input_tokens、output_tokens、timestamp、status。
第二步:写入时序数据库(如Prometheus或VictoriaMetrics)
定义指标名:grok_api_calls_total{client_id="client-prod-001", model="grok-beta", status="200"}
第三步:在Grafana中配置Prometheus数据源,创建仪表盘
添加Panel,使用PromQL查询各客户端过去24小时调用量:
sum by (client_id) (rate(grok_api_calls_total[24h]))
再叠加Token消耗量对比图:
sum by (client_id) (rate(grok_api_input_tokens_total[24h]))
sum by (client_id) (rate(grok_api_output_tokens_total[24h]))
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











