RousselTMLEARNING

Article · Opentelemetry : de la découverte à l'expertise

Les conventions sémantiques (semconv)

1. Le rôle des conventions #

Un vocabulaire commun pour toute la télémétrie.

Le problème #

Avant et après les conventions
Les outils d'analyse peuvent reconnaître une requête HTTP ou une requête SQL sans configuration.

Les conventions sémantiques (semantic conventions, « semconv ») définissent les noms, types, unités et valeurs autorisées des attributs, des spans, des métriques et des événements. Elles permettent à un backend d'afficher automatiquement une carte des services, de détecter une requête SQL lente ou de calculer un taux d'erreur HTTP, quel que soit le langage ou la bibliothèque.

Les règles de nommage #

  • Espaces de noms en minuscules séparés par des points : http.request.method, db.collection.name.
  • Des mots séparés par _ dans un même segment : http.response.status_code.
  • Des unités UCUM explicites dans la métrique (s, By, {request}), jamais dans le nom.
  • Les attributs propres à votre domaine dans votre espace de noms : shop.cart.items, jamais dans http.*.

2. Les conventions à connaître #

Ressource, HTTP, bases, messagerie, GenAI.

Ressource #

AttributExempleRemarque
service.namecheckoutobligatoire
service.version1.4.0relier un incident à une version
service.namespaceshopregrouper des services
service.instance.iduuid du processusdistinguer les instances
deployment.environment.nameproductionremplace deployment.environment
host.name, container.id, k8s.pod.name, k8s.namespace.nameajoutés par les détecteurs de ressource et k8sattributes

HTTP (stable) #

AttributExemple
http.request.methodGET
http.route/users/{id}
http.response.status_code503
url.full (client) / url.path (serveur)https://api/users/42
server.address, server.portapi.example.com, 443
error.type503, timeout, java.net.UnknownHostException

Nom de span : {méthode} {route}, par exemple GET /users/{id}, jamais l'URL complète (cardinalité). Métriques : http.server.request.duration et http.client.request.duration, histogrammes en secondes.

Bases de données, messagerie, GenAI #

DomaineAttributs clésMaturité
Bases de donnéesdb.system.name, db.namespace, db.collection.name, db.operation.name, db.query.text (paramètres masqués)stable pour les attributs de base
Messageriemessaging.system, messaging.destination.name, messaging.operation.type (send, receive, process)en cours de stabilisation
RPC / gRPCrpc.system, rpc.service, rpc.methoden développement
GenAIgen_ai.operation.name, gen_ai.request.model, gen_ai.usage.input_tokensen développement (voir OpenInference)
Exceptionsexception.type, exception.message, exception.stacktracestable

3. Stabilité et migration #

Les conventions évoluent : s'y préparer.

Versions et schema URL #

Les conventions sont versionnées (v1.26, v1.30…). Chaque instrumentation déclare la version qu'elle suit via une schema URL (https://opentelemetry.io/schemas/1.26.0). Lors de la stabilisation des conventions HTTP, de nombreux attributs ont été renommés (http.method → http.request.method, http.status_code → http.response.status_code).

# Pendant une migration : émettre les anciens ET les nouveaux attributs
export OTEL_SEMCONV_STABILITY_OPT_IN=http/dup     # puis "http" quand les tableaux de bord sont migrés
export OTEL_SEMCONV_STABILITY_OPT_IN=database/dup
Erreur Courante : Une mise à jour d'instrumentation peut renommer des attributs et casser des tableaux de bord ou des alertes. Lisez les notes de version et utilisez le mode dup pendant la transition.

Normaliser dans le Collector #

processors:
  transform/semconv:
    trace_statements:
      - context: span
        statements:
          - set(attributes["http.response.status_code"], attributes["http.status_code"]) where attributes["http.status_code"] != nil
          - delete_key(attributes, "http.status_code")

4. Vos propres conventions #

Étendre sans diverger.

Conventions maison #

  • Réutilisez d'abord un attribut standard s'il existe.
  • Créez un espace de noms propre à l'entreprise ou au domaine (shop., acme.).
  • Documentez chaque attribut (type, unité, exemples, cardinalité attendue) dans un registre versionné.
  • Interdisez les attributs à forte cardinalité sur les métriques (identifiants d'utilisateur, URL complètes).

OTel Weaver est l'outil du projet pour décrire un registre de conventions en YAML, le valider, générer de la documentation et des constantes de code, et vérifier que la télémétrie réellement émise respecte le registre.

weaver registry check -r ./mon-registre          # valider le registre
weaver registry generate -r ./mon-registre markdown docs/   # générer la documentation
Cycle d'un registre de conventions
Le registre versionné devient la référence commune des équipes.

Vérifier ses données #

Bonne Pratique : Ajoutez à la CI un test qui démarre l'application avec l'exportateur console ou un Collector de test et vérifie la présence de service.name, service.version et des attributs attendus.

📄 Les conventions sémantiques OpenTelemetry (semconv) : nommer la télémétrie →

Mon suivi

  • ⏱ Durée estimée : ≈ 6 min

Connectez-vous pour suivre votre progression et prendre des notes. Se connecter

✉️ Poser une question

Articles recommandés

Les métriques OpenTelemetry : instruments, temporalité, histogrammes et exemplars

Maîtriser le signal métrique : MeterProvider, instruments synchrones et asynchrones (Counter, UpD...

Grafana Alloy vs OpenTelemetry Collector : Lequel choisir ?

Comparaison détaillée entre Grafana Alloy et l'OpenTelemetry Collector. Découvrez les avantages, ...

Instrumenter ses applications pour Jaeger avec OpenTelemetry

Envoyer des traces à Jaeger avec OpenTelemetry : auto-instrumentation (Java, Python, Node.js), SD...

Projet fil rouge : les quatre signaux de l'OpenTelemetry Demo dans la stack Grafana

Un projet fil rouge qui traverse les formations d'observabilité : déployer l'OpenTelemetry Demo, ...

OpenTelemetry Collector : les Processors (transformer, filtrer et protéger la télémétrie)

Maîtriser les processors du Collector OpenTelemetry : batch, memory_limiter, attributes, resource...

OpenTelemetry sur Kubernetes : Operator, auto-instrumentation et Collector

Déployer OpenTelemetry sur Kubernetes : modes de déploiement du Collector (DaemonSet, Deployment,...

Stocker et interroger la télémétrie directement dans ClickHouse

Envoyer logs et traces dans ClickHouse avec l'exportateur OpenTelemetry, comprendre le schéma des...

Les logs avec OpenTelemetry : modèle de données, appenders, corrélation et collecte

Maîtriser le signal log : modèle de données LogRecord, Logs Bridge API et appenders (Logback, Log...

Les profils, le quatrième signal d'OpenTelemetry : profilage continu et corrélation avec les traces

Comprendre le nouveau signal profile d'OpenTelemetry : profilage continu, flame graphs, modèle de...

Soutenir

♥ SOUTENIR

Soutenez RousselTM Learning

Les formations, articles, TP et attestations restent gratuits et sans publicité intrusive. Une contribution libre, du montant de votre choix, finance l’hébergement, les environnements de TP et l’écriture de nouveaux contenus.

Contribuer avec PayPal Montant libre · carte bancaire ou compte PayPalEn savoir plus
QR code PayPal
Ou scannez ce QR code avec votre téléphone

Merci, chaque contribution compte !