OpenKeel: the sovereign French Cloud solution of the inherent group, with a European reach Discover inherent

Architecture

FinOps / GreenOps and CloudKitty

What a project cost, what it would cost and what it emits: CloudKitty rates the usage after the fact, openkeel-pricing quotes cost and carbon now, and Skyline shows both.

From the metrics to the dashboard

  1. 01

    Prometheus

    openstack-exporter series (instances, volumes, images) in the Prometheus of the observability stack

  2. 02

    CloudKitty processor

    Collects each project's usage every hour and prices it with hashmap rules and CEL scripts

  3. 03

    InfluxDB

    Keeps the rated history per project, period and service

  4. 04

    Skyline

    The FinOps / GreenOps page reads the summaries; the forms and the quota popup read openkeel-pricing

Two services that complement each other

rating

CloudKitty: what did it cost?

  • Rates the collected usage, period by period
  • Keeps the history; summaries, dataframes, reprocessing
  • OpenStack's API, unchanged for its clients
Learn more
pricing

openkeel-pricing: what would it cost now, and what does it emit?

  • Unit cost and carbon footprint of each resource, per project
  • Quotes of resources being built (VM from its flavor, volumes, S3, DNS, VPN)
  • An OpenKeel addition, with no OpenStack original, installed by default

CloudKitty in OpenKeel

The rating service rewritten in Go from the reverse-spec of stable/2026.2: the same 66 API operations (v1, hashmap, pyscripts, v2), status codes, error bodies and policies.

PartOpenKeel
API (cloudkitty-api)Rules, modules, summaries, dataframes and instant quotes; quotes computed in the API with the same rating code
Processor (cloudkitty-processor)Lists the projects (Keystone fetcher: every enabled project), collects their usage from Prometheus every period (1 hour), rates it and stores it; one active processor holds a Kubernetes Lease
Ratinghashmap rules (services, fields, mappings, thresholds), and scripts written as CEL expressions instead of Python: no statements, no I/O, cost and time limits
StorageInfluxDB 1.x or 2.x (InfluxQL with escaped literals); MariaDB Galera for the rules and the scope state
Collected seriesThe upstream metric file on openstack-exporter: instances (openstack_nova_server_status), volume capacity (openstack_cinder_limits_volume_used_gb), image size (openstack_glance_image_bytes), projects labelled tenant_id
DeploymentOptional component: okadm install --components …,cloudkitty --grafana; okadm turns openstack-exporter on and points the collector at the stack's Prometheus; lab: one processor, InfluxDB 2 GiB
Fixed upstream defectsScoped deletes, policy of GET /v2/rating/modules, quotes with a flat desc, no unverified Keystone call, reprocessing and reset windows

Tests, features left out and the API inventory are on the CloudKitty component page.

openkeel-pricing and the OpenKeelTenant rates

The rates are Kubernetes resources, OpenKeelTenant (CRD installed by okadm in both modes): the one named default applies to every project without its own. openkeel-pricing watches them in memory, with no database or bus.

ResourceUnitRate
cpuvCPUcost and carbon per month
ramGiBcost and carbon per month
gpuGPUcost and carbon per month
diskGiBcost and carbon per month
s3GiBcost and carbon per month
dnsdomaincost and carbon per month
vpnVPNcost and carbon per month

API: GET /v1/rates (effective rates and the OpenKeelTenant each comes from) and POST /v1/quotes (a flavor, a count and resources: lines and totals of cost and carbon). Costs in € per month, carbon in kg CO₂e per month (× 12 for the year).

Sample data with okadm --demo

With CloudKitty selected, okadm install --demo pushes one rated frame per day for the demo project, from the first day of last month to yesterday (its VM, volume, load balancer, container and floating IPs with their real ids, a VM deleted last month, the base image), then creates the project's scope state so that the processor rates it from today on. The FinOps / GreenOps page shows both months at once.