CloudKitty : combien cela a-t-il coûté ?
- Valorise l'usage collecté, période par période
- Garde l'historique ; résumés, dataframes, revalorisation
- L'API d'OpenStack, inchangée pour ses clients
OpenKeel : la solution Cloud souveraine, française à portée européenne du groupe inherent Découvrir inherent
Architecture
Ce qu'un projet a coûté, ce qu'il coûterait et ce qu'il émet : CloudKitty valorise l'usage après coup, openkeel-pricing chiffre coût et carbone tout de suite, et Skyline montre les deux.
Séries d'openstack-exporter (instances, volumes, images) dans le Prometheus de la pile d'observabilité
Collecte chaque heure l'usage de chaque projet et le valorise avec des règles hashmap et des scripts CEL
Garde l'historique valorisé par projet, période et service
La page FinOps / GreenOps lit les résumés ; les formulaires et la popup des quotas lisent openkeel-pricing
Le service de valorisation réécrit en Go depuis la reverse-spec de stable/2026.2 : les mêmes 66 opérations d'API (v1, hashmap, pyscripts, v2), codes de statut, corps d'erreur et politiques.
| Partie | OpenKeel |
|---|---|
API (cloudkitty-api) | Règles, modules, résumés, dataframes et devis instantanés ; devis calculés dans l'API avec le même code de valorisation |
Processor (cloudkitty-processor) | Liste les projets (fetcher Keystone : chaque projet activé), collecte leur usage dans Prometheus à chaque période (1 heure), le valorise et le stocke ; un seul processor actif détient un Lease Kubernetes |
| Valorisation | Règles hashmap (services, champs, correspondances, seuils), et scripts écrits en expressions CEL au lieu de Python : ni instructions ni E/S, limites de coût et de temps |
| Stockage | InfluxDB 1.x ou 2.x (InfluxQL avec littéraux échappés) ; MariaDB Galera pour les règles et l'état des scopes |
| Séries collectées | Le fichier de métriques amont sur openstack-exporter : instances (openstack_nova_server_status), capacité des volumes (openstack_cinder_limits_volume_used_gb), taille des images (openstack_glance_image_bytes), projets étiquetés tenant_id |
| Déploiement | Composant optionnel : okadm install --components …,cloudkitty --grafana ; okadm active openstack-exporter et oriente le collecteur vers le Prometheus de la pile ; lab : un processor, InfluxDB 2 Gio |
| Défauts amont corrigés | Suppressions limitées au scope, politique de GET /v2/rating/modules, devis avec un desc à plat, aucun appel Keystone non vérifié, fenêtres de revalorisation et de remise à zéro |
Tests, fonctions laissées de côté et inventaire de l'API sont sur la page du composant CloudKitty.
Les tarifs sont des ressources Kubernetes, OpenKeelTenant (CRD installée par okadm dans les deux modes) : celle nommée default s'applique à tout projet qui n'a pas la sienne. openkeel-pricing les surveille en mémoire, sans base de données ni bus.
| Ressource | Unitaires | Tarif |
|---|---|---|
| cpu | vCPU | coût et carbone par mois |
| ram | GiB | coût et carbone par mois |
| gpu | GPU | coût et carbone par mois |
| disk | GiB | coût et carbone par mois |
| s3 | GiB | coût et carbone par mois |
| dns | domaine | coût et carbone par mois |
| vpn | VPN | coût et carbone par mois |
API : GET /v1/rates (tarifs effectifs et l'OpenKeelTenant d'où vient chacun) et POST /v1/quotes (un gabarit, un nombre et des ressources : lignes et totaux de coût et de carbone). Coûts en € par mois, carbone en kg CO₂e par mois (× 12 pour l'année).
Avec CloudKitty, okadm install --demo pousse une trame valorisée par jour pour le projet démo, du premier jour du mois dernier à hier (sa VM, son volume, son load balancer, son conteneur et ses IP flottantes avec leurs vrais identifiants, une VM supprimée le mois dernier, l'image de base), puis crée l'état du scope du projet pour que le processor le valorise à partir d'aujourd'hui. La page FinOps / GreenOps montre les deux mois d'un coup.