适用于 Docker CLI 的 OpenTelemetry

在 Docker Engine 版本中引入 26.1.0

Docker CLI 支持 OpenTelemetry 检测 用于发出有关命令调用的指标。默认情况下,此选项处于禁用状态。 您可以配置 CLI 以开始向您的终端节点发送指标 指定。这允许您捕获有关命令的信息 调用以更深入地了解您的 Docker 使用情况。docker

导出指标是可选的,您可以控制数据的发送位置 指定 Metrics Collector 的目标地址。

什么是 OpenTelemetry?

OpenTelemetry(简称 OTel)是一个开放的可观测性框架,用于 创建和管理遥测数据,例如跟踪、指标和日志。 OpenTelemetry 与供应商和工具无关,这意味着它可以与 各种 Observability 后端。

Docker CLI 中对 OpenTelemetry 检测的支持意味着 CLI 可以发出 有关使用协议和约定发生的事件的信息 在 Open Telemetry 规范中定义。

运作方式

默认情况下,Docker CLI 不会发出遥测数据。仅当您在 环境变量将 Docker CLI 尝试发出 OpenTelemetry metrics,连接到您指定的终端节点。

DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT=<endpoint>

该变量指定 OpenTelemetry 收集器的端点,其中遥测数据 关于 CLI 调用。要捕获数据,您需要 侦听该终端节点的 OpenTelemetry 收集器。docker

收集器的目的是接收遥测数据、对其进行处理,以及 将其导出到后端。后端是存储遥测数据的地方。 您可以从许多不同的后端中进行选择,例如 Prometheus 或 InfluxDB 的 InfluxDB 中。

一些后端提供了直接可视化指标的工具。 或者,您也可以运行一个支持 生成更有用的图形,例如 Grafana。

设置

要开始为 Docker CLI 捕获遥测数据,您需要:

  • 将环境变量设置为指向 OpenTelemetry 收集器终端节点DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT
  • 运行一个 OpenTelemetry 收集器,该收集器从 CLI 命令调用接收信号
  • 运行后端以存储从收集器接收的数据

以下 Docker Compose 文件引导一组服务以开始使用 OpenTelemetry。 它包括一个 OpenTelemetry 收集器,CLI 可以将指标发送到该收集器。 以及一个 Prometheus 后端,用于从收集器中抓取指标。

compose.yml
name: cli-otel
services:
  prometheus:
    image: prom/prometheus
    command:
      - "--config.file=/etc/prometheus/prom.yml"
    ports:
      # Publish the Prometheus frontend on localhost:9091
      - 9091:9090
    restart: always
    volumes:
      # Store Prometheus data in a volume:
      - prom_data:/prometheus
      # Mount the prom.yml config file
      - ./prom.yml:/etc/prometheus/prom.yml
  otelcol:
    image: otel/opentelemetry-collector
    restart: always
    depends_on:
      - prometheus
    ports:
      - 4317:4317
    volumes:
      # Mount the otelcol.yml config file
      - ./otelcol.yml:/etc/otelcol/config.yaml

volumes:
  prom_data:

此服务假定以下两个配置文件与 :compose.yml

  • otelcol.yml
    # Receive signals over gRPC and HTTP
    receivers:
      otlp:
        protocols:
          grpc:
          http:
    
    # Establish an endpoint for Prometheus to scrape from
    exporters:
      prometheus:
        endpoint: "0.0.0.0:8889"
    
    service:
      pipelines:
        metrics:
          receivers: [otlp]
          exporters: [prometheus]
  • prom.yml
    # Configure Prometheus to scrape the OpenTelemetry collector endpoint
    scrape_configs:
      - job_name: "otel-collector"
        scrape_interval: 1s
        static_configs:
          - targets: ["otelcol:8889"]

准备好这些文件后:

  1. 启动 Docker Compose 服务:

    $ docker compose up
    
  2. 配置 Docker CLI 以将遥测数据导出到 OpenTelemetry 收集器。

    $ export DOCKER_CLI_OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317
    
  3. 运行命令以触发 CLI 向 OpenTelemetry 收集器。docker

    $ docker version
    
  4. 要查看 CLI 创建的遥测指标,请打开 Prometheus 表达式 通过转到 http://localhost:9091/graph 浏览器。

  5. Query 字段中,输入 ,然后执行 用于查看遥测数据的查询。command_time_milliseconds_total

可用指标

Docker CLI 当前导出一个指标 ,该指标衡量 命令的执行持续时间(以毫秒为单位)。此量度具有 以下属性:command.time

  • command.name:命令的名称
  • command.status.code:命令的退出代码
  • command.stderr.isatty:如果 stderr 附加到 TTY,则为 true
  • command.stdin.isatty:如果 stdin 连接到 TTY,则为 true
  • command.stdout.isatty:如果 stdout 附加到 TTY,则为 true