⚠️ Traduction non officielle - Cette documentation est une traduction communautaire non officielle de Docker.

OpenTelemetry pour la CLI Docker

Requires: Docker Engine 26.1.0 and later

La CLI Docker prend en charge l'instrumentation OpenTelemetry pour émettre des métriques sur les invocations de commandes. Ceci est désactivé par défaut. Vous pouvez configurer la CLI pour commencer à émettre des métriques vers l'endpoint que vous spécifiez. Cela vous permet de capturer des informations sur vos invocations de commandes docker pour obtenir plus d'informations sur votre utilisation de Docker.

L'exportation de métriques est optionnelle, et vous contrôlez où les données sont envoyées en spécifiant l'adresse de destination du collecteur de métriques.

Qu'est-ce qu'OpenTelemetry ?

OpenTelemetry, ou OTel en abrégé, est un framework d'observabilité ouvert pour créer et gérer les données de télémétrie, telles que les traces, métriques et logs. OpenTelemetry est indépendant des fournisseurs et des outils, ce qui signifie qu'il peut être utilisé avec une large variété de backends d'observabilité.

Le support de l'instrumentation OpenTelemetry dans la CLI Docker signifie que la CLI peut émettre des informations sur les événements qui ont lieu, en utilisant les protocoles et conventions définis dans la spécification Open Telemetry.

Comment ça fonctionne

La CLI Docker n'émet pas de données de télémétrie par défaut. Seulement si vous avez défini une variable d'environnement sur votre système, la CLI Docker tentera d'émettre des métriques OpenTelemetry, vers l'endpoint que vous spécifiez.

DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint>

La variable spécifie l'endpoint d'un collecteur OpenTelemetry, où les données de télémétrie sur l'invocation de la CLI docker doivent être envoyées. Pour capturer les données, vous aurez besoin d'un collecteur OpenTelemetry à l'écoute sur cet endpoint.

Le but d'un collecteur est de recevoir les données de télémétrie, les traiter, et les exporter vers un backend. Le backend est l'endroit où les données de télémétrie sont stockées. Vous pouvez choisir parmi plusieurs backends différents, tels que Prometheus ou InfluxDB.

Certains backends fournissent des outils pour visualiser les métriques directement. Alternativement, vous pouvez aussi exécuter un frontend dédié avec support pour générer des graphiques plus utiles, comme Grafana.

Configuration

Pour commencer à capturer les données de télémétrie pour la CLI Docker, vous devrez :

  • Définir la variable d'environnement DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT pour pointer vers un endpoint de collecteur OpenTelemetry
  • Exécuter un collecteur OpenTelemetry qui reçoit les signaux des invocations de commandes CLI
  • Exécuter un backend pour stocker les données reçues du collecteur

Le fichier Docker Compose suivant amorce un ensemble de services pour commencer avec OpenTelemetry. Il inclut un collecteur OpenTelemetry auquel la CLI peut envoyer des métriques, et un backend Prometheus qui récupère les métriques du collecteur.

compose.yaml
name: cli-otel
services:
  prometheus:
    image: prom/prometheus
    command:
      - "--config.file=/etc/prometheus/prom.yml"
    ports:
      # Publier le frontend Prometheus sur localhost:9091
      - 9091:9090
    restart: always
    volumes:
      # Stocker les données Prometheus dans un volume :
      - prom_data:/prometheus
      # Monter le fichier de configuration prom.yml
      - ./prom.yml:/etc/prometheus/prom.yml
  otelcol:
    image: otel/opentelemetry-collector
    restart: always
    depends_on:
      - prometheus
    ports:
      - 4317:4317
    volumes:
      # Monter le fichier de configuration otelcol.yml
      - ./otelcol.yml:/etc/otelcol/config.yaml

volumes:
  prom_data:

Ce service suppose que les deux fichiers de configuration suivants existent à côté de compose.yaml :

  • otelcol.yml
    # Recevoir les signaux via gRPC et HTTP
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    
    # Établir un endpoint pour que Prometheus puisse récupérer
    exporters:
      prometheus:
        endpoint: "0.0.0.0:8889"
    
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          exporters: [prometheus]
  • prom.yml
    # Configurer Prometheus pour récupérer l'endpoint du collecteur OpenTelemetry
    scrape_configs:
      - job_name: "otel-collector"
        scrape_interval: 1s
        static_configs:
          - targets: ["otelcol:8889"]

Avec ces fichiers en place :

  1. Démarrez les services Docker Compose :

    $ docker compose up
    
  2. Configurez la CLI Docker pour exporter la télémétrie vers le collecteur OpenTelemetry.

    $ export DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
    
  3. Exécutez une commande docker pour déclencher l'envoi d'un signal métrique par la CLI vers le collecteur OpenTelemetry.

    $ docker version
    
  4. Pour voir les métriques de télémétrie créées par la CLI, ouvrez le navigateur d'expressions Prometheus en allant sur http://localhost:9091/graph.

  5. Dans le champ Query, entrez command_time_milliseconds_total, et exécutez la requête pour voir les données de télémétrie.

Métriques disponibles

La CLI Docker exporte actuellement une seule métrique, command.time, qui mesure la durée d'exécution d'une commande en millisecondes. Cette métrique a les attributs suivants :

  • command.name : le nom de la commande
  • command.status.code : le code de sortie de la commande
  • command.stderr.isatty : true si stderr est attaché à un TTY
  • command.stdin.isatty : true si stdin est attaché à un TTY
  • command.stdout.isatty : true si stdout est attaché à un TTY