3 min de lectureMis à jour le
Un driver OTLP pour OSProfiler : tracer OpenStack avec Jaeger
OSProfiler dispose d'un driver OpenTelemetry (OTLP) qui remplace le driver Jaeger client abandonné : comment l'activer, l'utiliser, et ce que l'on peut en lire. Une contribution OpenStack soutenue par la Société Générale.
Par Sahid Orentino Ferdjaoui
Pourquoi tracer OpenStack
Dans l'écosystème OpenStack, performance et fiabilité sont déterminantes. On pourrait croire que les détails des échanges entre services et des requêtes en base de données n'intéressent pas l'opérateur de la plateforme. Ils sont pourtant indispensables pour comprendre et exploiter l'architecture : ils permettent d'identifier les goulots d'étranglement — jusqu'à la conception et au modèle de données — et d'aider la communauté à corriger ce qui cause des lenteurs. C'est le rôle d'OSProfiler.

Qu'est-ce que le profiling ?
Le profiling est une technique d'analyse du comportement d'une application : temps d'exécution, utilisation de la mémoire, interactions entre composants.
OSProfiler est un outil de profiling conçu pour les services OpenStack. Il offre une interface unifiée pour collecter des traces de toutes les composantes, de Nova à Neutron et au-delà. Une trace suit une requête de bout en bout ; elle est faite de spans, chacun représentant une étape (un appel d'API, une requête SQL) avec sa durée et son parent. On voit ainsi quel service attend quel autre, et où le temps passe.
OSProfiler utilise différents backends, via des drivers. Mais le projet souffrait d'un manque de contributions, et depuis l'abandon de la bibliothèque Jaeger client, il n'était plus raisonnable de s'en servir pour envoyer des traces vers l'interface Jaeger d'une plateforme en production.
Une contribution soutenue par la Société Générale
La Société Générale souhaitait contribuer à OpenStack et profiter pleinement d'un service de profiling pour ses plateformes de production. Un travail a donc été entrepris pour proposer une implémentation introduisant un nouveau driver OpenTelemetry, appelé à remplacer à terme le driver Jaeger client.
Depuis la version 4.1.0 d'OSProfiler, le driver OTLP est utilisable. Les traces sont envoyées directement à un backend Jaeger, qui écoute OTLP sur le port 4318 par défaut.
Configuration
Avec Kolla, deux variables suffisent :
enable_osprofiler: "yes"
osprofiler_backend_connection_string: "otlp://jaeger.server:4318"Hors Kolla, la configuration de chaque service (ici Nova) contient une section [profiler] :
[profiler]
enabled = True
hmac_keys = SECRET_KEY
connection_string = otlp://jaeger.server:4318
trace_sqlalchemy = Truehmac_keys est la clé qui autorise le profiling : sans elle, personne ne peut déclencher de traces. trace_sqlalchemy ajoute les requêtes SQL aux traces.
Profiler une commande
On profile une commande en passant la clé HMAC à la ligne de commande OpenStack avec l'option --os-profile :
openstack --os-profile "$HMAC_KEY" server listDans Kolla, la clé est générée automatiquement : on la trouve dans /etc/kolla/passwords.yml.
grep osprofiler /etc/kolla/passwords.ymlLa commande s'exécute normalement, mais chaque service qu'elle traverse émet ses spans. Il reste à ouvrir l'interface Jaeger et à rechercher la trace correspondante.
Sur une trace de ce genre, un span de base de données anormalement long, au milieu de l'appel d'un service, désigne immédiatement la requête à examiner. Pour un exemple de charge sur la base de données côté Neutron, voir l'article sur le service metadata.