OpenTelemetry pour la CLI Docker
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.
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 :
-
Démarrez les services Docker Compose :
$ docker compose up
-
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
-
Exécutez une commande
docker
pour déclencher l'envoi d'un signal métrique par la CLI vers le collecteur OpenTelemetry.$ docker version
-
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.
-
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 commandecommand.status.code
: le code de sortie de la commandecommand.stderr.isatty
: true si stderr est attaché à un TTYcommand.stdin.isatty
: true si stdin est attaché à un TTYcommand.stdout.isatty
: true si stdout est attaché à un TTY