Token 用量分摊计费
简介
本指南通过遵循平台的 自定义成本模型 工作流,为 AI Gateway token 用量定义一个自定义成本模型。其结构与官方的 vGPU (Hami) 成本模型 指南一致:先在 Cost Management agent 集群上添加采集配置,再在 Cost Management server 集群上添加展示/存储配置,然后在平台控制台中为该成本模型添加价格。
Cost Management 会消费由 Metering Token Usage 收集的 OpenTelemetry GenAI token 指标,并以 user_namespace 标签为键,将其转换为按命名空间计费的账单。在多集群部署中,Cost Management server 和 Cost Management agent 可能位于不同集群;下面每一步都会注明其必须执行的集群。
使用场景
- 按命名空间或租户对其消耗的 AI Gateway token 进行计费。
- 按模型设置单价,使更昂贵的模型每个 token 的成本更高。
- 使用与仪表盘相同的指标生成可审计的分摊计费报告。
前提条件
-
已配置 Metering Token Usage:
PodMonitor正在收集 token 指标,且控制器将x-user-namespace:user_namespace映射到系列上,使其携带user_namespace标签。请确认可以从 agent 集群的平台 Prometheus(或 Thanos)中查询到该指标: -
已安装 Cost Management:server 集群上安装了
cost-server和cost-api,每个需要计费其 AI Gateway 流量的集群上安装了cost-agent。参见 Cost Management 安装。 -
具有访问两个集群的
kubectl权限,并拥有在cpaas-system(agent 集群)和kube-public(server 集群)中写入ConfigMap的权限。
步骤
添加采集配置
集群: Cost Management agent 集群——即运行 AI Gateway 且安装了 cost-agent 的集群。cost-agent 组件以 slark-agent 工作负载的形式部署,下面的重启命令会作用于该工作负载。
创建一个 ConfigMap,用于告诉 Cost Management agent 应评估哪个 Prometheus 查询,以及如何将其标签映射到 Cost Management 维度。agent 会发现位于 cpaas-system 中、带有 cpaas.io/slark.collection.config: "true" 标签的配置。
字段说明:
kind:Cost Management collector 的类型,同时也是 collector 的名称(在采集配置中必须保持唯一)。Pod保留给 OpenCost 输出的 pod 指标,Project保留给平台内置的 CPU/Memory/Storage 配额 collector。AI Gateway token 用量使用专用的自定义类型AIGateway,与 vGPU/NPU/pGPU 自定义类型模式一致——这是在集群上验证、用于将cost.usage填充为AIGatewayTokenUsage行的值。应用此配置后,请先确认已出现对应行(参见 Troubleshooting 中的cost.usage检查),再继续下一步。category、item:用于将此采集配置与下一步中的展示/存储配置关联起来的标识符。两个值都必须与展示/存储配置中的相应字段一致。period:聚合周期。按小时计费请使用Hourly。usage.query:agent 每个step执行一次的 PromQL 查询。平台会将该指标以保留点号的 OpenTelemetry UTF-8 名称存储,因此应使用{__name__="gen_ai.client.token.usage_token_sum"}选择它,并使用带引号的 UTF-8 语法引用带点的gen_ai.request.model标签。通过 header 映射得到的user_namespace标签是按命名空间计费的键。usage.step:查询的评估间隔。usage.mappers:将 PromQL 标签映射到 Cost Management 的标准维度(name、namespace、cluster、project)。将cluster设为空字符串,这样 agent 会自动填入自己的集群身份;如果将其设置为某个标签名(例如cluster),则只有当源指标暴露了该标签时才会生效,否则每一行都会被丢弃且不会留下日志。
应用 YAML 后,重启 slark-agent 工作负载(即 cost-agent 组件)以重新加载配置:
添加展示配置
集群: Cost Management server 集群——即安装了 cost-server 的集群(通常是全局控制平面)。cost-server 组件以 slark-server 工作负载的形式部署,下面的重启命令会作用于该工作负载。
创建一个 ConfigMap,在平台控制台中注册计费项及其计费方式。server 会发现位于 kube-public 中、带有 cpaas.io/slark.display.config: "true" 标签的配置。
字段说明:
name:在成本模型表单中显示的计费项名称。必须与采集配置中的category值一致。methods[].name:计费方式,在添加价格时会显示在计费项下方。methods[].item:必须与采集配置中的item值一致,以便 server 能将按方式设置的单价与用量行关联起来。divisor:用于显示用量时的单位换算因子。token 没有单位,因此设置为1;对于字节级项目,使用1073741824以显示为Gi-hours。
下表总结了此配置注册的计费方式:
请勿修改平台预置的 slark-server-common-config(包含 CPU、Memory 和 Storage 的默认展示配置)。向其中添加自定义条目会导致 server 在启动时校验失败。请始终将自定义计费项作为单独的、带有 cpaas.io/slark.display.config: "true" 标签的 ConfigMap 添加。
应用 YAML 后,重启 slark-server 工作负载(即 cost-server 组件)以重新加载配置:
向成本模型添加价格
集群: 任意集群——通过由 cost-api 提供服务的平台控制台进行操作。
在平台控制台中,进入 Administrator → Metering and Billing → Cost Model,然后创建或编辑一个成本模型。新注册的 AI tokens 计费项现在可以在价格表单中选择。
- Cost Model Name:任意标识符,例如
aml-cost-model。 - Linked Clusters:选择该模型应对其 AI Gateway 流量计费的集群。即使留空也能成功保存,但不会匹配任何用量数据,也不会生成账单。
- Pricing rows:
- Billing Item:
AI tokens - Billing Method:
Token Usage - Default Price:按 token 计费的价格,使用平台币种。
- Price By Label(可选):按模型覆盖价格,例如对
gen_ai.request.model="gpt-4o"设置更高费率。
- Billing Item:
- 保存。
验证
cost-server worker 每五分钟运行一次。请通过 AI Gateway 发起几次已认证请求,并使用不同的 x-user-namespace 值,至少等待一个 worker 周期后刷新平台控制台。
- Cost Details(Administrator → Metering and Billing → Cost Details)会显示按命名空间划分的 AI tokens 明细。可按命名空间或日期筛选以进一步查看。
- Cost Statistics(Administrator → Metering and Billing → Cost Statistics)会按集群、项目和时间范围汇总相同数据。
如需在打开 UI 之前进行服务端验证,可在 server 集群上查询 ClickHouse:
预期结果是每个消耗 token 的(命名空间,小时)组合都有一行。cost 列存储的是平台的微货币单位,因此 usage × default_price × 1_000_000 应与显示值一致。
故障排查
了解更多
下一步
在生成账单后,可在 Price By Label 下设置按模型的价格覆盖,以反映各模型的相对成本,并定期导出 cost.bills 用于财务报表。