Recette : budgets & garde-fous FinOps
Objectif : « les agents de cette équipe arrêtent de dépenser à 500 $/mois » — déclaré une fois, appliqué en direct, avec des seuils d’alerte en chemin vers le haut.
L’application des budgets est l’une des actuations qui est active dans le
binaire par défaut : un budget contraignant à son plafond refuse la dépense
sans provisioning supplémentaire (le catalogue des modules
le marque v1 | v1).
Créer un budget
Section intitulée « Créer un budget »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" }'- L’argent est en micro-USD (
limit_micro_usd: 500000000= 500 $), de sorte qu’il n’y a aucune ambiguïté de flottant dans le contrat. dimension+keydélimitent le budget. Les dimensions délimitables incluentglobal,model,provider,agent,session,team,project,workspace,api_key,actor,service_tier,context_window,inference_geo,gatewayetidentity.actionest le mode d’application :
action | Au plafond |
|---|---|
alert (défaut) | showback uniquement — les alertes se déclenchent, rien n’est refusé |
throttle | le seam d’actuation ralentit la nouvelle dépense |
block | le seam d’actuation refuse la nouvelle dépense |
Budgéter une seule identité
Section intitulée « Budgéter une seule identité »dimension: "identity" délimite sur l’external id d’une identité de roster
ferme — l’identité de charge de travail ou d’agent que vos
sources d’identité ont enregistrée :
{ "dimension": "identity", "key": "spiffe://corp/agent/billing-reconciler", "limit_micro_usd": 50000000, "period": "monthly", "action": "throttle" }L’identité est résolue à l’ingestion du coût à partir de la liaison d’agent, de la clé d’API ou de l’acteur de l’échantillon — de sorte que le budget suit l’identité à travers les surfaces, et non une seule clé d’API.
La voir à l’œuvre
Section intitulée « La voir à l’œuvre »# 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"Au plafond, le check d’un budget contraignant retourne allowed: false avec
l’action (throttle ou block) et le budget qui s’est déclenché — le refus
nomme sa raison. Les alertes circulent aussi sur le flux de notifications, de
sorte qu’une destination Slack ou PagerDuty
entend le franchissement des 80 % avant le refus à 100 %.
Dans la console, Cost & FinOps affiche la dépense par dimension avec le statut du budget en ligne :
Donner un dénominateur à la dépense : les résultats
Section intitulée « Donner un dénominateur à la dépense : les résultats »Le coût par résultat est ce qui fait d’un budget une conversation métier. Rapportez les résultats (un ticket résolu, une PR mergée, un dossier clos) et lisez les panneaux de valeur :
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"Le résumé de valeur inclut le risque d’annulation — la consommation sans résultats — qui est l’inverse honnête d’une métrique de succès.
- Fail-open, délibérément : si le check du budget lui-même échoue (un échec de lecture FinOps), l’inférence est autorisée plutôt que bloquée silencieusement — un compteur cassé ne doit pas devenir une panne. L’échec est journalisé et visible.
- La capacité réservée (
reserved_micro_usd) compte dans la limite, de sorte qu’un budget ne peut pas être contourné par une pré-réservation. cost_typen’est délibérément pas une dimension de budget — les lignes de fallback estimé circulent sur la dimension à laquelle elles appartiennent au lieu de former un pool parallèle.