Métriques & Billing @Cloudwatt

Les métriques dans un Cloud Provider Public

Pierre Souchay <pierre.souchay@cloudwatt.com>
Ala Rezmerita <ala.rezmerita@cloudwatt.com>

Qui sommes nous?


  • Pierre Souchay
    • Software Architect

  • Ala Rezmerita
    • Ingénieur de développement
    • Contributeur Openstack
    • Ceilometer/Tempest/Horizon/Flame/…

Cloudwatt

  • Cloud public français
  • Depuis mars 2015 appartient 100% à Orange
  • Opensource ADN
openstack

Metriques @Cloudwatt

collectd

Metriques @Cloudwatt

collectd
  • Collecte : instance collectd locale par serveur/VM
  • Transport : collectd (via plugin write_graphite)
  • Stockage : Graphite (carbon/whisper)
  • Visualisation : Graphite (graphite-web) ou Grafana

  • Alertes : Nagios

Metriques collectd @Cloudwatt


  • Système (cpu, load, memory, df, swap)
  • Réseau (interface)
  • Services (HAProxy, Nginx, MySQL, etc)

Instrumentation des HAProxy

  • Disponibilités des backends
  • Temps de réponse des APIs
  • Codes d'erreurs HTTP (12345X)
  • Statistiques exportées vers whisper

Metriques Openstack @Cloudwatt


  • Plugins collectd écrits en Python
  • Utilisent les bibliotheques python-XXXclient
  • Interogent les API Cloudwatt internes





https://github.com/cloudwatt/openstack-metering

Metriques Openstack @Cloudwatt

Quantité et état de…

  • Users, Tenants (keystone)
  • Services (nova, cinder)
  • Utilisation et types d'images pub/privées (glance)
  • Flavors (nova)
  • Volumes (cinder)
  • Stacks/bundle (heat)
  • États des instances (active, error, rescue…)

Tenants (keystone)



images

Utilisation des images publiques (glance)


images

Flavors (nova)



images

Plugin de gestion de la capacité

Context Cloudwatt

  • Plusieurs aggregats nova
  • Plusieurs filtres pour le placement des VMs
    • type d'image (Ubuntu, Debian, Windows, etc)
    • type de nova flavor (tiny, small, standard, etc)

Plugin de gestion de la capacité


  • Surveille le taux d'utilisation des ressources
  • Calcule la place encore disponible dans chaque aggregat
  • Déclenchement des alarmes nagios quand seuils d'alerte sont atteints
  • Permet d'anticiper les ajustements d'infrastructure

Plugin de gestion de la capacité

Aggregat normal 1/2

images

Plugin de gestion de la capacité

Aggregat Windows 2/2

images

Billing & Métriques @Cloudwatt

Que faire payer ?


  • Les resources sur des tenants
  • Les services additionnel (ex: connexion directe)

Qui paye ?

Le compte payeur

  • Un identifiant de compte payeur
  • un email de facturation
  • Un moyen de paiement (CB ou Virement)
  • Des tenants pour lesquels il paye et qu'il possède
  • Des produits additionels (ex: connexion directe…)
  • Peut avoir des sous-comptes pour lesquels il paye

Qu'y-a-t-il dans Openstack ?

Les tenants
Toute les resources sont scopées dans un tenant
Fonctionnement avec bus de messages
On peut écouter ce qui se passe
Les métriques
Tout dans Ceilometer

Ce qu'il n'y a pas dans Openstack

Le compte payeur
Pas de notion de regroupement de tenants
Qui possède et paye
Pas de notion propriété sur un tenant,
Openstack ne gère que les accès

Ce qu'il n'y a pas dans Openstack

Le compte payeur
Pas de notion de regroupement de tenants
Qui possède et paye
Pas de notion propriété sur un tenant,
Openstack ne gère que les accès
Les produits multi-tenants
Déjà dit : Openstack ne gère que les accès

Ce qu'il n'y a pas dans Openstack

Le compte payeur
Pas de notion de regroupement de tenants
Qui possède et paye
Pas de notion propriété sur un tenant,
Openstack ne gère que les accès
Les produits multi-tenants
Déjà dit : Openstack ne gère que les accès

Lors du provisioning…

  1. On créé un compte payeur (hors Openstack)
  2. On créé un tenant dans Openstack
  3. On rattache ce tenant à UN compte payeur
  4. On ajoute nos produits multi-tenants

…Et à la fin du mois…

Pour chaque compte payeur, on liste les tenants, on fait la somme des métriques Ceilometer et c'est gagné !

…Et à la fin du mois…

Pour chaque compte payeur, on liste les tenants, on fait la somme des métriques Ceilometer et c'est gagné !
Beer time!

…Et à la fin du mois…

Pour chaque compte payeur, on liste les tenants, on fait la somme des métriques Ceilometer et c'est gagné !
works on devstack

Ça marche mal™

Cas d'erreurs

  • On tue sauvagement une VM: pas d'ID Openstack
  • Appels avec identifiants incorrects (ex: opération avec token scopé par admin)
  • Gare aux états des VMs indiqués dans Nova…

Vous avez déjà regardé les transitions d'état des VMs ?

 

Attention, il y a un piège…

ERROR = VM allumée ou pas :-)

Ça marche mal™

Ceilometer inadapté si…

Soit 'n' et 'm' 2 valeurs trop petites


  • Vous avez plus de 'n' tenants
  • Vous voulez conserver les données plus de 'm' jours
 
  • Vous voulez facture les requêtes Object Storage (Swift) : la volumétrie tue Ceilometer (1 Millions de requêtes Web = 1 Million métriques Swift dans Ceilometer)

Solutions retenues @Cloudwatt

Swift

  • Ceilometer fait du polling pour la taille de Swift, on récupère la valeur, on l'ajoute à la valeur existante, puis >/dev/null
  • Ecriture d'un middleware Swift pour regrouper la consommation par tenant: le nombre de métriques Ceilometer devient prédictible

Solutions retenues @Cloudwatt

Nova, Neutron, Glance, Cinder…

  • Ajout d'un collecteur indépendant sur le bus OSLO pour récupérer les changements d'états des resources, ajout d'informations sur la région
  • Base de données avec changements d'états ⇒ Calcul heure par heure des états, prise en compte des cas particuliers (Resize de VM qui donne cas erreur mais qui marche etc…)

Conclusion

   ,
_,,)\.~,,._
(()`  ``)\))),,_
 |     \ ''((\)))),,_          ____
 |6`   |   ''((\())) "-.____.-"    `-.-,
 |    .'\    ''))))'                  \)))
 |   |   `.     ''                     ((((
 \, _)     \/                          |))))
  `'        |                          (((((
            \                  |       ))))))
             `|    |           ,\     /((((((
              |   / `-.______.<  \   |  )))))
              |   |  /         `. \  \  ((((
              |  / \ |           `.\  | (((
              \  | | |             )| |  ))
               | | | |            / | |  '
               | | /_(           /_(/ /
               /_(/__]           \_/_(
              /__]                /__]


Le billing, c'est mon dada

Questions ?