成本归属标签
成本归属标签让组织按自己的维度归属用量和成本,例如部门、事业部、子公司、项目或成本中心。组织先声明标签键,再在调用方 API Key、团队和成员上设置 key=value。每个请求按其运行时解析出的标签值归属。之后可以在 Cost Analysis 页面按这些值拆分支出,用标签预算为其封顶,并让限流策略按标签匹配和拆分流量。
标签在 AISIX Enterprise 和 AISIX Cloud 中的行为一致。
前提条件
开始之前,请准备以下内容:
- 声明标签键需要组织的 owner 或 admin 角色,或拥有
tag_keys写权限的自定义角色。在某个资源上设置标签,需要该资源的写权限。 - 每个需要归属的环境都使用会在用量上记录标签的网关。1.6.x 及更早版本的网关不会记录,参见网关版本要求。
- 使用 Admin API 示例时,需要控制面地址和具有写权限的 Admin Token:
# AISIX_CP 包含 /api,末尾不带斜杠。
# 本地 AISIX Enterprise 快速入门使用 http://localhost:8080/api。
export AISIX_CP="YOUR_AISIX_CONTROL_PLANE_API_URL"
export AISIX_TOKEN="YOUR_ADMIN_TOKEN"
export TEAM_ID="YOUR_TEAM_ID"
export ENV_ID="YOUR_ENVIRONMENT_ID"
声明标签键
标签键必须先在组织中声明,资源才能带上它。预先声明可以统一用词,避免 department 同时被写成 dept 或 Department。
- 在组织导航中打开 Tag Keys,选择 New tag key。
- 输入 Key,例如
department。 - 可以填写 Display name 和 Description。
- 选择 Declare key。
通过 Admin API 声明标签键:
curl -sS -X POST "${AISIX_CP}/tag_keys" \
-H "Authorization: Bearer ${AISIX_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"key": "department",
"display_name": "Department",
"description": "Cost center the usage is charged to."
}'
标签键遵循以下规则:
- 以小写字母开头,只包含小写字母、数字和下划线,最多 63 个字符:
^[a-z][a-z0-9_]{0,62}$。 - 声明后不能修改键本身。显示名称和描述可以随时编辑。
- 每个组织最多声明 32 个键。超出时返回
400,错误码为TAG_KEY_LIMIT;声明已存在的键返回409。 - 所有成员都可以读取已声明的键,写入需要
tag_keys写权限。
删除标签键
只要有预算或限流策略在使用某个标签键,删除就会被拒绝,返回 409,错误码为 TAG_KEY_IN_USE。错误信息会列出这些预算或策略,请先移除它们。
否则,删除会把该键从所有带有它的调用方 API Key、团队和成员上移除,之后的请求不再归属到它。已记录的用量保留当时的标签,因此已删除键的值仍会出现在已存的历史数据中。只要所选时间范围内的用量带有该键,Cost Analysis 就会继续提供它,并标记为 Deleted。
在 API Key、团队和成员上设置标签
可以在三类资源上设置标签。每个资源只带自己的标签,形式为标签键到标签值的对象:
| 资源 | 控制台 | Admin API |
|---|---|---|
| 调用方 API Key | 环境 API keys 下 Key 的创建和编辑表单中的 Cost-attribution tags 部分 | POST /environments/{environment_id}/api_keys 和 PATCH /environments/{environment_id}/api_keys/{api_key_id} |
| 团队 | Teams 下团队的创建和编辑表单 | POST /teams 和 PATCH /teams/{team_id} |
| 成员 | Members 中成员行的 Tags 面板,以及 AISIX Enterprise 中的 Create user 表单 | POST /members 和 PATCH /members/{user_id} |
控制台提供已声明的键供选择,并提示组织中该键已在使用的值。同样的建议值也可以通过 GET /tag_keys/{key}/values 获取,它列出调用方 API Key、团队和成员当前设置的最多 500 个去重值。只出现在已记录用量中的值不会列出。
标签值遵循以下规则:
- 值是 1 到 128 个字符的自由文本。
- 值不能包含换行等控制字符,也不能以空白字符(包括不换行空格和全角空格)开头或结尾。控制面会以
400拒绝这样的值。 - 资源
tags中的每个键都必须已在组织中声明。
在 Admin API 中,PATCH 会整体替换 tags 对象,请发送要保留的完整集合。发送 null 或 {} 清空所有标签,不传 tags 则保持不变。例如,以下请求为团队设置两个标签:
curl -sS -X PATCH "${AISIX_CP}/teams/${TEAM_ID}" \
-H "Authorization: Bearer ${AISIX_TOKEN}" \
-H "Content-Type: application/json" \
-d '{
"tags": {
"department": "rnd",
"subsidiary": "emea"
}
}'
成员的标签属于其在本组织中的成员资格,而不属于其账号。admin 可以修改成员的标签;修改成员角色仍然需要 owner。通过邀请、单点登录或 SCIM 目录同步加入的成员一开始没有标签。由目录同步管理的成员,其标签也可以在控制台和 Admin API 中编辑。目录同步既不读取也不写入标签,因此标签不会从身份提供方同步。