首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Prometheus(引擎)收集Docker指标 | Collect Docker metrics with Prometheus (Engine)

Prometheus 是一个开源系统监控和警报工具包。您可以将 Docker 配置为 Prometheus 目标。本主题向您展示如何配置 Docker,设置 Prometheus 作为 Docker 容器运行,并使用 Prometheus 监控 Docker 实例。

警告:可用指标和这些指标的名称正在积极开发中,并可能随时更改。

目前,您只能监控 Docker 本身。您目前无法使用 Docker 目标监控您的应用程序。

配置 Docker

要将 Docker 守护程序配置为 Prometheus 目标,您需要指定metrics-address。最好的方法是通过daemon.json默认情况下位于以下位置之一的。如果该文件不存在,请创建它。

  • Linux/etc/docker/daemon.json
  • Windows 服务器C:\ProgramData\docker\config\daemon.json
  • 适用于 Mac 的 Docker for Mac / Docker:单击工具栏中的 Docker 图标,选择 Preferences,然后选择 Daemon。点击高级

如果该文件当前为空,请粘贴以下内容:

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

如果文件不为空,请添加这两个键,确保生成的文件是有效的JSON。请注意,除了最后一行,每行都以逗号(,)结尾。

保存文件,或者在 Docker for Mac 或 Docker for Windows 的情况下,保存配置。重新启动 Docker。

Docker 现在在端口9323上公开 Prometheus 兼容指标。

配置并运行 Prometheus

在此示例中,Prometheus 在同一主机上作为 Docker 容器运行。

复制以下配置文件之一并将其保存到/tmp/prometheus.yml。这是一个普通存储 Prometheus 配置文件,除了在文件底部添加 Docker 作业定义之外。Docker for Mac 和 Docker for Windows 需要稍微不同的配置。

  • Docker for Linux
  • Docker for Mac 或 Windows
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'codelab-monitor'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'docker'
         # metrics_path defaults to '/metrics'
         # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9323']
# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'codelab-monitor'

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first.rules"
  # - "second.rules"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'docker'
         # metrics_path defaults to '/metrics'
         # scheme defaults to 'http'.

    static_configs:
      - targets: ['192.168.65.1:9323']

接下来,使用此配置启动单个副本 Prometheus 服务。

$ docker service create --replicas 1 --name my-prometheus \
    --mount type=bind,source=/tmp/prometheus.yml,destination=/etc/prometheus/prometheus.yml \
    --publish 9090:9090/tcp \
    prom/prometheus

验证 Docker 目标是否在http:// localhost:9090 / targets / 中列出。

如果您使用 Docker for Mac 或 Docker for Windows,则无法直接访问端点 URL。

使用 Prometheus

创建一个图。点击 Prometheus UI 中的图表链接。从“ 执行”按钮右侧的组合框中选择一个度量标准,然后单击“ 执行”。以下屏幕截图显示了图表engine_daemon_network_actions_seconds_count

上图显示了一个相当闲置的 Docker 实例。如果您正在运行活动工作负载,则您的图形可能看起来不同

为了使图表更有趣,可以通过启动一项服务来创建一些网络操作,其中包括10个任务,它们可以不停地 ping Docker(您可以将 ping 目标更改为任何您喜欢的任务):

$ docker service create \
  --replicas 10 \
  --name ping_service \
  alpine ping docker.com

等待几分钟(默认刮取间隔为15秒)并重新加载图形。

准备就绪后,请停止并删除ping_service服务,以免无缘无故地淹没有ping的主机。

$ docker service remove ping_service

等待几分钟,你会发现图表回落到闲置状态。

下一步

扫码关注腾讯云开发者

领取腾讯云代金券