Ir al contenido

Receta: presupuestos y guardrails de FinOps

Los presupuestos y el análisis de gasto de FinOps son funciones de Business. Community conserva el seguimiento de costes por sesión y la exportación de datos. Los presupuestos guardados antes de 0.1 se pueden consultar y eliminar, y se aplican mientras el módulo FinOps esté activo; Community no puede crearlos ni modificarlos. Las evaluaciones y los entornos de prueba siguen en Community.

Objetivo: “los agentes de este equipo dejan de gastar a 500 $/mes” — declarado una vez, aplicado en vivo, con umbrales de alerta en el camino de subida.

La aplicación de presupuestos es una de las actuaciones que están operativas en el binario por defecto: un presupuesto en modo enforcing al llegar a su tope deniega el gasto sin aprovisionamiento adicional (el catálogo de módulos lo marca como v1 | v1).

Ventana de terminal
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"
}'
  • El dinero está en micro-USD (limit_micro_usd: 500000000 = 500 $), de modo que no hay ambigüedad de coma flotante en el contrato.
  • dimension + key acotan el presupuesto. Las dimensiones acotables incluyen global, model, provider, agent, session, team, project, workspace, api_key, actor, service_tier, context_window, inference_geo, gateway e identity.
  • action es el modo de aplicación:
action En el tope
alert (por defecto) solo showback — las alertas se disparan, no se deniega nada
throttle el seam de actuación ralentiza el nuevo gasto
block el seam de actuación deniega el nuevo gasto

dimension: "identity" acota sobre el external id de una identidad de roster firme — la identidad de workload o de agente que registraron tus fuentes de identidad:

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

La identidad se resuelve en la ingesta de coste a partir del binding de agente, la clave de API o el actor de la muestra — de modo que el presupuesto sigue a la identidad a través de las superficies, no a una sola clave de API.

Ventana de terminal
# 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"

En el tope, la comprobación de un presupuesto en modo enforcing devuelve allowed: false con la acción (throttle o block) y el presupuesto que se disparó — la denegación nombra su motivo. Las alertas también viajan por el flujo de notificaciones, de modo que un destino de Slack o PagerDuty oye el cruce del 80 % antes de la denegación del 100 %.

En la consola, Budgets muestra el consumo frente a cada límite, con la proyección del ritmo de gasto.

Darle al gasto un denominador: los resultados (outcomes)

Sección titulada «Darle al gasto un denominador: los resultados (outcomes)»

El coste-por-resultado es lo que convierte un presupuesto en una conversación de negocio. Reporta resultados (un ticket resuelto, un PR mergeado, un caso cerrado) y lee los paneles de valor:

Ventana de terminal
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"

El resumen de valor incluye el riesgo de cancelación — consumo sin resultados — que es el inverso honesto de una métrica de éxito.

  • Se deniega cuando no se puede leer el libro mayor: si la admisión del presupuesto no se puede establecer (FinOps no puede leer su libro mayor), el proxy de inferencia rechaza la llamada con 503, la razón budget store unreachable (deny-closed) y x-should-retry: false, en lugar de dejar pasar gasto sin medir. Entre los gates propios del motor, solo el lanzamiento de sesión conserva una postura configurable para este caso (OLIVARES_SESSION_BUDGET_AVAILABILITY).
  • La capacidad reservada (reserved_micro_usd) cuenta hacia el límite, de modo que un presupuesto no puede esquivarse reservando por adelantado.
  • cost_type deliberadamente no es una dimensión de presupuesto — las líneas de fallback estimado viajan por la dimensión a la que pertenecen en lugar de formar un pool paralelo.