Aller au contenu

Recette : budgets & garde-fous FinOps

Les budgets et l’analyse des dépenses FinOps sont des fonctions Business. Community conserve le suivi des coûts par session et l’exportation des données. Les budgets enregistrés avant 0.1 restent consultables et supprimables, et sont appliqués tant que le module FinOps est actif ; Community ne peut pas les créer ni les modifier. Les évaluations et les environnements de test restent dans Community.

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).

Fenêtre 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"
}'
  • 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 + key délimitent le budget. Les dimensions délimitables incluent global, model, provider, agent, session, team, project, workspace, api_key, actor, service_tier, context_window, inference_geo, gateway et identity.
  • action est 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

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.

Fenêtre 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"

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, Budgets affiche la consommation par rapport à chaque limite, avec la projection du rythme de dépense.

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 :

Fenêtre 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"

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.

  • Refusé quand le registre ne peut pas être lu : si l’admission budgétaire ne peut pas être établie (FinOps ne peut pas lire son registre), le proxy d’inférence refuse l’appel avec 503, la raison budget store unreachable (deny-closed) et x-should-retry: false, plutôt que de laisser passer une dépense non mesurée. Parmi les gates propres au moteur, seul le lancement de session garde une posture configurable pour ce cas (OLIVARES_SESSION_BUDGET_AVAILABILITY).
  • 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_type n’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.