跳转到内容

配方:预算与 FinOps guardrail

目标: “这个团队的 agent 在每月 $500 处停止花钱” —— 声明一次、实时强制执行,并在 逼近过程中带有告警阈值。

预算强制执行是在默认二进制中即可生效的几种执行(actuation)之一:一个处于上限的强制 预算会拒绝该支出,无需任何额外预配(modules 目录将其 标记为 v1 | v1)。

Terminal window
curl -ks -X POST "$BASE/v1/m/finops/budgets" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" \
-H 'Content-Type: application/json' \
-d '{
"dimension": "team",
"key": "payments",
"limit_micro_usd": 500000000,
"period": "monthly",
"thresholds": [0.5, 0.8, 1.0],
"action": "block"
}'
  • 金额以 micro-USD 为单位limit_micro_usd: 500000000 = $500),因此契约中不存在 浮点歧义。
  • dimension + key 界定预算的范围。可界定范围的 dimension 包括 globalmodelprovideragentsessionteamprojectworkspaceapi_keyactorservice_tiercontext_windowinference_geogateway 以及 identity
  • action 是强制执行模式:
action到达上限时
alert(默认)仅 showback —— 触发告警,不拒绝任何东西
throttle执行 seam 放慢新增支出
block执行 seam 拒绝新增支出

dimension: "identity" 以一个 firm 名册身份的 external id 为范围 —— 即你的 身份来源所注册的工作负载或 agent 身份:

{ "dimension": "identity", "key": "spiffe://corp/agent/billing-reconciler",
"limit_micro_usd": 50000000, "period": "monthly", "action": "throttle" }

该身份在成本摄取(cost-ingest)时从样本的 agent 绑定、API key 或 actor 解析得出 —— 因此预算会跨表面跟随该身份,而非跟随某一个 API key。

Terminal window
# Live consumption vs limit, with run-rate projection:
curl -ks "$BASE/v1/m/finops/budgets/$BUDGET_ID/status" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT"
# Threshold crossings (your 50% / 80% / 100% alerts):
curl -ks "$BASE/v1/m/finops/alerts" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT"

到达上限时,一个强制预算的检查会返回 allowed: false,连同其动作(throttleblock)以及触发的预算 —— 该拒绝会道出它的理由。告警也会搭乘通知流,因此一个 Slack 或 PagerDuty 目的地会在 100% 拒绝之前就听到 80% 的越线。

在控制台中,Cost & FinOps 按 dimension 展示支出,并内联显示预算状态:

带支出趋势与预算态势的 Cost & FinOps 视图。 带支出趋势与预算态势的 Cost & FinOps 视图。

cost-per-outcome 才是让预算成为一场业务对话的关键。上报 outcome(一张已解决的工单、一个 已合并的 PR、一个已关闭的案件),然后读取价值面板:

Terminal window
curl -ks -X POST "$BASE/v1/m/finops/outcomes" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT" \
-d '{"kind":"ticket.resolved","subject_ref":"agent:support-triage","count":1}'
curl -ks "$BASE/v1/m/finops/value" \
-H "Authorization: Bearer $TOKEN" -H "X-Olivares-Tenant: $TENANT"

价值摘要包含 cancellation risk —— 没有任何 outcome 的烧钱 —— 它是成功度量的诚实 反面。

  • 刻意的 fail-open: 如果预算检查本身出错(一次 FinOps 读取失败),推理会被放行而非 被悄无声息地阻断 —— 一个坏掉的计量表绝不能变成一次停机。该故障会被记录并可见。
  • 预留容量(reserved_micro_usd)计入上限,因此预算无法通过预先占用来规避。
  • cost_type 被刻意排除在预算 dimension 之外 —— 估算回退(estimated-fallback)的 条目会搭乘它们所属的那个 dimension,而不是另立一个平行池。